Jak utworzyć pakiet kompletnego repozytorium

116

Muszę przenieść całe repozytorium na nowy komputer bez sieci, najlepiej jako pojedynczy plik. Git wiązka umożliwia git fetch, git pulloperację stylu w środowisku sneakernet ale wydaje się zakładać, że masz już wersję roboczą repo na komputerze docelowym.

Jakie jest właściwe powołanie się na:

  1. Połącz wszystkie gałęzie w bieżącym repozytorium
  2. Uruchom nowe repozytorium w katalogu docelowym, tzn. Zainstaluj poprawnie zatwierdzenie roota

Wysłałem poprawkę w celu wyjaśnienia:

`git clone` can use any bundle created without negative refspecs
(e.g., `new`, but not `old..new`).
If you want to match `git clone --mirror`, which would clone other
refs such as `refs/remotes/*`, use `--all`.
If you want to provide the same set of refs that a clone directly
from the source repository would get, use `--branches --tags` for
the `<git-rev-list-args>`.

Więc $ git bundle create repo.bundle --branches --tagsnajlepiej dopasowuje się klonowanie.

$ git bundle create repo.bundle --all zapewni lustrzane odbicie twojej maszyny źródłowej, w tym jej zdalne referencje.

Philip Oakley
źródło

Odpowiedzi:

191

Jakie jest właściwe powołanie się na:

  • Połącz wszystkie gałęzie w bieżącym repozytorium

Prosty:

$ git bundle create repo.bundle --all

Oto repo.bundlenazwa pliku pakietu, który chcesz utworzyć. Zauważ, --allże nie obejmie to gałęzi ze zdalnym śledzeniem ... tak jak zwykły klon też nie.

  • Uruchom nowe repozytorium w katalogu docelowym, tzn. Zainstaluj poprawnie zatwierdzenie roota

Najpierw clonejest po prostu init+ fetch(+ administrativia).

Po drugie, możesz użyć pliku pakietu wszędzie tam, gdzie można użyć adresu URL repozytorium, więc możesz po prostu clonez pliku pakietu:

$ git clone repo.bundle

Spowodowałoby to utworzenie reporepozytorium git.

Jakub Narębski
źródło
6
Dzięki, --allopcji nie ma na mojej stronie bundlepodręcznika dla (patrzę na wersję 1.7.6.msysgit.0) ani nie ma pliku .bundle w sekcji adresów URL dla clone. Daje mi większą pewność, że polecam jego użycie.
Philip Oakley
20
Streszczenie polecenia create to git bundle create <file> <git-rev-list-args>. Bieganie man git-rev-list(lub man git-log) dałoby ci --all. Ale zgadzam się, że powinno to być bardziej widoczne w dokumentacji poleceń pakietu.
Jakub Narębski
1
Widzę, że strona podręcznika pakietu, w sekcji Specifying References, mówi, że "będzie pakować tylko odniesienia, które są wyświetlane przez git show-ref", co nie zawiera [list] opcji git-rev-list.
Philip Oakley
2
@Philip Oakley: the git-rev-list-argssposób można wybrać pozycje literatury, które są wyświetlane przez git show-refpolecenie.
Jakub Narębski
2
--allzawierał dla mnie gałęzie zdalnego śledzenia (git 2.1.4). Mogłem zobaczyć za refs/remotes/origin/*pomocą git bundle list-heads bundlefilelub git ls-remote bundlefile. Chociaż odzyskanie ich z pakietu jest trochę trudne.
Alex
33

Najpierw sklonuj repozytorium i dołącz --mirroropcję.

git clone --mirror [email protected]:path/repo.git

Dzięki temu wszystkie zdalne rozgałęzienia są również oddziałami lokalnymi gotowymi do łączenia w pakiet.

Następnie uruchomić

git bundle create repo.bundle --all jak opisuje odpowiedź Jakuba Narębskiego

thoutbeckers
źródło
3

Sugerowałbym, abyś tarował lub spakował folder .git i po prostu rozpakował go w nowej lokalizacji, a następnie zrób git reset --hard HEAD. Wszystko, co jest wymagane dla wszystkich gałęzi, znajduje się w .git i wszystko, co powinieneś zrobić, to dostosować wszystkie piloty w pliku .git / config lub je usunąć.

tar cf myrepo.tgz .git
cp myrepo.tgz [USB_STICK]
... move to new machine ...
mkdir myrepo && cd myrepo
tar xpf [USB_STICK]/myrepo.tgz
git reset --hard HEAD
patthoyts
źródło
4
Jedynym zastrzeżeniem jest to, że będziesz musiał spojrzeć na plik .git / config, aby sprawdzić, czy pierwotny właściciel repozytorium miał tam jakieś rzeczy specyficzne dla użytkownika.
Noufal Ibrahim
@patthoyts: Biorąc pod uwagę, że jest odłączony, nie byłoby pilotów ;-) Wygląda na to, że w pakiecie brakuje (może brakować) opcji i może klonować (trzeba pomyśleć o klonowaniu z pakietu)
Philip Oakley