2010-05-04 16 views

cevap

21

Bunun eski olduğunu biliyorum ama sanırım bir çözüm buldum.

çalıştırın: git sağlam bir arşiv yapmak için taahhüt istemeyeceğine göre

stashName=`git stash create`; 
git archive <options> $stashName 

, biz yapabilir 'tek tek yok' git stash kullanarak işlemek. create komutu stash işlemini yaratır (çalışma dizini sıfırlamaz veya stash kümesine itmez) ve bunun için karma değerini döndürür.

Sarma işleminin yapılacağı alandan endişe ediyorsanız, git gc --prune=now ile temizleyebilirsiniz. Aksi takdirde, sadece 2 hafta bekleyin ve kaybolacaktır.

+0

harika çalışıyor, teşekkürler! –

2

Değişiklikleri yapmadıysanız, git archive size yardımcı olmaz. Çalışma alanınızın bir anlık görüntüsünü istiyorsanız, tar muhtemelen en iyi bahistir.

11

benim amaç için nevsan cevabını artırma - Her durumda (taahhüt veya değil) en son kod arşivlemek için:

uploadStash=`git stash create`; git archive -o code_outgoing.zip ${uploadStash:-HEAD} 
+3

Bir hata düzeltildi: git stash [şimdi] oluştur her zaman başarılı bir şekilde döner ve hiçbir dosya yokken hiçbir şey yazdırmaz. Çıkış koduna güvenmek yerine bash $ {var: -default} sözdizimini kullanın. –

+0

IIRC bununla ilgili bir sorun var, arşivden git kaldırılmış dosyaları çıkarmaz. –

3

git ls-files ile diğer çözüm:

git ls-files -z | xargs -0 tar -czvf archive.tar.gz 
+1

Bu, bence, en iyi cevabı. Ancak, ls dosyalarının -z seçeneğinin ve xargs seçeneğinin -0 (sıfır) seçeneğinin boşluklarla doğru şekilde işlenmesini tavsiye ederim: git ls-files -z | xargs -0 tar -czvf archive.tar.gz . – S2108887

+0

Kesinlikle haklısın! Teşekkürler. Bu seçenekleri komut satırına ekledim. –

+0

'Git ls dosyaları | tar Tczf - archive.tar.gz', tek bir komutun arşivlerinin boyutunda sistem tarafından uygulanan sınırlara sahip değildir. xargs herhangi bir komut için iyi değildir, gerçekten her şey için sadece bir kez koşmanız gerekir. – jthill