Git commit 用户不同于 git push 用户

标签 git bash bamboo

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

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

提交看起来像:

USERX authored commit 7d365...

然后是推送:

USERY pushed to master at user/repo 

commit和push是在设置了username和email后一个接一个地完成的,那么为什么会出现这种情况,我应该寻找什么?这是我的 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

最佳答案

提交是存在于 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.name 编写自己的提交和 user.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.name 中的设置进行和 user.email .

请注意,git 不会验证您的身份或让您登录到主机 some.place .它是 ssh 来验证你的身份并让你登录,就像你一样(或者更确切地说, mylogin@some.place )。您的 ssh session 然后运行 ​​git 命令来接收您发送的 git 对象。如果你问,在some.place , 什么用户在运行 ssh, 你得到 mylogin : 那就是通过 ssh 登录的人。这与存储在正在上传的提交中的作者和提交者姓名完全无关。

关于Git commit 用户不同于 git push 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151509/

相关文章:

ios - 在 Xcode 调试器中运行旧版本

java - Spring Cloud 配置在文件夹中组织文件

bash - hive -如何将查询结果存储在Bash脚本中的变量中

java - 单元测试在构建服务中失败但在本地失败

python - 如何生成包含 python unittest 覆盖率数据的 Clover 兼容(Bamboo)xml?

junit - Bamboo 的 JUnit 解析器不会解析我的 gtest output.xml

git - 在 VS-CODE 上显示 .git 目录?

git - 如何在现有仓库中创建子模块

bash - 删除前导和尾随空白目录

bash - 当没有 mvn -s 选项时,Maven 备用 settings.xml