在一台机器上的git日志显示它没有从远程仓库获取最新提交(运行git pull后)
git log --oneline -n 3 origin/develop
5a8e6eb xxx
7547c8a xxx
53294b6 xxx
在另一台机器上(正确的机器),它将获得最新的提交 4b45d4b
git log --oneline -n 4 origin/develop
4b45d4b (origin/gq_dev, origin/develop) xxx
5a8e6eb (tag: dev_12) xxx
7547c8a xxx
53294b6 (origin/zsf) xxx
有问题的机器上有一个奇怪的地方,我的家伙告诉我他实际上是使用git pull origin pull
从源头获取最新的commit 4b45d4b的。因此,当运行git status时,它会显示“您的分支比1提交早于'origin / develop'。”
git status
# On branch develop
# Your branch is ahead of 'origin/develop' by 1 commit.
...
git show
commit 4b45d4bfff7c54169fea7343c5b4f020be556d0a
那发生了什么,我该如何解决?
-------更新-----------
我不知道为什么不小心修复了它,因此我向.git / logs / refs / remotes / origin / develop文件添加了写权限
最初是
ls .git/logs/refs/remotes/origin/develop
-rw-rw-r-- 1 gongqiang gongqiang 2103 Jan 30 19:07 develop
添加写权限并再次运行git pull后,问题已修复!但是我仍然不知道为什么。
-----更新2 ------
我从VonC那里得到的答案可以很好地说明这个问题,但是仍然有一些问题没有得到解答。
从这里提出的另一个问题是,由于这是一个分支,更多人将使用git pull(集成分支进行测试)。是使用sudo git pull
还是更改写许可权,让其他人在不使用sudo的情况下运行git pull
更好?
----更新3 -----
我接受了VonC答案,他在提交https://serverfault.com/questions/26954/how-do-i-share-a-git-repository-with-multiple-users-on-a-machine/27040#27040中提供的链接很有用。
但是我还需要指出,找出拥有.git/logs/refs/remotes/origin/develop
的人为什么在运行git pull时没有让git更新它可能是不可能的(或不值得付出努力的)。
所以我在这里学到的一个教训是,当发现git status
说了些奇怪的话时,请与.git/logs/refs/remotes/origin/develop/branch
进行核对
答案 0 :(得分:1)
可能是过去以root用户身份运行(as in here)git pull
,从而更改了某些文件的许可/所有权的情况。
要确保使用一致的仓库,只需再次对其进行克隆,然后在该克隆中检查git log --oneline -n 3 origin/develop
确实返回了预期的提交。
。但是我想知道为什么git status表示“您的分支比1提交早于'origin / develop'。”而我们使用git pull从源获取该提交
我想(您已解决)权限问题阻止Git为origin/develop
记录最新的SHA1。
但是:该最新提交仍被获取,并且您的develop
分支仍被快速转发至上述最新SHA1(4b45d4b)
由于本地分支指向4b45d4b,但是.git/logs/refs/remotes/origin/develop
仍引用先前的提交(因为未正确更新),因此您将获得
# Your branch is ahead of 'origin/develop' by 1 commit.
从这里提出的另一个问题是,由于这是一个分支,更多人可以
更好?git pull
(要进行测试的集成分支)进行。
使用sudo git pull
还是更改写入权限让其他人可以只运行git pull
作为explained here,您可以:
umask
更改为002
,以便使用组可写权限创建新文件。