Powinieneś uważać, aby wyraźnie zaznaczyć, o czym mówisz, kiedy używasz terminu `` poddrzewo '' w kontekście, gitponieważ w rzeczywistości istnieją tutaj dwa oddzielne, ale powiązane tematy:
Strategia łączenia git-subtree i git subtree .
TL; DR
Obie koncepcje powiązane z poddrzewem pozwalają efektywnie zarządzać wieloma repozytoriami w jednym. W przeciwieństwie do git-submodule, w którym tylko metadane są przechowywane w repozytorium głównym, w postaci .gitmodules , i musisz osobno zarządzać zewnętrznymi repozytoriami.
Więcej szczegółów
Strategia scalania poddrzewa git jest w zasadzie bardziej ręczną metodą wykorzystującą polecenia, do których się odwołujesz.
git-subtree jest opakowującym skryptem powłoki, który ułatwia bardziej naturalną składnię. W rzeczywistości jest to nadal część contribi nie jest w pełni zintegrowane z git ze zwykłymi stronami podręcznika. Dokumentacja jest przechowywana wzdłuż boku zamiast skryptu.
Oto informacje o użytkowaniu:
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>]
Natknąłem się na całkiem niezłą liczbę zasobów na temat poddrzew, ponieważ planowałem napisać własny wpis na blogu. Zaktualizuję ten post, jeśli to zrobię, ale na razie oto kilka istotnych informacji na temat tego pytania:
Wiele z tego, czego szukasz, można znaleźć na tym blogu Atlassian autorstwa Nicoli Paolucciego w odpowiedniej sekcji poniżej:
Po co używać poddrzewa zamiast modułu podrzędnego?
Istnieje kilka powodów, dla których możesz znaleźć subtreelepszy w użyciu:
- Zarządzanie prostym przepływem pracy jest łatwe.
gitObsługiwane są starsze wersje (nawet wcześniej v1.5.2).
- Kod podprojektu jest dostępny zaraz po
clonezakończeniu super projektu.
subtreenie wymaga od użytkowników Twojego repozytorium uczenia się niczego nowego, mogą zignorować fakt, że używasz go subtreedo zarządzania zależnościami.
subtreenie dodaje nowych plików metadanych, jak submodulesrobi (tj
.gitmodule.).
- Zawartość modułu można modyfikować bez konieczności posiadania oddzielnej kopii repozytorium zależności w innym miejscu.
Moim zdaniem wady są dopuszczalne:
- Musisz poznać nową strategię łączenia (tj
subtree.).
- Przekazywanie kodu z powrotem
upstream dla podprojektów jest nieco bardziej skomplikowane.
- Odpowiedzialność za niemieszanie kodu super i podprojektu w zatwierdzeniach spoczywa na Tobie.
Z dużą częścią zgodziłbym się również. Poleciłbym zapoznać się z tym artykułem, ponieważ omawia kilka typowych zastosowań.
Być może zauważyłeś, że napisał tutaj również kontynuację, w której wspomina o ważnym szczególe, który został pominięty w tym podejściu ...
git-subtree obecnie nie zawiera pilota!
Ta krótkowzroczność jest prawdopodobnie spowodowana faktem, że ludzie często dodają pilota ręcznie podczas pracy z poddrzewami, ale nie jest to również przechowywane w git. Autor szczegółowo opisuje łatkę, którą napisał, aby dodać te metadane do zatwierdzenia thatgit-subtree już generuje. Dopóki to nie trafi do oficjalnej głównej linii gita, możesz zrobić coś podobnego, modyfikując komunikat o zatwierdzeniu lub przechowując go w innym zatwierdzeniu.
Uważam również, że ten post na blogu jest bardzo pouczający. Autor dodaje trzecią metodę poddrzewa, którą wywołuje git-streedo miksu. Artykuł jest wart przeczytania, ponieważ wykonuje całkiem niezłą robotę porównując te trzy podejścia. Przedstawia swoją osobistą opinię o tym, co lubi, a czego nie, i wyjaśnia, dlaczego stworzył trzecie podejście.
Dodatki
Myśli końcowe
W tym temacie przedstawiono zarówno możliwości git segmentacji, jak i segmentację, która może wystąpić, gdy funkcja po prostu nie trafia w ślad.
Osobiście wzbudziłem wstręt, git-submoduleponieważ uważam to za bardziej zagmatwane, aby współpracownicy mogli to zrozumieć. Wolę również zarządzać WSZYSTKIMI moimi zależnościami w ramach moich projektów, aby zapewnić łatwe do odtworzenia środowisko bez prób zarządzania wieloma repozytoriami. git-submodulejest jednak obecnie znacznie bardziej znany, więc dobrze jest być tego świadomym i w zależności od odbiorców, którzy mogą wpłynąć na twoją decyzję.