Używam gita w stosunkowo małym projekcie i uważam, że spakowanie zawartości katalogu .git może być dobrym sposobem na wykonanie kopii zapasowej projektu. Ale to trochę dziwne, ponieważ kiedy przywracam, pierwszą rzeczą, którą muszę zrobić, jest git reset --hard
.
Czy są jakieś problemy z tworzeniem kopii zapasowej repozytorium git w ten sposób? Czy istnieje lepszy sposób, aby to zrobić (np. Przenośny format git lub coś podobnego?)?
git bundle
Odpowiedzi:
Zacząłem trochę przerabiać skrypt Yara i rezultat jest na githubie, włączając strony man i skrypt instalacyjny:
https://github.com/najamelan/git-backup
Instalacja :
Witamy wszystkie sugestie i prośby o ściągnięcie na githubie.
źródło
sudo install.sh
, a następnie konfigurujesz (używa systemu git config), aby ustawić katalog docelowy (zobacz plik readme na github). Następnie uruchomiszgit backup
swoje repozytorium. Na marginesie, był to eksperyment z pakietem git i odpowiedzią na to pytanie, ale pakiet git nigdy nie tworzy absolutnie dokładnej kopii (np. Jeśli dobrze pamiętam, szczególnie w przypadku pilotów git), więc osobiście używam tar do tworzenia kopii zapasowych. katalogi git.Innym oficjalnym sposobem byłoby użycie pakietu git
Spowoduje to utworzenie pliku, który obsługuje
git fetch
igit pull
aktualizuje drugie repozytorium.Przydatne do przyrostowych kopii zapasowych i przywracania.
Ale jeśli musisz wykonać kopię zapasową wszystkiego (ponieważ nie masz drugiego repozytorium ze starszą zawartością już na miejscu), tworzenie kopii zapasowej jest nieco bardziej skomplikowane, jak wspomniałem w mojej innej odpowiedzi, po komentarzu Kenta Fredrica :
(Jest to operacja atomowa , w przeciwieństwie do tworzenia archiwum z
.git
folderu, jak skomentował przez fantabolous )Ostrzeżenie: Nie zaleca patentowym NOTZ jest rozwiązanie , które jest klonowanie repo.
Tworzenie kopii zapasowych wielu plików jest zawsze trudniejsze niż tworzenie kopii zapasowych lub aktualizowanie ... tylko jednego.
Jeśli spojrzeć na historię edycji na OP Yar odpowiedź , to widać, że Yar wykorzystywane na pierwszy
clone --mirror
... z edycji:Obecne rozwiązanie Yar wykorzystuje
git bundle
.Odpoczywam moja sprawa.
źródło
git bundle
. Nie jest to możliwe w przypadku globalnego zip całego lokalnego repozytorium.Sposób, w jaki to robię, polega na utworzeniu zdalnego (gołego) repozytorium (na oddzielnym dysku, kluczu USB, serwerze kopii zapasowych lub nawet githubie), a następnie użycie
push --mirror
go, aby to zdalne repozytorium wyglądało dokładnie tak, jak moje lokalne (z wyjątkiem tego, że zdalne jest puste magazyn).Spowoduje to przesunięcie wszystkich referencji (gałęzi i tagów), w tym aktualizacji bez szybkiego przewijania do przodu. Używam tego do tworzenia kopii zapasowych mojego lokalnego repozytorium.
Strona podręcznika opisuje to tak:
Zrobiłem alias, aby wykonać push:
Następnie po prostu biegam,
git bak
kiedy chcę zrobić kopię zapasową.źródło
--mirror
rzeczywistości nie przeprowadza żadnej weryfikacji otrzymanych obiektów. Prawdopodobnie powinieneśgit fsck
w pewnym momencie uruchomić, aby zapobiec korupcji.[Zostawiam to tutaj do własnego użytku.]
Mój skrypt pakietu o nazwie
git-backup
wygląda następującoCzasami używam,
git backup
a czasami korzystam,git backup different-name
co daje mi większość możliwości, których potrzebuję.źródło
--global
użyłeś opcji ten alias będzie widoczny tylko w Twoim projekcie (jest zdefiniowany w Twoim.git/config
pliku) - prawdopodobnie tego chcesz. Dzięki za bardziej szczegółową i ładnie sformatowaną odpowiedź.Obie odpowiedzi na te pytania są poprawne, ale nadal brakowało mi kompletnego, krótkiego rozwiązania, aby wykonać kopię zapasową repozytorium Github w pliku lokalnym. Istotą jest tutaj, nie krępuj się widelec lub dostosować do swoich potrzeb.
backup.sh:
restore.sh:
źródło
Możesz wykonać kopię zapasową repozytorium git za pomocą git-copy . git-copy zapisał nowy projekt jako nagie repozytorium, co oznacza minimalny koszt przechowywania.
Następnie możesz przywrócić swój projekt za pomocą
git clone
źródło
Znalazłem prosty oficjalny sposób po przejściu przez ściany tekstu powyżej, który sprawi, że pomyślisz, że go nie ma.
Utwórz kompletny pakiet zawierający:
Przywróć go za pomocą:
Ta operacja jest atomowa AFAIK. Sprawdź oficjalne dokumenty, aby uzyskać szczegółowe informacje.
Jeśli chodzi o „zip”: pakiety git są skompresowane i zaskakująco małe w porównaniu z rozmiarem folderu .git.
źródło
przyszedł na to pytanie przez google.
Oto, co zrobiłem w najprostszy sposób.
następnie utwórz nową gałąź git z tej gałęzi
wróć do oryginalnej gałęzi i kontynuuj:
Zakładając, że schrzaniłeś sprawę i musisz przywrócić coś z gałęzi kopii zapasowej:
Najlepsza część, jeśli coś jest schrzanione, możesz po prostu usunąć gałąź źródłową i wrócić do gałęzi zapasowej !!
źródło