2012-08-09 15 views
19

Potrzebuję wyeksportować zawartość repozytorium git i zaimportować go do docelowego repozytorium. Wiem o dwóch możliwościach, ale nie rozwiązują one mojego problemu.Eksportuj git z historią wersji

a) Dodaj repozytorium źródłowe jako zdalne i wykonaj scalenie z celem. Nie mogę tego użyć, ponieważ oba repozytoria nie znajdują się w tej samej sieci

b) Użyj archiwum git i skopiuj zawartość do miejsca docelowego. W tym archiwum git informacje o wersji są tracone.

Potrzebuję czegoś, co zrobi archiwum wraz z historią wersji i umożliwi scalenie w cel. Jak to zrobić?

Odpowiedz

40

git bundle przewidziane jest dokładnie ten cel.

Przykład:

  1. Bundle repozytorium źródło w całości

    git bundle create my_repo.bundle --all

  2. Weź `my_repo.bundle '', gdzie twój cel jest

  3. Z miejsca docelowego załaduj obiekty zatwierdzające źródło

    git bundle unbundle my_repo.bundle

    ... z którym momencie można scalić/rebase/cherry-pick żądane źródło zobowiązuje do repozytorium docelowego do syta.

    Inaczej, ciągnąc działa tak samo:

    git pull my_repo.bundle

porównaniu do klonowania, wiązki są łatwiejsze do przenoszenia, ponieważ są one mniejsze, jak pliki nie są przeprowadzane w ich wyrejestrowany stanu .

Inne powody korzystania zestawie:

  • przeciwieństwie do korzystania clone --bare (co nie kasa plików), wiązki tworzone są i pakowane w postaci jednego pliku, dzięki czemu nie trzeba dodatkowe ściskanie/archiwizowanie.

  • Można też po prostu paczkę tar repozytorium źródłowego (lub po prostu katalog .git się ), ale będziesz przeniesienie całego nadmiaru cache i śmieci, które buduje się pod .git /.

+7

Możesz również "git clone my_repo.bundle". Więcej informacji na http://git-scm.com/docs/git-bundle – jpbochi

+0

przed rozpakowaniem, musisz mieć istniejące repozytorium docelowe lub utworzyć nowe polecenie repo poprzez polecenie git init, ponieważ w przeciwnym razie wystąpiłby błąd. –

+0

@LinSongYang Nowe repozytorium można również utworzyć, klonując go z pakietu tak, jak opisuje pierwszy komentarz. – antak

0

Chcesz utworzyć widelec bieżącego repozytorium, wydaje się. Daj mi znać, jeśli mam to prawo: Chcesz sklonować konkretne repozytorium git. Pracować nad klonem, a następnie scalać zmiany w oryginalnym repozytorium?

W tym celu tworzę widelec twojego repozytorium, a następnie wyciągam zmiany z oryginalnego źródła dla zmian zatwierdzenia.

+0

Repozytorium źródłowy nie jest dostępny bezpośrednio. (Więc nie można scalić/klonować) Czy istnieje inny mechanizm dostarczania, który przenosi zmiany między dwoma rozłączonymi repozytoriami? – codejammer

+0

Jeśli katalog źródłowy nie jest dostępny, w jaki sposób zamierzasz skopiować z niego jakiś plik? – darnir

+0

To musi być rozpowszechniane bez bezpośredniego dostępu. – codejammer

0

Możesz po prostu skompresować cały folder repozytorium, a następnie skopiować go do docelowej stacji roboczej (za pomocą pamięci USB itp.) I dodać lokalne repozytorium jako zdalne repozytorium. Następnie możesz pobrać i scalić.

+0

FYI: To jest często OK, ale ma jedną poważną wadę: przenosisz nie tylko dane i historię, ale także wszystkie ustawienia, takie jak np. Adresy URL lub haki z pilotów, czy też katalog roboczy nazwa użytkownika i adres e-mail, które jest czymś, czego nie chcesz robić. – quetzalcoatl

2

Git sklonuj repozytorium na dysku USB, laptopie lub innym nośniku transferu danych. Podłącz go do innego komputera, dodaj medium jako pilota i pobierz/scal zmiany z tego miejsca ...

Każdy klon z repozytorium rzeczywiście zawiera całą historię, więc pytanie brzmi, w jaki sposób można uzyskać klon do innej maszyny.

zobacz także: this question

+0

Więc musimy sklonować, a następnie użyć naszego własnego mechanizmu archiwizacji, ponieważ git archive pomija folder .git w prawo? – codejammer

+0

Tak, zasadniczo git-archive może utworzyć plik zip/archiwum określonej wersji i/lub części drzewa, ale nie zachowuje historii. –

+0

Dzięki, to podejście działa dla mnie – codejammer

Powiązane problemy