На одной машине журнал 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
для получения последней фиксации 4b45d4b из источника. Поэтому при запуске git status он показывает: «Ваша ветка опережает« происхождение / разработка »на 1 фиксацию».
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, пролил некоторый свет на проблему, но все еще есть вопросы, оставшиеся без ответа.
- ls .git/logs/refs/remotes/origin/develop показывает, что только у парня Гунцяна изначально было разрешение на запись (потому что именно он запустил git checkout ветку разработки). Именно он запустил git pull, чтобы получить последний коммит 4b45d4b.
- После того, как я запустил статус git, он сказал: «Ваша ветка опережает« происхождение / разработка »на 1 фиксацию», я проверил этот файл. Он НЕ записал последний рывок. Но так как именно этот парень владеет файлом и запускает этот git pull. Почему git не смог это записать?
- Я изменяю этот файл, чтобы разрешить запись всем, и снова запускаю git pull, чтобы исправить это. Но я очень сомневаюсь, что это "правильное" решение.
Еще один вопрос, возникший здесь, заключается в том, что это ветка, которую git pull будет выполнять более одного человека (ветвь интеграции для тестирования). Лучше использовать sudo git pull
или изменить разрешение на запись, чтобы другие запускали git pull
без sudo
---- обновление 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 обновить его, когда он запускал git pull.
Итак, урок, который я усвоил, заключается в том, что когда я обнаружил, что git status
сказал что-то странное, уточните у .git/logs/refs/remotes/origin/develop/branch
, чтобы убедиться.
git fetch
на машине, где вы не получаете последнюю фиксацию? вообщеgit fetch
git pull
должно помочь. - person Hiren   schedule 31.01.2019