不涉及任何外部脚本的更简单的替代方法是使用 SSH 别名。我知道原发帖人特意要求不要更改~/.ssh/config,但我怀疑这里有误会。
服务器上的本地用户与执行提交的人不同,并且可以与执行“git push”的人不同。
- 在服务器上,托管软件可以作为单个用户(通常是“git”)运行
- 提交人的身份只是git的业务(添加到提交的元数据中),与服务器无关,不受服务器身份验证
- “git push”-er 的身份是相关的,并且建立在
基于 ssh 密钥在服务器上运行 git 托管软件的系统
出于这个原因,在执行推送的系统上,即使是相同的本地帐户和相同的远程服务器,甚至在同一个 git 存储库中,也可以通过使用下面解释的方法使用 ssh 别名来强制使用特定身份。
假设您在 gitorious.org 服务器上拥有您的常规帐户,我们称其为“开发者”。
您不想使用您的“开发者”帐户自动推送 [1],因此您创建了另一个用于同步的 gitorious 帐户,我们称之为“机器人”。
对于自动化,将仅使用“机器人”帐户:
第 1 步:将 'robot' 添加到需要推送到的 gitorius 项目中。
第 2 步:在本地机器上创建一个无密码密钥(这将与 gitorious 上的机器人帐户相关联)。
ssh-keygen -f ~/.ssh/id_rsa_robot
第 3 步:将公钥 ~/.ssh/id_rsa_robot.pub 上传到 'robot' 帐户的 gitorious 上。
第 4 步:gitorious 上的 git SSH URI 格式为 git@gitorious.org:prj_or_user/subproject.git。在您的 ~/.ssh/config 文件中添加以下行:
host robot.gitorious.org
HostName gitorious.org
IdentityFile ~/.ssh/id_rsa_robot
IdentitiesOnly "yes"
这将确保:
- 只要您使用“robot.gitorious.org”主机名,它就会连接
到 gitorious.org(主机名选项),
- 它将使用无密码密钥验证机器人身份
gitorius.org(IdentiFile 选项)和
- 即使你有一个 ssh 代理运行,它也会忽略默认密钥
并使用无密码的(IdentiesOnly “yes”)。
第 5 步:假设您项目的 gitorious 上的 SSH URI 是 'git@gitorious.org:project/project.git',在本地存储库中定义一个新的远程 'autopush'稍作修改的主机名:
git remote add autopush git@robot.gitorious.org:project/project.git
设置完成,现在尝试通过'autopush'遥控器推送到gitorious。
git push autopush master
如果一切顺利并且有要推送的更改,您应该会看到您作为“机器人”成功推送到“gitorious.org”
[1] 对于自动推送,必须为帐户生成无密码密钥,但将其附加到 gitorious 'developer' 帐户意味着自动化作业可以推送到任何 gitourious 项目,其中 'developer'涉及到gitorious。