Git commit用户与git push用户不同

时间:2014-04-18 09:44:02

标签: git bash bamboo

我的行为非常奇怪。我有一个在Bamboo上运行的bash脚本,它设置了所需的git用户,提交了一些更改,然后将它们推送到主分支。

问题在于,提交是由正确的用户完成的,但推送是由不同的用户完成的。

提交看起来像:

USERX authored commit 7d365...

然后推动:

USERY pushed to master at user/repo 

设置用户名和电子邮件后,提交和推送一个接一个地完成,为什么会发生这种情况,我应该寻找什么?这是我的bash脚本的一部分:

git config user.name "$bamboo_GIT_USER_NAME"
git config user.email "$bamboo_GIT_USER_EMAIL"

git add -v CHANGELOG.rst || exit 3
git commit -v -m "Updated CHANGELOG.rst" || exit 3
git push origin "$bamboo_GIT_BRANCH" -v || exit 3

2 个答案:

答案 0 :(得分:4)

提交是存在于git存储库中的实际事物(特别是“对象”)。它们包含给作者和提交者的文本字符串。一旦写入对象,这些就是永久性的,不可更改的。

  • 除此之外:git commit --amend不会改变它们;相反,它在提交中使用不同的数据进行新的不同的提交,并将分支头指向新的提交:

    ... - E - F - G   <-- master
    

    如果你然后git commit --amend --author='someone else <someone@else.where>',git放弃旧提示提交(G),添加新提交(G'):

    ... - E - F - G   [abandoned]
                \
                  G'  <-- master
    

执行git push时,这会有很大不同。

比方说,例如,您首先git fetch来自git://else.where/path/to/repo.git的存储库中的其他人写的一些提交。或者,您编写自己的提交,并将user.nameuser.email设置为一些不常见的值。

  • 除此之外:您的示例代码有git add但没有git commit

然后你git push这些提交(由其他人撰写,或通过奇user.nameuser.email提交)到ssh://mylogin@some.place/different/path/to/repo.git

在这里,您打包检索的提交,并将它们提供给您的其他服务器。但是(具体来说,mylogin)通过ssh登录some.place,提交提交;您提交的提交是您从else.where检索到的永久,不可更改的存储库对象,或者是您在user.nameuser.email中设置的设置。

请注意,git 不会对您进行身份验证或登录主机some.place。正如您所知(或者更确切地说,mylogin@some.place),这是对您进行身份验证并将您登录的ssh。然后你的ssh会话运行git命令,该命令接收你发送的git对象。如果您在some.place上询问哪些用户正在运行ssh,则会得到mylogin:那是通过ssh登录的用户。这与存储在正在上载的提交中的作者和提交者名称完全断开。

答案 1 :(得分:0)

应该是这样的。

要更改上次提交的作者:

$ git commit --amend --author='somebody <somebody@example.com>'