Mam dwa projekty SVN w użyciu z innego repozytorium SVN przy użyciu svn: externals .
Jak mogę mieć taką samą strukturę układu repozytorium w Git?
Mam dwa projekty SVN w użyciu z innego repozytorium SVN przy użyciu svn: externals .
Jak mogę mieć taką samą strukturę układu repozytorium w Git?
git submodule
mogę teraz emulowaćsvn:external
(od marca 2013).Odpowiedzi:
Git ma dwa podejścia podobne do svn, ale nie do końca równoważne: externals:
Scalanie poddrzewa wstawia kod projektu zewnętrznego do oddzielnego podkatalogu w repozytorium. Ma to szczegółowy proces konfiguracji, a następnie jest bardzo łatwe dla innych użytkowników, ponieważ jest automatycznie dołączane, gdy repozytorium jest sprawdzane lub klonowane. Może to być wygodny sposób na uwzględnienie zależności w projekcie.
Wyciąganie zmian z innego projektu jest łatwe, ale przesyłanie zmian z powrotem jest skomplikowane. A jeśli inny projekt musi zostać scalony z Twojego kodu, historie projektów zostaną scalone, a dwa projekty w rzeczywistości staną się jednym.
Podmoduły Gita ( ręczne ) łączą się z konkretnym zatwierdzeniem w repozytorium innego projektu, podobnie jak svn: externals z
-r
argumentem. Podmoduły są łatwe do skonfigurowania, ale wszyscy użytkownicy muszą zarządzać podmodułami, które nie są automatycznie uwzględniane w kasach (lub klonach).Chociaż łatwo jest przesłać zmiany z powrotem do innego projektu, może to spowodować problemy, jeśli repozytorium uległo zmianie. Dlatego generalnie nie jest właściwe zgłaszanie zmian z powrotem do projektu, który jest w trakcie opracowywania.
źródło
svn:externals
. W wersji 1.5 składnia została zmieniona na bardziej elastyczny format. Dodano względne adresowanie adresów URL.Jak wspomniałem w " Aktualizacja podmodułu Git do nowej wersji ", możesz osiągnąć tę samą zewnętrzną funkcję SVN z podmodułami Git 1.8.2:
To wystarczy, aby podmoduł podążał za odgałęzieniem (jak w NAJNOWSZYM zatwierdzeniu zdalnej gałęzi zdalnego repozytorium submodułu ). Wszystko, co musisz zrobić, to:
To zaktualizuje podmoduł.
Więcej szczegółów w „
git submodule
śledzeniu najnowszych ”.Aby przekształcić istniejący podmoduł w jeden śledzący gałąź : zobacz wszystkie kroki w „ Podmoduły Git: Określ gałąź / tag ”.
źródło
svn:externals
?--depth
ale tak naprawdę nie rozwiązuje problemu.Mam alternatywne rozwiązanie tego problemu - narzędzie gil (git links)
Pozwala opisywać i zarządzać złożonymi zależnościami repozytoriów git.
Zapewnia również rozwiązanie problemu zależności rekurencyjnych podmodułów w git .
Weź pod uwagę, że masz następujące zależności projektu: przykładowy wykres zależności repozytorium git
Następnie możesz zdefiniować
.gitlinks
plik z opisem relacji repozytoriów:Każda linia opisuje łącze git w następującym formacie:
Na koniec musisz zaktualizować swoje główne repozytorium próbek:
W rezultacie sklonujesz wszystkie wymagane projekty i połączysz je ze sobą w odpowiedni sposób.
Jeśli chcesz zatwierdzić wszystkie zmiany w jakimś repozytorium ze wszystkimi zmianami w podrzędnych repozytoriach połączonych, możesz to zrobić za pomocą jednego polecenia:
Polecenia pull, push działają w podobny sposób:
Narzędzie Gil (git links) obsługuje następujące polecenia:
Więcej o problemie zależności rekurencyjnych podmodułów w git .
źródło
gil
.