Можно ли подключить подмодуль git к конкретному коммиту в ветке основного проекта? - PullRequest
0 голосов
/ 28 мая 2019

У меня такая ситуация с git version 2.8.0.windows.1.

У меня есть одна ветка " release " основного проекта, и я добавляю туда каждый раз, когда у меня выходит новая версия.

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

Мастер проекта ветвь и Мастер субмодуля ветви идут впереди (почти) параллельно.

Мастер фиксации 1 => Мастер фиксации 2 => Мастер фиксации 3 => Мастер фиксации 4
Фиксация подмодуля 1 => Фиксация подмодуля 2 => Фиксация подмодуля 3 => Фиксация подмодуля 4

В этом случае Master Commit 4 выровнен с Submodule Commit 4 .

Проблема возникает, когда кто-то пытается получить ветку release слишком поздно.
Поэтому, если я нажимаю ветку release на Master Commit 1 , и кто-то тянет ветку релиза, когда мы находимся на Master Commit 4 , мы имеем смещение (потому что Релиз связан с Master Commit 1 , в то время как сейчас мы находимся на Submodule Commit 4 ).

Решение, которое я вижу, состоит в том, чтобы каким-то образом принудительно Submodule Commit 1 to release ветка, но я пока не знаю, как.

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

Но я не имею полномочий над хранилищем подмодулей, поэтому мне будет нелегко устанавливать там ветки или теги.

Существуют ли какие-либо обходные пути для принудительной фиксации подмодуля в моей ветке релиза и , а не просто ветка / тег подмодуля ?

1 Ответ

1 голос
/ 28 мая 2019

Так все-таки работают подмодули, поэтому я не понимаю вашей проблемы.Давайте попробуем улучшить или исправить ваш рабочий процесс.Вам нужно, чтобы каждый коммит в ветви release указывал на соответствующий коммит в подмодуле, верно?Это легко: перед тем как делать коммиты в ветке release, обновите подмодуль, извлеките правильный коммит в субмодуле и зафиксируйте изменение в суперпроекте:

# In the superproject
git checkout release

cd subdir # into the submodule
git checkout master # reconcile detached HEAD
git pull origin master # update the submodule
git checkout some-sha1 # if you don't want the latest commit in master

cd .. # back into superproject
git add subdir
git commit -m "Update submodule"

Теперь каждый, кто git clone --recursive суперпроекта, получаетсубмодуль указывает на правильный коммит для каждого коммита в ветке release.

...