У меня есть проект A, который является библиотекой, и он используется в проекте B.
Оба проекта A и B имеют отдельный репозиторий на github, НО внутри B у нас есть подмодуль A.
Я отредактировал некоторые классы в библиотеке, которая находится в хранилище A, я нажал на удаленное хранилище, поэтому библиотека (хранилище A) обновляется.
Эти обновления не отражают «ссылку» (подмодуль), который подмодуль ссылается на предыдущий коммит .... что я должен сделать, чтобы обновить подмодуль в git?
git submodule update
когда кто-то еще обновит projA (вы получите новый идентификатор фиксации).git push
?git push <remote> <branch>
, напримерgit push origin dev
.git submodule update
работает без флагов, только когда была извлечена фиксация (в proj B), которая обновляет ссылки на рассматриваемый подмодуль (ы) (proj A). Чтобы обновить proj B для ссылки наHEAD
ветку удаленного отслеживания proj A, вы должны сделать это,git submodule update --remote --merge
как показано в ответе Пола Хэтчера ниже.С git 1.8 можно делать
Это обновит субмодуль до последней удаленной фиксации. Затем вам нужно будет зафиксировать изменение, чтобы обновить gitlink в родительском репозитории.
Затем нажмите на изменения, так как без этого идентификатор SHA-1, указывающий на подмодуль, не будет обновлен, и поэтому изменение не будет видно никому другому.
источник
git commit
все остальные до сих пор этого не видят.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
перед фиксацией.Если вы обновляете подмодуль и фиксируете его, вам нужно перейти в репозиторий более высокого уровня или добавить туда изменения.
покажет что-то вроде:
Тот факт, что субмодуль не синхронизирован, также можно увидеть с
вывод покажет:
Плюс означает, что ваш подмодуль указывает впереди того места, куда его ожидает верхний репо.
просто добавьте это изменение:
и совершить это:
Когда вы нажимаете на изменения, сначала убедитесь, что вы нажали изменение в подмодуле, а затем нажмите изменение ссылки во внешнем репо. Таким образом, люди, которые обновятся, всегда смогут успешно запустить
Более подробную информацию о подмодулях можно найти здесь http://progit.org/book/ch6-6.html .
источник
+
при запускеgit submodule
, убедитесь, что вы инициализировали и импортировали подмодули. Команды для этогоgit submodule init
иgit submodule update
, соответственно.Однолинейная версия
источник
Несколько других ответов рекомендуют объединять / фиксировать в каталоге подмодуля, что IMO может стать немного грязным.
Предполагая, что удаленный сервер назван,
origin
и мы хотимmaster
ветвь подмодуля (ов), я склонен использовать:git submodule foreach "git fetch && git reset --hard origin/master"
Примечание: Это выполнит полный сброс для каждого подмодуля - если вы не хотите этого, вы можете изменить
--hard
на--soft
.источник
Мой проект должен использовать «последний» для подмодуля. На Mac OSX 10.11, git версии 2.7.1, мне не нужно было заходить в мою папку субмодуля, чтобы собрать его коммиты. Я просто сделал обычный
на верхнем уровне, и он правильно обновил мой подмодуль.
источник
Ответ Энди сработал для меня, избежав $ path:
источник
'$path'