git local repo从远程获取了最新的提交,但未能记录

时间:2019-01-31 02:40:12

标签: git gitlab git-remote

在一台机器上的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那里得到的答案可以很好地说明这个问题,但是仍然有一些问题没有得到解答。

  1. ls .git / logs / refs / remotes / origin / develop只显示了龚强最初具有写权限的人(b / c是谁运行git checkout development分支)。也是他运行git pull以获得最新的提交4b45d4b。
  2. 我在运行git status后说“您的分支通过1次提交在'origin / develop'之前”,我检查了该文件。它没有记录最新的拉动。但是由于这是这个人拥有的文件并运行该git pull。为什么git记录失败?
  3. 我更改此文件以向任何人写入权限,然后再次运行git pull进行修复。但我真的怀疑这是“正确”的解决方法。

从这里提出的另一个问题是,由于这是一个分支,更多人将使用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进行核对

1 个答案:

答案 0 :(得分:1)

可能是过去以root用户身份运行(as in heregit 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,以便使用组可写权限创建新文件。
  • 或为该组设置扩展ACL,以便该组成员可以读取/写入/访问其中已经存在的任何文件。