我正在尝试设置源树自定义 Git 操作,以提取和压缩文件以从选定的提交到 HEAD 进行部署,不包括使用 --diff-filter 删除的文件。
archive -o deploy.zip HEAD $(git diff --name-only --diff-filter=ACMR $SHA)
问题是这个 Git 命令可以在 Git 终端窗口中完美运行,不会出现错误,但是当我尝试在源代码树中使用它时,我收到此错误。
git archive -o deploy.zip HEAD $(git diff --name-only --diff-filter=ACMR fbf360c607b01fc8c504c9fcf98114eb4bc1896c)
error: unknown option name-only
我试图找出这个问题的问题所在,但没有成功。我想听听是否有人在源代码树中遇到这个或类似的问题,因为它对我来说看起来像是一个错误。
$(...) 是 bash 命令替换,它在内部运行命令并将其输出插入到命令行中。 SourceTree 不使用 bash 来调用命令(它是 Windows,不是吗?),并且您的命令不会被替换。
您应该将命令放入脚本中,大致如下:
------c:..\script.sh----
#!/bin/sh
git archive -o deploy.zip HEAD $(git diff --name-only --diff-filter=ACMR "$1")
并设置从源代码树调用它:
要运行的脚本:[...ash.exe]
参数:[ -c c:..\script.sh $SHA1 ]
尤其是对于 Windows 机器,似乎您还需要从 @max630 的答案中迈出一步。 将命令放入脚本中(例如 c:\scripts\deploy.sh)
#!/bin/sh
git archive -o deploy.zip HEAD $(git diff --name-only --diff-filter=ACMR "$1")
按如下方式设置自定义操作:
要运行的脚本:从浏览窗口中选择bash.exe,它可能位于:
C:\Users\{user}\AppData\Local\Atlassian\SourceTree\git_local\bin\bash.exe
参数:
--login -i c:\scripts\deploy.sh
(打开终端时会短暂显示
--login -i
)将以下内容添加到脚本中以暂停屏幕以查看任何错误消息可能很有用(我相信选中了“在单独的窗口中打开”)
read -p "Press [Enter] key to continue..."
更新2024年3月供参考...
我尝试使用自定义操作手动运行 git-hook。我让它与 Windows 11 + SourceTree 一起工作:
命令:C:\Users{用户}\AppData\Local\Atlassian\SourceTree\git_local\git-bash
参数:$REPO/.git/hooks/pre-commit
希望这对其他人有帮助..我花了一些时间来解决这个问题...