2010-07-29 3 views
5

örneğin git show ile kolaydır: Bir ağaç (dizin) ayıklamak için GIT'de benzer bir yol olup olmadığını bilmek istiyorum, AncakBir git deposundan bir ağacı ayıklamanın en iyi yolu nedir? keyfi bir revizyon bir damla (dosya) ayıklanıyor

git show master:src/hello-world.c > /tmp/hello.c 

ve altında her şey tekrarlayan?

Bunu yapan küçük bir komut dosyası yazdım, bu yüzden bunu olası bir yanıt olarak ekleyeceğim. Görünüşe göre bu, git'e göre inşa edilebilecek bir şeymiş gibi gözüküyor, ama ben onu nasıl bulacağımı bilmiyorum ...

cevap

13

Bunun için git archive kullanabilirsiniz.

git archive master:src/ | tar -C destination -x 
+0

İyilik, bir anlık cevap! Teşekkürler, bu ideal - benim senaryodan çok daha hızlı. –

+1

Buna ek olarak, bunu uzaktan, başka bir (hatta çıplak) depoya karşı --remote ile yapabilirsiniz – cxreg

0

o senaryoya sahip şu anda yapıyorum: git ls-tree -r -z <tree-ish> çıktısını ayrıştırır

http://gist.github.com/498447

....

extract-tree-from-git.py master:src/tests/ /tmp/extracted-tests/ 
extract-tree-from-git.py HEAD^ /tmp/parent-of-head/ 
6

Geçici bir dizin dosyası ile read-tree ve checkout-index kullanabilirsiniz:: Bunu mesela git ls-tree bir ağaç olarak anlayabiliriz şey geçirebilmesi

GIT_INDEX_FILE=.tmp.index { git read-tree master:src && 
          git checkout-index -a --prefix=dest/; 
          rm -f .tmp.index; } 

(Satır sonları netlik için eklenen, ama bu . Eğer içinde gerçekten tek astar)

çalışan bir ağaç var olduğunu rol yapmak zorunda ve çıplak depo için olduğu:

Çıplak havuzun içinden akıyorsa, GIT_DIR ayarını atlayabilirsiniz.

+0

Zeki :) 'Git arşivi' cevabınızın cevabını tercih etmenin özel bir nedeni var mı? Katta mı? –

+0

@Mark Longair: Bu daha 'düşük seviye'; arşiv çözümü daha çok bir kullanıcı komutudur. Bunun daha iyi ya da daha kötü performans gösterip göstermediği hakkında hiçbir fikrim yok. Hangileri daha popüler olduğunu bilmek gerçekten merak ettiğim gibi cevapları ayrı tuttum. –

+0

Cxreg, çıplak bir deposu ve git 1.7.0.4 ile "git checkout-index" adımında "ölümcül: Bu işlem bir çalışma ağacında çalıştırılmalıdır" ile başarısız olur. (GIT_INDEX_FILE'nin ayarlandığı ve --prefix'in kullanıldığı durumlarda bu biraz garip görünüyor. Sanırım diğer cevapları kabul ediyorum çünkü çıplak depo durumu benim için önemli, ama bu çok yararlı bir şey. İkiniz için teşekkürler. –