2012-09-18 14 views
44

, tek anlatılıyor:Git-bisect neden çalışan ağacın üst düzey dizininden çalıştırılmalıdır? bir depo kök dizininde başka herhangi bir yerden git-kenarortay komutlarının herhangi yürütmeye çalışırsa

Sen çalışma ağacının toplevel bu komutu çalıştırmak gerekir.

Neden? Bu gereksinime sahip başka bir git komutunu bilmiyorum ve bisect'in özel olması için açık bir neden göremiyorum. Bu sayfa, bu kısıtlamadan da bahsetmez.

Bu gerçekten büyük bir anlaşma değil. Ben sadece merak ediyorum.

+0

Tüm çalışma kopyanızın, – CharlesB

+2

biti sırasında değiştirileceğini ve kaldırılacak bir dizinde olmanız durumunda ne yapılacağının kenar durumundan kaçınmak gerektiğini açıklığa kavuşturmak isterim. Sonra tekrar git dizinleri takip etmiyor ... – Arafangion

+1

@CharlesB, Arafangion, Her iki nokta da git-bisect'in yapabildikleri kadar git-checkout için de geçerlidir, öyle değil mi? –

cevap

48

projesinde bazı kaydedilmesini bakınca

O işlemek bir diyor

(o git-çekme konusunda olur ([email protected]) Marcel M. Cary teker bakın ama sanırım o) alakalı POSIX kabukları getcwd farklıdır akım çalışma dizinin bir kavram var çünkü

"git çekme" başarısız(). Kabuk, PWD'de yolunu saklar. Sonuç olarak, "cd ../" bir C programında kabuk betiğinde farklı bir şekilde chdir ("../") dosyasından yorumlanabilir. Kabuk, PWD'den son metinsel yol bileşenini sıyırmak suretiyle "../" ifadesini yorumlarken, C chdir() dosya sistemindeki geçerli dizin 'daki ".." bağlantısını izler. PWD bir sembolik bağlantı olduğunda, bunlar farklı hedefleridir. Sonuç olarak, Git'in C komutları doğru üst düzey çalışma ağacını bulur ve kabuk betikleri yoktur.

https://github.com/git/git/commit/08fc0608657ee91bc85276667804c36a93138c7d

SO Ben git-kenarortay (symlinks katılmaktadırlar) kendi başına toplevel bulmak için güvenilemez bir kabuk çünkü nedenlerinden biri de söyleyebilirim. Bütçeleme işleminin, projenizin farklı revizyonlarını kontrol etmesi gerekir.

+2

Daha iyi bir sebep umuyorum, ama bu senin suçun değil. Biraz araştırma yapmak için çok teşekkür ederim. –

+1

Evet biraz hayal kırıklığı yaratıyor. Devam et ve kodun içine gir. dikkat çekici (ve bazen komik bir şekilde) iyi yorumlanmış ve taahhüt mesajları mükemmel. – willoller

6
Belirli bir revizyon mevcut klasörü içermiyorsa, geçerli klasör silinecektir.

Bu durumda, kabuğunuz artık dosya sistemi üzerinde olmayan bir klasörde oturulabilir! Git, daha sonra üst seviyenin .git klasörünü bulamıyor ve böylelikle ikilem süreci müdahale olmadan devam edemiyor.

bir gösteri:

$ git rev-parse --show-toplevel 
/path/to/project 
$ mkdir tmp 
$ cd tmp 
$ rmdir ../tmp 
$ git rev-parse --show-toplevel 
fatal: Unable to read current working directory: No such file or directory 
git checkout yaparken aynı sorun ortaya çıkabilir Elbette

ve kolayca aslında sonra sabitlenebilir, örneğin cd .. ile (willoller bunun neden kabukta çalıştığını ancak gitmediğini açıklar).

Ancak, ikileme işlemi sürecinin olduğu için, bu durumun başlamasından önce, özellikle de git bisect run gibi otomasyon kullanmak istiyorsak bu durumu önlemek anlamlıdır.

İlgili konular