Powinieneś uważać, aby wyraźnie zaznaczyć, o czym mówisz, kiedy używasz terminu `` poddrzewo '' w kontekście, git
ponieważ 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ęść contrib
i 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źć subtree
lepszy w użyciu:
- Zarządzanie prostym przepływem pracy jest łatwe.
git
Obsługiwane są starsze wersje (nawet wcześniej v1.5.2
).
- Kod podprojektu jest dostępny zaraz po
clone
zakończeniu super projektu.
subtree
nie wymaga od użytkowników Twojego repozytorium uczenia się niczego nowego, mogą zignorować fakt, że używasz go subtree
do zarządzania zależnościami.
subtree
nie dodaje nowych plików metadanych, jak submodules
robi (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-stree
do 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-submodule
ponieważ 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-submodule
jest 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ę.