2016-01-15 2 views
3

Я работаю над проектом git с несколькими людьми, и мы включили внешнюю библиотеку в качестве подмодуля git. У нас есть общий пульт дистанционного управления, от которого мы регулярно нажимаем и тянем.Обновление подмодуля Git перезаписано

Поскольку мы впервые добавили этот подмодуль, в нем произошли некоторые изменения, поэтому я сделал git submodule update --remote, чтобы обновить его до последней версии. Это сработало для меня, и я нажал это на наш общий пульт. Файл на месте субмодуля, где ссылка на коммите хранятся, изменились:

-Subproject commit <old-commit-hash> 
+Subproject commit <new-commit-hash> 

Когда мои коллеги потянув изменения из нашего общего пульта дистанционного управления, они также получают измененный подмодуль, однако это, как представляется, отличается от изменения обычного файла, так как он не перезаписывает старую версию (что я бы ожидать), но это выглядит как изменение, когда они бегут git status:

Changes not staged for commit: 
    modified: src/submodule (new commits) 

так файл под изменен (к новому что я нажал), но почему-то git считает, что локальная версия моего коллеги новее. Тем не менее, это на самом деле старый, указывая на предыдущую ревизию, которую по-прежнему имеют мои коллеги.

Теперь, мне нравятся мои коллеги, но иногда они не очень обращают внимание и все они делают это git add . или git commit -a, который включает в себя все изменения и конечно перезаписывает изменения в субмодуля с ссылкой на старом субмодуля совершить.

Есть ли способ обеспечить обновление этого подмодуля для всех людей, которые тянут с этого пульта? Можно ли обрабатывать этот файл подмодуля как обычный файл, который обычно обновляется нормально? Или мне нужно сказать моим коллегам, чтобы они обращали больше внимания и время от времени делали git submodule update10?

Надеюсь, мой вопрос ясен. Если нет, спросите, и я попробую уточнить.

+1

В ответах на этот похожий вопрос есть несколько полезных советов: http://stackoverflow.com/questions/10443627/force-git-submodule-to-always-stay-current – TruncatedCoDr

+0

Спасибо за ссылку. Я уже рассмотрел этот вопрос, но на самом деле не смог найти решение проблемы. Обратите внимание, что я не хочу автоматически проверять подмодули HEAD, но вместо этого хочу вручную направить обновление подмодуля на удаленный доступ, который другие могут потянуть. У вас есть более конкретный намек для меня? – dd23

ответ

1

Или мне нужно сказать моим коллегам, чтобы они уделяли больше внимания и время от времени обновляли подмодуль git?

В идеале это то, что они делают. Если они этого не сделают, вы можете попытаться добавить git-hook, который запускает git submodule update после того, как они потянули.

This вопрос может быть полезным.

+0

Звучит как интересный подход, но (без его тестирования) кажется, что он страдает от той же проблемы. Согласно [Документация] (http://www.git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) git hooks ** не ** копируются при клонировании репо. Поэтому мне все равно придется их распространять вручную. Это сводится к тем же усилиям, что и всем пользователям обновлять свои подмодули. – dd23

+1

Правда, хотя я могу подумать о возможном обходном пути: включите свои крючки в выделенный hooks/-каталог в вашем репо и добавьте скрипт (что-то вроде setup_hooks.sh), который устанавливает ссылку в каталоге .git на крючки -каталог в репо. Таким образом, крючки включены в репо, и их легко модифицировать и распространять изменения с тех пор, так как они будут обновляться при каждом нажатии. Конечно, это все равно потребует, чтобы каждый пользователь запускал сценарий один раз, но я думаю, что ни у кого нет хотя бы одного шага *. –

1

Нет прямого решения, так как после натяжения вам нужно сделать обновление подмодуля. Одна вещь, которую вы можете сделать для борьбы с этим вопрос, что вы можете создавать и распространять псевдоним, как тянуть и делает обновление подмодуль, например:

git config alias.pullAndUpdate '!git pull && git submodule update' 

Используя этот псевдоним будет как вытащить из удаленных и обновления подмодулей в одной команде вместо двух.

Смежные вопросы