2009-06-30 24 views
7

Bir git destek aracında algılanan bir hatayı gidermek için bazı işler yapıyorum ve deney amaçlı olarak bir depo (muhtemelen birçok kez) kopyalamak istiyorum. Özgün depo nesnesi veritabanına oluşturulacak sabit bağlantılar için, özdeş SHA değerleriyle aynı nesnelerin birden çok kopyasını saklamak için disk alanı boşa harcamamak istiyorum. git clone güzel gerçekleştirir, ama ne yazık ki git clone bana orijinal depo gibi kurmak depo yeni bir kopyasını vermek için bir yol bulmak gibi olamaz:Boşluk bırakmadan git deposunu nasıl kopyalayabilirim/kopyalayabilirim?

  1. klon noktaları geri kopyalanan deposuna aslına olarak, ama kopyalanmış depo
  2. klon tek bir şubeyle rüzgarlar aynı kökene sahip istiyorum, ama kopyalanmış depo

Ben kollarının hepsini istiyorum bazılarını git clone --mirror kullanarak iyileştirebiliriz, ancak bu sadece çıplak bir depo oluşturmak için çalışacağım ve denediğim depo açık değil ve hata ayıklamaya çalıştığım destek aracı, çıplak depolarda çalışmaz.

Yeni nesne nesnesini orijinal nesne veritabanına sabit bağlantılarla doldurmak için hızlı bir kabuk döngüsü yazmayı ve sonra her şeyi orijinal .git dizininden kopyalamayı ve sonra bir git checkout yapmam gerektiğini düşündüm, ancak ben Bu, hataya eğilimli olmak için yeterince karmaşık ve bu tür düşük düzeyli cerrahi gerçekleştirmek için yeterli bilmiyorum ve ince hatalar ile bir depo inşa edecek endişe. Bu yaklaşım teoride mi çalışır?

Daha da iyisi, istediğimi yapmak için git clone seçeneklerini geçirmenin bir yolu var mı?

Yeni bir depo oluşturabilmemin bir yolu var mı, ancak nesne veri tabanının başka bir dizinde olduğunu ve temel olarak nesne veri tabanını orijinal depodan paylaştığını söylemenin bir yolu var mı?

Yukarıdakilerin hiçbiri işe yaramıyorsa, o zaman çok fazla alan tüketecek ve zaman alıcı olacak bir cp -pr ile kaldım.

cevap

5

Bunu "alternatifleri" ın kullanılması gibi bilinen git lingo

git clone --reference=/path/to/existing/repo url 

aradığınız düşünüyorum. Bu seçenekle, git clone help'da belirtildiği gibi olası sorunlar vardır, ancak amacınıza uygun olabilir.

Ayrıca, Dustin'in yardımcısı git-alternates ile de ilgilenebilirsiniz.

0

"git clone --mirror" öğesini kullanın, ardından çıplak olmayan çıplak depoya değiştirin (repo.git - repo/.git için yeniden adlandırın, .git/config dosyasını kopyalayın, "git checkout HEAD" düğmesini kullanarak çalışma dizini)). Not: İstendiği gibi çalışıp çalışmadığını kontrol etmedim!

0

Git klonunu --no-checkout seçeneğiyle kullanın. Bir checkout'u önlemek için git deposunu git getir yerine git komutuyla güncelleyin.

İlgili konular