Git: можно ли указать поддерево на разные коммиты при переключении ветвей?

В репозитории с двумя ветвями (мастер и разработка) и репозиторием поддерева git, включенным в папку shared, можно ли автоматически синхронизировать поддерево shared с определенной версией (коммит) при смене ветки?

Мое лучшее предположение состоит в том, что я, вероятно, ищу способ запустить скрипт всякий раз, когда я меняю ветки локально. Затем сценарий выполняет необходимые команды git pull/fetch в поддереве.

Предположим, что ветка master всегда должна указывать на помеченный коммит версии 1.0 общего репозитория поддерева, в то время как ветка разработки всегда проверяет последний коммит. Изменения в общем поддереве вносятся только в ветку разработки и будут зафиксированы (или сохранены) перед переключением на мастер.


person LearnCocos2D    schedule 20.08.2013    source источник


Ответы (2)


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

Самый простой способ показать это — иметь поддерево в master, создать ветку из master, а в ветке обновить указанное поддерево и зафиксировать. Таким образом, ветвь будет иметь модифицированную версию поддерева, и если вы извлечете master, она вернется к состоянию, ранее оставленному в master.

person Maic López Sáenz    schedule 05.09.2013

Я озадачен, почему этот вопрос был оставлен так долго. Я столкнулся с той же проблемой при миграции SVN-Git при попытке восстановить «внешние» зависимости SVN.

Просто чтобы разместить здесь еще один ответ в Интернете, я думаю, что нужно было бы создать как скрипт, вызывающий git fetch ..., так и git subtree pull ..., а также хук post-checkout, который выполняет этот скрипт. Моя идея состоит в том, что сценарий будет иметь одно и то же имя в каждой ветке, так что хук после проверки не будет делать ничего, кроме вызова switch_dependency.py или чего-то еще, и вам придется вручную позаботиться о правильных командах в этом сценарии.

person Sir Jane    schedule 21.10.2014