我有两台具有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文件的开发服务器中呢?我应该在生产服务器和开发服务器之间寻找什么来解决此问题?
答案 0 :(得分:0)
Git还有其他配置文件(请参见1)。 user.name
和user.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.name
或user.email
设置,则合并将无法继续,并且您将看到此错误消息,因为创建合并提交需要该信息。
您可以运行git log
来查看生产服务器上已提交的内容。可能是生产中的修补程序?
确保生产更改包含在遥控器中,或者您可以完全消除这些更改并使用git reset --hard origin/master
强制对遥控器进行更新。