在 .bat 脚本中使用 git clone

8

是否可以编写一个Windows批处理脚本,在脚本中执行 "git clone" ,使脚本可以继续执行呢?对我来说,这总是退出。

我正在使用64位Git版本2.8.3,来自Windows 7 Enterprise SP1的"The Git Development Community"。 git.exe在我的路径中(c:\ program files \ git \ cmd \ git.exe) - 它不是通过git.cmd或类似文件间接执行。

我能够运行一系列命令,例如

git init
git add --all
git commit -m "commit message"

使用这些命令,批处理脚本会按顺序执行每个命令。同时,

git clone {url}

脚本会立即退出,并出现双倍提示,表明出现了某种异常退出(即使%ERRORLEVEL%为0):
git clone {url} new
Cloning into 'new'...
remote: Counting objects: 26, done
remote: Compressing objects: 100% (23/23) done.
remote: Total 26 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (26/26) done.
Checking connectivity... done.
c:\jdev\ppss\finalprep\ant2>c:\jdev\ppss\finalprep>

常见的 Windows 技巧,如使用 "call git clone ..." 和 "cmd /c git clone ..." 等似乎无法正常工作。即使是 "start /wait cmd /c git clone ..." 也不行。有什么想法吗?

我刚刚在一个简单的批处理文件中尝试了一下:echo 1 && git clone {url} {afolder} && echo 2:它确实显示了2(Windows 7,git 2.10)。 - VonC
请检查Git 2.10版本(https://github.com/git-for-windows/git/releases)是否仍存在问题。 - VonC
奇怪。在 c:\tmp\xxx 中,一个简单的两行脚本(test.bat: git clone ... @echo continuing...)无法重现问题。 - John Elion
我同意。仅仅为了测试,Git 2.10是否改善了情况?如果没有,你原来的脚本中必定有其他问题。 - VonC
没看到你的评论!刚下载了2.10版本,但它并没有解决问题。现在正在尝试深入脚本“环境”——也就是说,我在setlocal、for /F ... call以及脚本子程序中使用了第二个setlocal。但即使这样,我的tmp文件夹脚本仍无法复制...感谢你的建议。 - John Elion
是的,从一个简单的脚本(可以工作)开始,并将其构建回原始脚本,这将是确定问题的好方法。 - VonC
2个回答

5
"git clone" 后面的语句是一个 IF 语句。
git clone {url} subfolder
if "%var%" == "y" (
  @echo some commands went here
) else (
  @echo different commands went here
}

上述IF语句不是合法的DOS IF语句(ELSE关闭错误),但您不会从DOS中获得任何错误消息-您的脚本只是退出。看起来前一个命令导致了中止,这在我的情况下恰好是git clone。

这与Git无关,严格属于cmd.exe的荒谬行为。


很好的发现(双倍)+1 - VonC
git clone {url} <folder> 命令可用(文件夹为可选项) - parasrish

1
在具体出现问题的情况下,“git clone”写入的子目录已经存在,这是由于之前执行了“mkdir”。如果没有执行“mkdir”,也就是子目录不存在,批处理脚本会正常继续执行git clone,不需要任何特殊技巧,如cmd /c。

实际上不是这样的 :-( - 这是不可重复的。回到绘图板。正在构建我的脚本... - John Elion
你应该删除这个答案。 - Squashman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接