Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git提交用户与Git推送用户不同_Git_Bash_Bamboo - Fatal编程技术网

Git提交用户与Git推送用户不同

Git提交用户与Git推送用户不同,git,bash,bamboo,Git,Bash,Bamboo,我有一种非常奇怪的行为。我有一个在Bambol上运行的bash脚本,它设置所需的git用户,提交一些更改,然后将它们推送到主分支 问题是,提交是由正确的用户完成的,而推送是由不同的用户完成的 提交看起来像: USERX authored commit 7d365... 然后推: USERY pushed to master at user/repo 提交和推送是在设置用户名和电子邮件后一个接一个地完成的,那么为什么会发生这种情况,我应该寻找什么?下面是我的bash脚本的一部分: git c

我有一种非常奇怪的行为。我有一个在Bambol上运行的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

应该是这样的

要更改上次提交的作者,请执行以下操作:

$ git commit --amend --author='somebody <somebody@example.com>'
$git commit--amend--author='someone'
提交是存在于git存储库中的实际内容(特别是“对象”)。它们包含提供作者和提交人的文本字符串。一旦写入一个对象,它们是永久不变的

  • 旁白:
    git commit--amend
    不会更改它们;相反,它使用提交中的不同数据进行新的不同提交,并将分支头指向新提交:

    ... - E - F - G   <-- master
    
当你做一个
git推送时
,它会做一些非常不同的事情

比如说,首先从
git://else.where/path/to/repo.git
。或者,将
user.name
user.email
设置为一些不寻常的值来编写自己的提交

  • 旁白:示例代码有一个
    git add
    ,但没有
    git commit
然后您
git将这些提交推送到
ssh://mylogin@一些.place/different/path/to/repo.git

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


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

不应该是这样的,为什么?我设置了用户名和电子邮件,并希望提交和推送都由该用户执行,为什么会更改?我已更正了我的问题,忘记添加
commit
命令。好的,那么在这种情况下我应该怎么做来防止使用不同的用户名进行推送呢?Git在推送过程中没有用户名,因为Git不在乎。其他的事情,例如ssh,或者记录调用它们的用户的程序,才是最重要的。你需要找出如何让其他程序相信你是一个你不是的人。当然,这会带来各种各样的安全隐患:怎样才能阻止互联网上一些随机出现的人冒充你呢?然而,在许多shell脚本中,最简单的事情是在环境中重写
$USER
(这必须在git之外完成,git本身并不关心,也不这么做)。如果这些命令是由Bambol运行的,我如何检查/我应该在哪里查看哪个用户执行了这些命令,从而被认为是推动提交的用户?我从来没有使用过Bambol,也不知道它自己的内部结构,所以我真的无法帮上忙。好的。谢谢你给我指明了正确的方向,我会进一步调查如何解决竹子的问题。
... - E - F - G   [abandoned]
            \
              G'  <-- master