在Windows下的Git钩子

我有以下代码在钩子post-receive中的工作目录结帐:

#!/bin/sh git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f 

不幸的是,似乎没有工作。 但是,当我在Windows命令行(cms)中input这个命令时,该命令可以正常工作:

 git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f 

我已经检查了权限和执行属性,但没有。

更新:

我想我越来越近了。 现在我知道问题是什么,但我不知道为什么会发生这种情况。 挂钩实际上正在触发,但我收到此消息:

 remote: Starting copy from repository to work tree... remote: fatal: Not a git repository: 'd:/_gitrepo.git/' remote: Finished. 

我试图改变d:的path到整个networkingpath,但它仍然无法正常工作。 如果我去远程存储库,我做了一个git日志,更改是在那里,如果我用sh运行钩子,它的工作原理。 为什么它明确表示它不是git仓库?

Solutions Collecting From Web of "在Windows下的Git钩子"

我终于搞定了! 这真的很奇怪。 我不得不输入一个pwd来查看批处理的实际位置,并显示服务器上的挂接位置。 但是,在下一行我添加了一个hostname ,它显示我的本地主机名。 然后我添加整个路径就像:

 #!/bin/sh echo "Starting copy from repository to work tree..." pwd hostname git --work-tree=//remotehost/d$/Webseiten/__gitweb --git-dir=//remotehost/d$/_gitr epo.git checkout -f echo "Finished." 

我希望这个解决方案适用于某人

对于一个shell脚本(这些钩子脚本将作为shell执行,即使在Windows中,通过msysgit的msys层 ),你可以使用不同的路径:

 #!/bin/sh git --work-tree=/d/websites/__gitweb --git-dir=/d/_gitrepo.git/ checkout -f 

在“MinGW中Posix路径转换 ”中也可以看到其他可能性