【问题标题】:Automating git commands in Windows在 Windows 中自动执行 git 命令
【发布时间】:2013-06-23 12:03:48
【问题描述】:

上下文:我正在构建一个自动构建脚本,它将在 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) 在批处理/bash 脚本之间保持 SSH 登录信息有效,或者 B) 以编程方式输入密码?

【问题讨论】:

  • 您的客户端运行的是 Windows 还是 Linux?
  • Ansgar Wiechers:Windows,在客户端和(尚不存在的)服务器上。

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


【解决方案1】:

由于您在客户端和服务器上使用 Windows,我建议您使用来自 PuTTY Suiteplink 来实现自动化。

该套件还包括一个 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

【讨论】:

  • 很好的答案,谢谢 Ansgar。一旦我在没有密码的情况下重新生成了我的密钥,我编写的原始脚本几乎是逐字执行的,唯一的区别是我将所有 git 命令都传递给了 sh.exe。不过,我会看看使用 Putty 的 plink,也许我可以将命令链清理成团队中其他人可读的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2016-03-25
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多