відстеження підмодулю git найновіші


136

Ми рухаємо наш (величезний) проект до git і ми думаємо про використання підмодулів. Наш план полягає в тому, щоб у суперпроекті було три різні голови: випуск, стабільний, останній. Ведучі проекту будуть працювати з випуском та стабільними гілками. Вони переміщуватимуть підмодулі за потребою.

Питання - «остання» голова. Ми хотіли б, щоб надпроектна "остання" голова відстежувала основні гілки всіх підмодулів (автоматично). А також було б чудово, якби це відображало історію всіх зобов’язань підмодулю.

Я подивився на gitslave, але це не зовсім те, що ми хочемо. Будь-які пропозиції?


Поки ви просили інструмент, я просто хочу зв’язати це запитання, яке збирає однокласники, роблячи те саме: stackoverflow.com/questions/1030169/…
Тобу,

Git тепер пропонує відстеження останніх за допомогою підмодулів: дивіться мою відредаговану відповідь.
VonC

Відповіді:


235

Оновлення березня 2013 року

Git 1.8.2 додав можливість відстеження гілок.

" git submodule" почав вивчати новий режим інтеграції з кінчиком віддаленої гілки (на відміну від інтеграції з фіксацією, записаною в gitlink суперпроекту).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Якщо у вас подмодуль вже уявити вам зараз бажання буде відслідковувати гілку, побачити « як зробити існуючий подмодуль відстежувати гілка ».

Також дивіться підручник Vogella про підмодулі для отримання загальної інформації про підмодулі.

Примітка:

git submodule add -b . [URL to Git repo];
                    ^^^

Переглянути git submoduleсторінку чоловіка :

Особливе значення .використовується для вказівки на те, що ім'я гілки в підмодулі має бути таким самим іменем, що і поточна гілка в поточному сховищі .


Див. Комісію b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: Якщо --branchдано, запишіть його.gitmodules

Це дозволяє легко записати submodule.<name>.branchваріант, .gitmodulesколи ви додаєте новий підмодуль. За допомогою цього пластиру

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

зводиться до

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

Це означає, що майбутні заклики до

$ git submodule update --remote ...

отримуватимуть оновлення з тієї самої гілки, яку ви використовували для ініціалізації підмодуля, що зазвичай є тим, що ви хочете.

Підписаний: У. Тревор Кінг


Оригінальна відповідь (лютий 2012 р.):

Підмодуль - це єдиний комітет, на який посилається батьківський репо.
Оскільки це власне репортаж Git, "історія всіх комісій" доступна в git logмежах цього підмодуля.

Таким чином, щоб батько автоматично відстежував останнє фіксування даної гілки підмодулю, необхідно:

  • CD в ​​підмодулі
  • git fetch / pull, щоб переконатися, що в ньому є останні повідомлення на правій гілці
  • CD в ​​батьківському репо
  • додайте та введіть, щоб записати нове фіксування підмодуля.

gitslave (який ви вже подивилися), здається, найкраще підходить, в тому числі і для операції фіксації .

Вносити зміни в підмодуль трохи неприємно через вимогу перевірити правильну гілку підмодуля, внести зміни, зробити фіксацію, а потім перейти в суперпроект і здійснити фіксацію (або принаймні записати нове місце підмодуль).

Інші альтернативи тут детально описані .


1
@BraveNewMath вам необхідно оформити правильний філія в вашому подмодуль, потім перейдіть в батьківський репозиторій і введіть: git config -f .gitmodules submodule.<path>.branch <branch>. Додайте все, покладіть і натисніть
VonC

2
@BraveNewMath Я детально описую всі кроки для створення підмодуля відслідковувати гілку в stackoverflow.com/a/18799234/6309 .
VonC

1
Важливо використовувати --remoteтег, якщо ви не хочете отримувати відокремлені голови під час оновлення, цікаво, чому, здається, ваш свіжовитяжений код стоїть за майстром!
Кріс Уоттс

3
@DC_ Я згоден з "цією відповіддю" (з тих пір, як я її написав). Функція "слідування за гілкою" призначена для оновлення підмодулю до останньої фіксації гілки. Коли це буде зроблено, вам все одно доведеться додати та зафіксувати новий стан підмодуля у батьківському репо. І наступний клон перевірить цей стан (без голови).
VonC

3
@VonC Отже, для подальшого уточнення, функція "наступна гілка" впливає лише на поведінку git submodule updateкоманди, повідомляючи їй, який коміт (тобто найновіший фіксатор на майстер) для оновлення підмодуля, а не автоматизовано викликати батьківське репо, щоб оновити яке фіксація вказується на підмодуль під час клонування?
christner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.