我在 Git GUI 和 TortoiseGit 如何调用 Git 钩子方面看到了一些奇怪的东西。鉴于以下结帐后挂钩,人们会期望 git 执行 powershell 命令并创建文件:
#!/bin/sh
c:/windows/system32/WindowsPowerShell/v1.0/PowerShell.exe -Command "New-Item File.txt -type file"
如果我使用 Git Bash 运行这个钩子,该文件会在我的存储库中创建。如果我使用 Atalassian 的 SourceTree 运行这个钩子,我也会得到文件。当从 TortoiseGit 或 GitGui 调用结帐时,钩子开始表现得很奇怪。既不产生文件。
我已经能够获得钩子(bash)来调用我创建的简单 exe。问题似乎与powershell或我如何调用powershell有关。我曾尝试使用 -Sta、-ExecutionPolicy RemoteSigned 和 -NoProfile 调用 powershell,但在 Git Gui 或 TortoiseGit 中似乎没有任何效果。
对我来说最大的惊喜是钩子不能与 GitGui 一起正常工作。有谁知道这可能是什么原因造成的?
如何重现:
- 在Win7上运行
- 有 Git-Gui 版本 0.17.GITGUI
- 拥有 Git 版本 1.8.3.msysgit.0
- 初始化一个新的仓库
- 在 .git/hooks 下的新仓库中创建一个名为 post-checkout 的文件
- 将以下脚本放入新创建的结帐后挂钩中:
--
#!/bin/sh
c:/windows/system32/WindowsPowerShell/v1.0/PowerShell.exe -Command "New-Item File.txt -type file"
--
- 将任何文件添加/提交到您的新仓库
- 使用 git bash 在你的新仓库中运行 git checkout master
- 查找名为 File.txt 的文件(确认 git bash 正确调用了 powershell)
- 删除新文件
- 在同一个 repo 中打开 GitGui 或 TortoiseGit 并在 master 上运行 checkout
- 查找名为 File.txt 的文件(不存在)
任何帮助,想法?我不了解 TCL,所以我无法真正理解 GitGui 是如何调用钩子的。