在Windows中自动执行git命令

时间:2013-06-26 11:16:28

标签: bash batch-file github ssh build-automation

上下文:我正在构建一个自动构建脚本,该脚本将在Windows服务器盒上运行(因为我们的开发软件包仅限Windows)。我的客户端盒也是Windows。它应该执行许多步骤,其中一个步骤是登录github,丢弃所有本地更改(以防万一;确实不应该有任何本地更改),获取和合并。

限制: 1)我应该能够运行一个批处理文件(或其他脚本文件,只要它在Windows框上运行) 2)我无法走到盒子里并且每次都输入我的SSH密码。它应该自动运行。

问题:我无法让Git和SSH与我的Windows批处理文件很好地配合使用。

我的第一次尝试:

:: set repo folder
CD %2

:: check status
CALL git status
ECHO.

:: discard all changes
ECHO ~  discard all changes
ECHO.
CALL git reset --hard
CALL git clean -f -d
ECHO.

:: switch branch
ECHO ~  checkout branch %4
ECHO.
CALL git checkout %4
ECHO.

:: get any changes from server
ECHO ~  fetch %3
ECHO.
CALL git fetch %3
ECHO.

:: merge changes into current branch
ECHO ~  merge %3/%4
ECHO.
CALL git merge %3/%4
ECHO.

参数%2是windows文件位置,%3是github HTTPS url,%4是分支名称。

这有效,但使用HTTPS,这意味着手动输入我的用户名和密码。

所以我尝试在SSH(通过bash)中使用命令:

eval `ssh-agent`
ssh-add /z/id_rsa

就像批次一样:

CD C:\Program Files (x86)\Git\bin\
sh.exe --login -i -c "eval `ssh-agent` && ssh-add /z/id_rsa && exit"

但是,每次我使用此命令时,SSH还要求我输入密钥密码。

我怎样才能(A)在批处理/重击脚本之间保持SSH登录信息,或者B)以编程方式输入密码?

1 个答案:

答案 0 :(得分:3)

由于您在客户端和服务器上使用Windows,我建议您使用plink中的PuTTY Suite进行自动化操作。

该套件还包括SSH代理(pageant)。但是,如果私钥受密码保护,则只需要代理。出于自动化目的,我将创建一个没有密码的专用密钥对,并使用该密钥:

plink -ssh -batch -i "C:\path\to\private.ppk" user@host C:\serverpath\batch.cmd

在上面的命令中,C:\serverpath\batch.cmd是服务器上批处理文件的位置。您还可以将要运行的命令保存在客户端上的文件中,并将其与plink一起使用:

plink -ssh -batch -i "C:\path\to\private.ppk" -m C:\localpath\batch.cmd user@host
相关问题