Редактирование подмодуля git - PullRequest
26 голосов
/ 25 марта 2011

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

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

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

Спасибо.

Ответы [ 2 ]

34 голосов
/ 25 марта 2011

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

Git великолепен в этом смысле.: -)

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

Важное примечание:

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

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

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

Итог:

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

6 голосов
/ 25 марта 2011

Согласно документации :

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

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

...