git scalić różne repozytoria?

79

Używam SVN do wszystkich moich projektów. Czasami projekt B jest kopią z projektu A. Kiedy projekt A ma ogólną zmianę, mogę użyć svn merge Aw katalogu B i scali te zmiany.

Teraz, gdybym chciał użyć git. Nie podoba mi się, że wszystkie moje projekty są w tym samym repozytorium, ponieważ muszę wtedy wszystko sklonować i nie mogę wybrać tylko jednego projektu, jak w SVN. Ale mając jedno repozytorium dla każdego projektu, jak mogę zrobić to samo, co wcześniej z SVN?

Pytanie brzmi: Jaki jest najlepszy sposób nadania jej struktury, jeśli chcę mieć kilka podprojektów, z których naprawdę wszystkie odnoszą się do jednego oryginalnego projektu i aby były zsynchronizowane? Chciałbym też móc je osobno sprawdzić

baloo
źródło
1
Prawdopodobnie lepiej przyjrzyj się git-submodule ( kernel.org/pub/software/scm/git/docs/git-submodule.html ).
Cascabel
@Jefromi, ale pliki źródłowe pochodzą w zasadzie z tej samej historii, oznaczałoby to, że mam dwie kopie plików? Myślę, że podmoduł jest bardziej do śledzenia zewnętrznych bibliotek, które dołączasz jako oddzielne pliki (nie scalasz)?
baloo
Nieważne, nie widziałem, że powiedziałeś, że B jest kopią A. Czytając twoje „pytanie jest”, gdzie powiedziałeś „podprojekty… odnoszące się do jednego oryginalnego projektu… zsynchronizowane” Zakładałem, że miałeś na myśli podjęcie wycinać fragmenty tego oryginalnego projektu, ale synchronizować je w metaprojekcie.
Cascabel

Odpowiedzi:

140

Jeśli masz dwa projekty, proj1a proj2i scalić zmiany proj1w proj2, byś zrobił to tak:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

Uważam, że robi to to samo, co robiłeś z SVN.

Olivier Verdier
źródło
Ale czy scalenie ścieżki zmiany nr 2, którą już scaliliśmy, zmiany nr 1, robi to w ten sposób? Musiałem ponownie scalić wszystkie zmiany (i poprawiać konflikty) dla wszystkich zmian za każdym razem, gdy dodawano nową zmianę, o ile pamiętam, że była poprawna. Nie stało się to po drodze SVN
baloo
Oczywiście scalanie działa jak zwykle. Nie musisz „odnawiać wszystkich zmian”. To nic innego jak zwykłe scalanie, takie, którego używałbyś z odległym serwerem.
Olivier Verdier
A jeśli nie mam pilota? Chciałbym zrobić to samo (połączyć projA w projB), ale pracuję tylko lokalnie bez pilotów.
L. Holanda,
1
@LeoHolanda Lokalne pliki liczą się jako odległe w przypadku git.
PyRulez,
3
@LeoHolanda Masz rację. Musiałem oznaczyć lokalne repozytorium w formacie URL, na przykład file: ///Users/abc/path/to/my/repo/.git
mcku