Git配置文件导致两个相似环境之间的行为不同

时间:2019-02-06 17:48:52

标签: git ubuntu-16.04

我有两台具有Ubuntu v 16.04.2 LTS的Linux服务器-一台用于开发/测试,另一台用于生产。两者中的.git / config文件的结构都类似:

生产.git / config文件:

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@bitbucket.org:gt/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

开发.git / config文件:

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@bitbucket.org:gt/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

我可以使用以下方法从开发服务器中的存储库中提取代码:

sudo git pull git@bitbucket.org:gt/project.git master

当我使用相同的命令将代码拉入生产服务器时,出现以下错误消息:

From bitbucket.org:gt/project
 * branch            master     -> FETCH_HEAD

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@prod.(none)')

虽然我知道我可能需要为生产服务器更改.git / config文件,但是为什么我能够成功将代码拉入具有相同.git / config文件的开发服务器中呢?我应该在生产服务器和开发服务器之间寻找什么来解决此问题?

2 个答案:

答案 0 :(得分:0)

Git还有其他配置文件(请参见1)。 user.nameuser.email的生产设置很可能在~root/.gitconfig中,而您自己的用户配置(也称为--global)中缺少这些设置。

您还可以检查设置的存储位置:

git config --show-origin --get-all user.name

答案 1 :(得分:0)

您正在跑步:

  

sudo git pull git@bitbucket.org:gt / project.git master

git pull fetch (用于将远程分支信息和提交带入本地存储库)和 merge 的组合将这些更改从远程合并到本地分支。

如果本地没有任何更改,则这将导致快进合并,这实际上根本不是“合并”。无需包含本地更改,因此git可以尝试将本地分支指针更新为远程提交,而不是尝试合并来自两个不同分支的更改。

但是,如果您要做具有本地更改,那么实际上它们确实需要与远程更改合并。结果将作为合并提交提交。

如果未配置user.nameuser.email设置,则合并将无法继续,并且您将看到此错误消息,因为创建合并提交需要该信息。

您可以运行git log来查看生产服务器上已提交的内容。可能是生产中的修补程序?

确保生产更改包含在遥控器中,或者您可以完全消除这些更改并使用git reset --hard origin/master强制对遥控器进行更新。