У чому полягають концептуальні відмінності між використанням 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