У чому полягають концептуальні відмінності між використанням git підмодуля та піддіаграмою?
Які типові сценарії для кожного?
У чому полягають концептуальні відмінності між використанням git підмодуля та піддіаграмою?
Які типові сценарії для кожного?
Відповіді:
Що робити, якщо я хочу, щоб посилання завжди вказували на ГОЛОВНУ зовнішнього репо?
Ви можете зробити підмодуль слідувати за ГОЛОВОЮ гілки віддаленого репо-підмодуля, використовуючи:
о git submodule add -b <branch> <repository> [<path>]
. (щоб вказати гілку, яку слід слідувати)
o, git submodule update --remote
яка буде оновити вміст підмодулю до останньої HEAD з <repository>/<branch>
, за замовчуванням origin/master
. Ваш головний проект все ще буде відслідковувати хеші HEAD підмодуля, навіть якщо --remote
він використовується.
add -b
і --remote
далі в командах оновлення відповідно до документації на оновлення підмодуля . У такому випадку, чи -b
дійсно все ж потрібно для слідування ГОЛОВІ майстра?
-b
використовується для створення правильних метаданих .gitmodule для підмодуля (це еквівалентно a git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
- --remote
працює також, якщо -b
він не використовувався add
. В обох випадках оновлення призведе до виникнення комітету в батьківському репо-сховищі підмодуля, тому посилання насправді "не завжди вказують на ГОЛОВУ" дуже автоматичним способом .... або я цього не отримав, або ця претензія краще зняти з оригінальної відповіді (?)
Концептуальна різниця:
За допомогою підмодулів git ти зазвичай хочеш розділити великий сховище на менші. Спосіб посилання на підмодуль є стилем Maven - ви посилаєтесь на один комітет з іншого (підмодуля) сховища. Якщо вам потрібна зміна в підмодулі, вам слід зробити фіксування / натискання всередині підмодуля, потім посилайтеся на новий комітет у головному сховищі, а потім здійснюйте / натискайте на змінену посилання основного сховища. Таким чином, ви повинні мати доступ до обох сховищ для повної збірки.
За допомогою піддерева git ви інтегруєте інше сховище у своє, включаючи його історію. Тож після його інтеграції розмір вашого сховища, ймовірно, більший (тому це не стратегія для зменшення сховищ). Після інтеграції немає з'єднання з іншим сховищем, і вам не потрібен доступ до нього, якщо ви не хочете отримати оновлення. Тож ця стратегія скоріше для повторного використання коду та історії - я особисто не використовую її.
git subtree
вами все одно також можна підштовхнути - якщо хотіли - так?
підмодуль,
натиснувши основне репо на віддалений, не натискає файли підмодуля
суб-дерево, що
відсилає основне репо до віддаленого, висуває файли під-дерева
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master