git commit用户与git push用户不同

lin*_*ndy 3 git bash bamboo

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

问题是,提交是由正确的用户完成的,而推送是由其他用户完成的。

提交看起来像:

USERX authored commit 7d365...
Run Code Online (Sandbox Code Playgroud)

然后推送:

USERY pushed to master at user/repo 
Run Code Online (Sandbox Code Playgroud)

设置用户名和电子邮件后,提交和推送会一个接一个地完成,为什么会发生这种情况,我应该寻找什么?这是我的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
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 5

提交是git存储库中的实际内容(特别是“对象”)。它们包含给作者和提交者的文本字符串。一旦写入对象,它们将是永久的且不可更改。

  • 撇开:git commit --amend不改变它们;相反,它将进行一个新的不同的提交,并在提交中使用不同的数据,并将分支头指向新的提交:

    ... - E - F - G   <-- master
    
    Run Code Online (Sandbox Code Playgroud)

    如果这样git commit --amend --author='someone else <someone@else.where>',git放弃旧的提示commit(G),添加一个新的commit(G'):

    ... - E - F - G   [abandoned]
                \
                  G'  <-- master
    
    Run Code Online (Sandbox Code Playgroud)

当您执行时git push,这会执行非常不同的操作。

举例来说,假设您首先git fetch从的存储库中由其他人撰写了一些提交git://else.where/path/to/repo.git。或者,您使用编写自己的提交,user.name并将其user.email设置为一些异常值。

  • 撇开:您的示例代码有一个,git add但没有git commit

然后,您将git push这些提交(由其他人编写,或用奇数user.name和提交user.emailssh://mylogin@some.place/different/path/to/repo.git

在这里,您将检索到的提交打包在一起,并将其交付给其他服务器。但这是(特别是mylogin)通过ssh登录到some.place,提交提交;你必须把提交是永久性的,不可改变的资源库对象从检索else.where,或在你把在设置中进行user.nameuser.email

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