Распределенный рабочий процесс Git с подмодулями

Скажем, у меня есть суперпроект с N подмодулями. Который я создал в соответствии с этим руководством: Git Submodule Tutorial

Итак, у меня есть общедоступные репозитории для всех подмодулей плюс общедоступный репозиторий для суперпроекта, и все это на удаленном хосте: machine1/path/to/public/repos.git. Их я буду называть своими публичными репозиториями.

Теперь пользователь X клонирует суперпроект из моего общедоступного репозитория и загружает все в свое личное репо. Все ссылки в его локальных .git/config и .gitmodules указывают на мои публичные репозитории.

Я хочу, чтобы у пользователя X был собственный общедоступный репозиторий, чтобы мы могли использовать распределенный рабочий процесс, описанный здесь: Распределенные рабочие процессы Git.

Таким образом, пользователь X и я можем отправлять наши локальные изменения в наши собственные общедоступные репозитории, а затем извлекать изменения из общедоступных репозиториев друг друга. Я хочу, чтобы нам обоим не приходилось нажимать на одни и те же общедоступные репозитории.

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

Итак, что, по вашему мнению, было бы лучшей альтернативой:

  • Удалите .gitmodules из дерева репозитория и добавьте его в .gitignore, чтобы он больше не отслеживался.
  • Оставьте .gitmodules неустановленным. Не знаю почему, но мне кажется это плохой идеей.
  • Используйте git --update-index assume-unchanged .gitmodules

Любой из этих вариантов имеет тот недостаток, что .gitmodules будет уничтожен, если запустить git clean или удалить все неотслеживаемые файлы.

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


person pgpb.padilla    schedule 16.12.2011    source источник


Ответы (1)


вы можете добиться этого, добавив дополнительные пульты к вашим субмулям. Кроме того, удаленные URL-адреса подмодуля git из содержащего репо синхронизируются только при добавлении параметра --init. Ничто не мешает вам добавить, обновить, инициализировать подмодуль git, а затем изменить URL-адрес в репо для этого пульта. Последующие обновления подмодуля не изменят этот URL-адрес, если вы не добавите параметр --init.

person Adam Dymitruk    schedule 16.12.2011
comment
Мне жаль, что мне потребовалось так много времени, чтобы принять этот ответ в тот момент, когда я впервые прочитал его, я не понял его, теперь это кажется очевидным. - person pgpb.padilla; 04.02.2014