Силовые Git подмодули всегда оставаться текущими

Мне нравятся подмодули w20. Кроме того, я ненавижу подмодули w20 > . То, что я люблю о них, - это то, как он позволяет вам четко разделять зависимости и т.д. Я понимаю, что они указывают на конкретную фиксацию на репо. Но в моем случае я создаю библиотеку, которая будет использоваться в другом проекте, поэтому я хочу сохранить ее в этом отдельном репо.

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

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

Ответ 1

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

Сказав это, вы можете быть заинтересованы в git поддереве script. Это предлагает другой способ работы с подмодулями, которые могут быть более совместимы с вашим рабочим процессом. Мне просто напомнили об этом недавним сообщением в HN.

Ответ 2

Как я упоминал в git отслеживании подмодулей последних", вы можете с тех пор, как git 1.8.2 (март 2013) сделать субмодулярный трек HEAD отрасль:

git submodule add -b <branch> <repository> [<path>]

Субмодуль SHA1 по-прежнему записывается в родительском репо как gitlink (специальная запись в индексе)

Но a git submodule update --remote будет обновлять эту запись в SHA1, соответствующем HEAD ветки удаленного репозитория подмодуля.

Если у вас есть существующий подмодуль, вы можете сделать его следуйте за веткой с помощью

cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>

cd path/to/your/submodule
git checkout -b branch --track origin/branch
  # if the master branch already exist:
  git branch -u origin/master master

cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"

Ответ 3

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

Предостережения:

  • Вам все равно нужно зафиксировать изменение подмодуля внутри репо вашего приложения, чтобы внести изменения в управление версиями (для приложения).

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