Изменение в Git подмодуля

это возможно? Представьте, что у меня есть проекты Parent & Child. Оба являются git respositories. Ребенок является подмодулем родителя.

могу ли я вносить изменения в версию Child, которая находится внутри Parent & commit & push, как обычный репозиторий?

или мне нужен отдельный клон ребенка где-то, где я делаю изменения?

спасибо.

2 ответов


вам не нужен отдельный клон. Папка sub-module-это собственный мир. Просто отредактируйте, зафиксируйте, разветвите и нажмите к восторгу вашего сердца.

Git отлично подходит для этого. :-)

кстати, Родительский репозиторий даже обнаружит, когда изменения произойдут внутри папки суб-модуля, и предложит вам зафиксировать текущее состояние суб-модуля в качестве новой официальной точки отсчета для клонов родительского РЕПО.

важно Примечание:

убедитесь, что вы делаете git checkout master (или какая-либо другая ветвь) внутри папки субмодуля перед началом взлома.

затем также убедитесь, что при фиксации обновленного состояния подмодуля вы либо push те, кто совершает публичное РЕПО, или, по крайней мере, что вы не перебазируете или иным образом не измените историю внутри субмодуля впоследствии-так как это повредит ссылку родителя на историю субмодуля.

ступайте осторожно. (Шляпа совет @pjmorse для напоминания.)

Bottomline:

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


по словам документация:

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

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