Ви повинні бути обережними, щоб чітко зазначити, про що йдеться, коли ви використовуєте термін „піддерево” у контексті, git
оскільки насправді тут є дві окремі, але пов’язані теми:
стратегія злиття git-subtree та git subtree .
TL; DR
Обидві концепції, пов'язані з піддеревом, ефективно дозволяють управляти кількома сховищами в одному. На відміну від git-підмодуля, де у кореневому сховищі зберігаються лише метадані, у формі .gitmodules , і ви повинні керувати зовнішніми сховищами окремо.
Детальніше
стратегія злиття піддерев git - це, в основному, більш ручний метод використання команд, на які ви посилаєтесь.
git-subtree - це сценарій оболонки-обгортки для полегшення більш природного синтаксису. Це насправді все ще частина contrib
і не повністю інтегрована в git зі звичайними сторінками man. документація зберігається поряд із сценарієм.
Ось інформація про використання:
NAME
----
git-subtree - Merge subtrees together and split repository into subtrees
SYNOPSIS
--------
[verse]
'git subtree' add -P <prefix> <commit>
'git subtree' add -P <prefix> <repository> <ref>
'git subtree' pull -P <prefix> <repository> <ref>
'git subtree' push -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]
Я зіткнувся з досить великою кількістю ресурсів на тему піддерев, оскільки я планував написати власний допис у блозі. Якщо оновлю, я оновлю цю публікацію, але наразі тут є деяка відповідна інформація до відповідного питання:
Багато з того, що ви шукаєте, можна знайти в цьому блозі Atlassian від Ніколи Паолуччі у відповідному розділі нижче:
Навіщо використовувати піддерево замість підмодуля?
Є кілька причин, чому вам може бути subtree
краще використовувати:
- Управління простим робочим процесом є простим.
git
Підтримуються старіші версії (навіть раніше v1.5.2
).
- Код підпроекту доступний відразу після
clone
завершення суперпроекту.
subtree
не вимагає від користувачів вашого сховища дізнаватися щось нове, вони можуть ігнорувати той факт, що ви використовуєте subtree
для управління залежностями.
subtree
не додає нові файли метаданих, як submodules
це робить (тобто
.gitmodule
).
- Зміст модуля можна змінювати, не маючи де-небудь окремого репозиторію копії залежності.
На мій погляд, недоліки є прийнятними:
- Ви повинні дізнатися про нову стратегію злиття (тобто
subtree
).
- Повернення коду
upstream
для підпроектів дещо складніше.
- Відповідальність за не змішування супер-коду та коду підпроекту в комітах лежить на вас.
Я б також погодився з великою частиною цього. Я б порекомендував перевірити статтю, оскільки в ній йдеться про деякі поширені вживання.
Ви , можливо, помітили , що він також написав простежування тут , де він згадує важливу деталь , що залишилося від цього підходу ...
git-subtree
в даний час не вдається включити пульт!
Ця короткозорість, мабуть, пов’язана з тим, що люди часто додають пульт вручну, маючи справу з піддеревами, але це теж не зберігається в git. Автор докладно описує патч, який він написав, щоб додати ці метадані до коміту, який git-subtree
вже генерується. Поки це не потрапляє в офіційну основну лінію git, ви можете робити щось подібне, модифікуючи повідомлення коміту або зберігаючи його в іншому коміті.
Я також вважаю цю публікацію в блозі дуже інформативною. Автор додає третій метод піддерева, який він викликає git-stree
до міксу. Статтю варто прочитати, оскільки він досить добре порівнює три підходи. Він висловлює свою особисту думку про те, що робить, а що не подобається, і пояснює, чому створив третій підхід.
Додаткові послуги
Закриваючі думки
У цій темі показано як потужність, так git
і сегментацію, яка може виникнути, коли функція просто пропускає позначку.
Я особисто викликав неприємність, git-submodule
оскільки вважаю, що для співробітників стає незрозумілим. Я також вважаю за краще, щоб ВСІ мої залежності управлялися в рамках моїх проектів, щоб полегшити легко відтворюване середовище, не намагаючись керувати кількома сховищами. git-submodule
однак на сьогоднішній день набагато більш відомий, тому, очевидно, добре це знати та залежно від вашої аудиторії, що може вплинути на ваше рішення.