Dzięki SVN miałem jedno duże repozytorium, które trzymałem na serwerze i wyewidencjonowałem na kilku maszynach. To był całkiem niezły system tworzenia kopii zapasowych i pozwolił mi z łatwością pracować na dowolnej maszynie. Mógłbym pobrać konkretny projekt, zatwierdzić i zaktualizować projekt „główny” lub pobrać całą rzecz.
Teraz mam kilka repozytoriów git dla różnych projektów, z których kilka jest na githubie. Mam też repozytorium SVN, o którym wspomniałem, zaimportowane za pomocą polecenia git-svn.
Zasadniczo lubię mieć cały mój kod (nie tylko projekty, ale losowe fragmenty i skrypty, niektóre rzeczy, takie jak moje CV, artykuły, które napisałem, strony internetowe, które stworzyłem i tak dalej) w jednym dużym repozytorium, które mogę łatwo sklonować na zdalnym maszyny lub pendrive / dyski twarde jako kopia zapasowa.
Problem polega na tym, że jest to prywatne repozytorium, a git nie pozwala na wyewidencjonowanie określonego folderu (który mógłbym przesłać do github jako oddzielny projekt, ale zmiany pojawiają się zarówno w głównym repozytorium, jak i podrzędnym repozytoria)
I mógł korzystać z systemu git submodule, ale to nie działa jak chcę go zbyt (Submoduły są wskaźnikami do innych repozytoriów, a tak naprawdę nie zawierają rzeczywisty kod, więc jest bezużyteczny do tworzenia kopii zapasowych)
Obecnie mam folder git-repos (na przykład ~ / code_projects / proj1 / .git / ~ / code_projects / proj2 / .git /) i po wprowadzeniu zmian w proj1 robię git push github
, a następnie kopiuję pliki do ~ / Dokumenty / kod / python / projekty / proj1 / i wykonaj pojedyncze zatwierdzenie (zamiast wielu w poszczególnych repozytoriach). Następnie zrobić git push backupdrive1
, git push mymemorystick
etc
A więc pytanie: w jaki sposób Twój osobisty kod i projekty z repozytoriami git oraz utrzymywanie ich synchronizacji i tworzenia kopii zapasowych?
Chcę dodać do odpowiedzi Damiena, w której zaleca:
Możesz skonfigurować specjalnego pilota do wysyłania do wszystkich indywidualnych rzeczywistych pilotów za pomocą 1 polecenia; Znalazłem go pod adresem http://marc.info/?l=git&m=116231242118202&w=2 :
Możesz także zaoszczędzić sobie przy dwukrotnym wpisywaniu adresów URL, korzystając z konstrukcji:
źródło
Jestem również ciekawy sugerowanych sposobów radzenia sobie z tym i opiszę obecną konfigurację, której używam (z SVN). Zasadniczo utworzyłem repozytorium, które zawiera hierarchię mini-systemów plików, w tym własne katalogi bin i lib. W katalogu głównym tego drzewa znajduje się skrypt, który skonfiguruje twoje środowisko, aby dodać te katalogi bin, lib, etc ... inne katalogi do odpowiednich zmiennych środowiskowych. Tak więc katalog główny zasadniczo wygląda następująco:
Teraz wewnątrz / bin i / lib znajduje się wiele projektów i odpowiadające im biblioteki. Wiem, że to nie jest standardowy projekt, ale komuś z mojej grupy bardzo łatwo jest sprawdzić repozytorium, uruchomić skrypt „setup_env.bash” i mieć najbardziej aktualne wersje wszystkich projektów lokalnie w swoim sprawdzić. Nie muszą martwić się instalacją / aktualizacją / usr / bin lub / usr / lib, a dzięki temu łatwo jest mieć wiele kas i bardzo zlokalizowane środowisko na każdą kasę. Ktoś może też po prostu skomponować całe repozytorium i nie martwić się o odinstalowanie jakichkolwiek programów.
To działa dobrze dla nas i nie jestem pewien, czy to zmienimy. Problem polega na tym, że w tym jednym dużym repozytorium jest wiele projektów. Czy istnieje standardowy sposób git / Hg / bzr tworzenia takiego środowiska i dzielenia projektów na ich własne repozytoria?
źródło
, Nie próbowałem jeszcze zagnieżdżać repozytoriów git, ponieważ nie napotkałem sytuacji, w której muszę. Jak czytałem na kanale #git, git wydaje się być zdezorientowany przez zagnieżdżanie repozytoriów, tj. Próbujesz git-init wewnątrz repozytorium git. Jedynym sposobem zarządzania zagnieżdżoną strukturą git jest użycie
git-submodule
lub systemu Androidrepo
narzędzia .Jeśli chodzi o tę odpowiedzialność za tworzenie kopii zapasowych, którą opisujesz, mówię deleguj ją ... Dla mnie zwykle umieszczam repozytorium „pochodzenia” dla każdego projektu na dysku sieciowym w pracy, który jest regularnie archiwizowany przez techników IT przez ich strategię tworzenia kopii zapasowych wybór. To proste i nie muszę się tym martwić. ;)
źródło
A co z używaniem MR do zarządzania wieloma repozytoriami Git jednocześnie:
źródło
Istnieje inna metoda zagnieżdżania repozytoriów git, ale nie rozwiązuje ona problemu, którego szukasz. Jednak dla innych szukających rozwiązania byłem:
W repozytorium git najwyższego poziomu po prostu ukryj folder w .gitignore zawierający zagnieżdżone repozytorium git. Ułatwia to posiadanie dwóch oddzielnych (ale zagnieżdżonych!) Repozytoriów git.
źródło