windows - 如何在批处理文件中执行多个 git 命令而不在第一个命令后终止?

标签 windows git batch-file

我试着把我经常连续使用的一系列 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 命令处理器或其他东西兼容)。

您可以通过几种方式解决此问题:

  1. 使用 call 命令在您的批处理文件中调用 git 以运行 git.cmd 批处理文件并返回您的批处理文件:

    call git checkout %2
    call git fetch origin
    rem etc...
    
  2. 使用 .exe 扩展名在您的批处理文件中调用 git 以完全避免 git.cmd 批处理文件。为此,您可能需要确保您的路径和其他环境变量设置为 git.exe 期望的方式(这似乎是 git.cmd在 msysgit 中执行):

    git.exe checkout %2
    rem etc...
    

关于windows - 如何在批处理文件中执行多个 git 命令而不在第一个命令后终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401229/

相关文章:

git - 如何调试 git 别名?

windows - 如何保存命令提示符的输出

windows - 分析 .exe/.dll (Windows PE) 文件中的代码膨胀

git - 如何知道 "git push"将推送哪些差异?

git - 如何使用 zsh compinit 启用 git 文件选项卡补全?

windows - for/f 循环处理文件名和符号

batch-file - .bat 文件夹中所有 wav 上的 lame.exe

C# Windows 窗体 ping.SendAsync 问题与 DataGridView

用于 cachegrind 文件的 PHP 解析器?

c# - 使用 iTextSharp 将图像插入 PDF