我试着把我经常连续使用的一系列 GIT 命令放在一起作为批处理文件,这样我就不会重复太多。例如,我有这个名为 update_repo_branch.bat
的批处理文件来更新本地 repo 并将分支与远程分支同步:
@echo off
if(%1) == () goto end
if(%2) == () goto end
cd %1
git checkout %2
git fetch origin
git merge oring/%2
:end
偷懒是件好事,但我发现当 GIT 命令完成时,它似乎会发回一个退出标志以终止正在运行的任何东西。因此,使用批处理文件一次性执行它们是行不通的。知道如何解决它吗?
最佳答案
我不确定这是否适用于所有 Windows git 包,但至少有一些使用 git.cmd
脚本作为实际 git 可执行文件的包装器(例如 git .exe
).因此,当您在批处理文件中使用 git
命令时,Windows 实际上正在运行另一个批处理文件。
不幸的是,当一个批处理文件调用另一个批处理文件时,默认情况下它会“跳转”到调用的批处理文件,永远不会返回(这是为了与古老的 MS-DOS 命令处理器或其他东西兼容)。
您可以通过几种方式解决此问题:
使用
call
命令在您的批处理文件中调用git
以运行git.cmd
批处理文件并返回您的批处理文件:call git checkout %2 call git fetch origin rem etc...
使用
.exe
扩展名在您的批处理文件中调用git
以完全避免git.cmd
批处理文件。为此,您可能需要确保您的路径和其他环境变量设置为git.exe
期望的方式(这似乎是git.cmd
在 msysgit 中执行):git.exe checkout %2 rem etc...
关于windows - 如何在批处理文件中执行多个 git 命令而不在第一个命令后终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401229/