【问题标题】:Git commit user is different than git push userGit commit 用户与 git push 用户不同
【发布时间】:2014-04-18 09:44:02
【问题描述】:

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

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

提交看起来像:

USERX authored commit 7d365...

然后是推:

USERY pushed to master at user/repo 

commit和push都是在设置好用户名和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 bash bamboo


    【解决方案1】:

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

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

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

      如果你然后git commit --amend --author='someone else &lt;someone@else.where&gt;',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。是 ssh 以您的身份(或者更确切地说,mylogin@some.place)对您进行身份验证并让您登录。然后,您的 ssh 会话运行接收您发送的 git 对象的 git 命令。如果您在some.place 上询问正在运行 ssh 的用户,您会得到mylogin:那是通过 ssh 登录的用户。这与存储在正在上传的提交中的作者和提交者名称完全断开。

    【讨论】:

    • 我已经更正了我的问题,忘记添加commit 命令。好的,那么在这种情况下我应该怎么做才能防止使用不同的用户名推送?
    • Git 在推送中没有用户名,因为 git 不在乎。其他事情——例如 ssh,或者记录正在调用它们的用户的程序——才是最重要的。你需要找出如何让那些other程序相信你是一个你不是的人。当然,这会带来各种安全隐患:如何阻止 Internet 上的某个随机人冒充您?然而,许多 shell 脚本中最简单的事情是在环境中覆盖 $USER(这必须在 git 之外完成——同样,git 本身并不关心,也不会这样做)。
    • 好的。如果这些命令是由 Bamboo 运行的,我如何检查/我应该在哪里查看执行命令的用户,从而被认为是推送提交的用户?
    • 我从未使用过 Bamboo,对其内部结构一无所知,因此无法真正提供帮助。
    • 好的。感谢您为我指明正确的方向,我将进一步调查如何解决 Bamboo 问题。
    【解决方案2】:

    应该是这样的。

    要更改最后一次提交的作者:

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

    【讨论】:

    • 不应该是这样的,这是为什么呢?我设置了用户名和电子邮件,并希望该用户执行提交和推送,为什么会改变?
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2011-05-29
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多