Tam bir depoyu nasıl paketleyebilirim?


116

Ağa bağlı olmayan yeni bir makineye eksiksiz bir depoyu aktarmam gerekiyor, tercihen tek bir dosya varlığı olarak. Git paketi, bir gizli ağ ortamında bir git fetch, git pullstil işlemine izin verir , ancak hedef makinede zaten deponun çalışan bir sürümüne sahip olduğunuzu varsayar.

Aşağıdakilere doğru çağrı nedir:

  1. Mevcut depodaki tüm dalları paketleyin
  2. Hedef dizinde yeni depoyu başlatın, yani kök işlemeyi doğru bir şekilde kurun

Açıklığa kavuşturmak için yukarı akışa bir yama gönderdim:

`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>`.

Yani $ git bundle create repo.bundle --branches --tagsen iyi klonlamayla eşleşir.

$ git bundle create repo.bundle --all uzak referanslar da dahil olmak üzere kaynak makinenizin bir ayna görüntüsünü sağlayacaktır.

Yanıtlar:


191

Aşağıdakilere doğru çağrı nedir:

  • Mevcut depodaki tüm dalları paketleyin

Basit:

$ git bundle create repo.bundle --all

İşte repo.bundleoluşturmak istediğiniz paket dosyasının adı. Bunun --all, uzaktan izleme dallarını içermeyeceğini unutmayın ... tıpkı sıradan klonlarda olduğu gibi.

  • Hedef dizinde yeni depoyu başlatın, yani kök işlemeyi doğru bir şekilde kurun

Birincisi, clonesadece init+fetch (+ administrativia).

İkinci olarak, paket dosyasını depo URL'sinin kullanılabileceği her yerde kullanabilirsiniz, böylece clonebir paket dosyasından kolayca yapabilirsiniz :

$ git clone repo.bundle

Bu repobir git deposu oluşturacaktır .


6
Teşekkürler, --allseçenekler bundle(1.7.6.msysgit.0 sürümüne bakıyorum) için kılavuz sayfamda veya .bundle dosyasının URL'ler bölümündeki kullanımı için değil clone. Kullanımını tavsiye etmek bana daha fazla güven veriyor.
Philip Oakley

20
Create komutunun özeti git bundle create <file> <git-rev-list-args>. Koşmak man git-rev-list(veya man git-log) size verecektir --all. Ancak paket komut belgelerinde daha görünür olması gerektiğini kabul ediyorum.
Jakub Narębski

1
Referansları Belirleme altındaki paket man sayfasının, git show-refgit-rev-list seçeneklerini [list] içermeyen " yalnızca tarafından gösterilen referansları paketleyeceğini" söylediğini görüyorum .
Philip Oakley

2
@Philip Oakley: Komutla gösterilen referansları git-rev-list-argsnasıl seçersinizgit show-ref .
Jakub Narębski

2
--allbenim için uzaktan izleme şubelerini içeriyordu (git 2.1.4). Veya refs/remotes/origin/*ile görebiliyordum . Her ne kadar onları paketten geri almak biraz zor olsa da. git bundle list-heads bundlefilegit ls-remote bundlefile
Alex

33

Önce depoyu klonlayın ve --mirrorseçeneği dahil edin .

git clone --mirror git@example.org:path/repo.git

Bu, tüm uzak dalların aynı zamanda paketlemeye hazır yerel şubeler olmasını sağlar.

O zaman koş

git bundle create repo.bundle --all Jakub Narębski'nin cevabında belirtildiği gibi


3

.Git klasörünü tarlamanızı veya sıkıştırmanızı ve yeni konumda açmanızı ve sonra yapmanızı öneririm git reset --hard HEAD. Tüm şubeler için gereken her şey .git altında ve yapmanız gereken tek şey .git / config dosyasındaki herhangi bir uzaktan kumandayı ayarlamak veya kaldırmaktır.

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

4
Bir uyarı, orijinal depo sahibinin orada kullanıcıya özgü herhangi bir şey olup olmadığını kontrol etmek için .git / config dosyasına bakmanız gerektiğidir.
Noufal İbrahim

@patthoyts: Bağlantısının kesildiği göz önüne alındığında, uzaktan kumanda olmayacak ;-) Paket bir seçeneği eksik (olabilir) ve belki klonlanmış (bir paketten klonlamayı düşünmek gerekir)
Philip Oakley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.