Как "зафиксировать" изменения в подмодуле git? [дубликат]

этот вопрос уже есть ответ здесь:

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

Is есть какой-то простой способ зафиксировать/подтолкнуть изменения подмодуля обратно к восходящему РЕПО? И каков рекомендуемый метод в Git для одновременной разработки на отдельных (но связанных) репозиториях таким образом?

5 ответов


подмодуль-это своя собственная РЕПО / рабочая область, со своей собственной


обратите внимание, что если вы совершили кучу изменений в различные подмодули можно (или скоро будет возможность) нажмите все на одном дыхании (ie один push из родительского РЕПО), с:

git push --recurse-submodules=on-demand

git1.7.11 ([объявить] Git 1.7.11.ник1) упоминает:

"git push --recurse-submodules " научился по желанию заглядывать в истории подмодулей, связанных с суперпроектом,и выталкивать их.

наверное сделано после этот патч и --on-demand:

--recurse-submodules=<check|on-demand|no>::

убедитесь, что все коммиты подмодулей, используемые перемещаемыми версиями, доступны в ветви удаленного отслеживания.

  • если check используется, будет проверено, что все коммиты подмодуля, измененные в версиях, которые будут нажаты, доступны на удаленном компьютере.
    В противном случае толчок будет прерван и выход с ненулевым статусом.
  • если on-demand используется, все подмодули, которые изменились в версиях, которые будут нажаты, будут нажаты.
    Если on-demand не смог протолкнуть все необходимые изменения, он также будет прерван и выйдет с ненулевым статусом.

эта опция работает только для одного уровня вложенности. Изменения подмодуля внутри другого подмодуля не будут нажаты.


вы можете рассматривать подмодуль точно так же, как обычный репозиторий. Чтобы распространить изменения вверх по течению, просто зафиксируйте и нажмите, как обычно в этом каталоге.


$ git submodule status --recursive

также спасает жизнь в этой ситуации. Вы можете использовать его и gitk --all чтобы отслеживать Ваши sha1 и проверить, что ваши подмодули указывают на то, что вы думаете, что они есть.


прежде чем вы сможете зафиксировать и нажать, вам нужно ввести рабочее дерево репозитория для подмодуля. Я использую tortoise и делаю следующие вещи:

сначала проверьте, существует ли .git файл (не каталог)

  • если есть такой файл, он содержит путь к супермодуле git directory
  • удалить этот файл
  • do git init
  • выполнить git добавить удаленный путь, используемый для подмодуля
  • следуйте инструкциям ниже

Если бы был .git file, там был угрюмый .в Git, который отслеживает локальное дерево. Вам все равно нужна ветка (вы можете создать ее) или переключиться на master (что иногда не работает). Лучше всего это сделать - git fetch - ГИТ тянуть. Не забудьте принести.

теперь ваши коммиты и тяги будут синхронизированы с вашим origin / master