Git распределенный рабочий процесс с подмодулями - PullRequest
1 голос
/ 16 декабря 2011

Скажем, у меня есть супер-проект с N субмодулями.Что я создал, следуя этому руководству: Учебник по Git Submodule

Итак, у меня есть публичные репозитории для всех подмодулей плюс публичное репо для супер-проекта, все это на удаленном хосте: 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 или удаляет все неотслеживаемые файлы.

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

1 Ответ

1 голос
/ 16 декабря 2011

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

...