2014-07-23 12 views
14

Komut dosyalarımdan porselen komutlarını çağırmaktan kaçınmak istiyorum, ancak'un yalnızca checkout-index gibi sıhhi tesisat komutlarını kullanarak bazı davranışlarını elde etmenin bir yolu var mı? Özellikle çalışma kopyası üzerindeki etkiyle ilgileniyorum: her şeyin temiz olduğunu varsayarak, checkout, eski HEAD'de izlenen ve yeni olanda olmayan dosyaları siler. checkout-index, herhangi bir dosya silme konseptine sahip değildir. Düşünebildiğim en yakın şey,Sadece tesisat komutlarını kullanarak git-çıkışını nasıl kopyalarım?

'u aramak olurdu, ancak tüm farkın hesaplanması gereksiz yere pahalı görünüyor. Daha iyi bir yolu var mı?

+3

Herhangi bir nedenle neden 'git checkout ...' aramıyorsunuz? –

+0

Evet, hayatını gereksiz yere zorlaştırma. – ThiefMaster

+1

Nihayetinde, ödeme işleminin nasıl gerçekleştiği konusunda daha fazla kontrol sahibi olmak istiyorum. Örneğin, 'checkout' göz ardı edilen dosyaları dağıtabilir ve bunu yapmaktan kaçınmak istiyorum (arttırılmış güvenlik). Ama silinen dosyalara (azaltılmış güvenlik), herşeyi açmak için 'force 'kullanmadan, pave istiyorum. Bu, dosya ağaçlarını saklamak için kapakların altında git komutunu kullanan bir betiğin parçasıdır ve 'checkout' komutumun nasıl davranmasını istediğime çok yakındır, fakat tam olarak değil. Bu kontrolü elde etmek için başka bir yol varsa lütfen bana bildirin, ama ben oradan tweak olabilir sıhhi tesisat komutları ile 'checkout' alabileceğini düşündüm. –

cevap

9

the two-tree git read-tree -um adlı kullanıcıyı arıyor. Bir temel ağaç kullanır, (genellikle HEAD beslersiniz), bir hedef ağaç ve (dolaylı olarak) dizin ve çalışma grubu kullanır. Davranışlarını anlatan tablo, benim anlayabilmem için zordu, bu yüzden benim için kendi hile formum var. Her halükarda, git checkout uygular.

git read-tree -um H M # `I` is the (implicit) index, GIT_INDEX_FILE 

        Legend 

     H  Original tree (usually HEAD:) 
     I  Indexed tree 
     M  Merge target tree 

     H->I  \ 
     H->M  } status in second relative to first 
     I->M /

     "-"  file exists in neither 
     new  exists only in second 
     deleted exists only in first 
     same  exists in both, unchanged 
     changed exists in both, different 
     (blank) irrelevant or all cases not otherwise given 

     keep keep current version 
     fail whole command fails, no changes 
     delete delete worktree file 


     H->I  H->M  I->M 

          same  keep 

    deleted changed    fail 
    deleted deleted    delete 
    deleted same    delete unless Index empty, else use M 
       same    keep 

     same  changed    worktree clean: use M; dirty: fail 
     same  deleted    worktree clean: deleted; dirty: fail 

     new  -     keep 
     new  new  changed fail 
    changed changed changed fail 
    changed deleted    fail 


note: "index empty" identifies an initial checkout, where HEAD has been 
set but never loaded. git can't currently distinguish between a 
delete-everything index and an initial-checkout index. 
+0

+1. Hile sayfasını beğendim. Kendi cevabımı 'git read-tree -um' kullanarak bir örnekle tamamladım. – VonC

+0

Teşekkürler! Asla tahmin edemezdim. –

+0

Rica ederim. Bence sen git yaptırabilirsin görmek için her zaman kolay değildir, ya da tahmin olmazdı. Ben doc masada kızdı ve kendi yapmak için zaman harcanan kadar ben gerçekten bu komutu alamadım biliyorum. – jthill

İlgili konular