Git belirli hata kodları döndürüyor mu?


87

Birleştirme hataları veya yeniden tabanlama hataları gibi. Benzersiz bir hata kodu var mı?

Yanıtlar:


56

Başarısız olmak için bir test ayarladım. Elimde olan bu:

$ git merge newbranch
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

$ echo $?
1

Git 0, beklendiği gibi doğru şekilde birleştiğinde geri döner .


2
Sorun şu ki, git merge(1.7.4 - kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html adresindeki) dokümanların dönüş durumundan yalnızca bir yerde bahsedilmesi ("- -f-sadece "ve hızlı ileri alma işlemi yapamaz, sıfırdan farklı bir değer döndürür - tümünün işe yaraması veya bir birleştirme çatışması olması durumunda neyin döndürüleceğini açıkça söylemez.
Matt Curtis

10
@Matt: Git komutları başarı için sıfır, aksi takdirde sıfır olmayan (genellikle 1) döndürme konusunda çok çok iyidir. Komutları her zaman birlikte güvenle zincirleyebilirsiniz &&; testleri böyle uygulanıyor.
Cascabel

17
Git, tutarlı ve mantıklı çıkış kodları döndürmek için iyi değildir. Örneğin, git commit'i değişiklik yapmadan yapmak kod 1 ile çıkacaktır, ancak bu bir hata değildir .
pfalcon

3
Builtin / merge.c kaynak kodundaki bir yorumdan: "Arka uç, çatışmalar çözülmek üzere bırakıldığında 1 ile çıkar, verilen birleştirme işlemini hiç işlemediğinde 2 ile çıkar."
Mike

olan git rebaseaynı davranış?
osexp2003

60

Kısacası hayır. Hatalar için çıkış kodu 1 ve başarı için 0 göreceksiniz.

Kaynağın hızlı bir şekilde anlaşılmasından, belirli amaçları için beklenen 127 ve 128'den bazıları (komut bulunamadı, hatalar zaten bildirildi) ve birkaç yerde birkaç alışılmadık kod var, ancak değirmen hatalarının çalıştırılması için tümü exit(1).


3
Bu, commit kancalarınızda hata ayıklamak için ekstra can sıkıcıdır. Başarısız bir kesinleştirme durumunda, her zaman kanca çıkış kodunuz yerine 1 döndürürse, git kancalarınızda bir çıkış koduna sahip olmanın ne anlamı var?
Acemi C

* nix uygulamaları tam başarı için 0 durumunu döndürür. Diğer durum kodları uygulama tarafından belirlenir. Anlamları uygulamaya bağlı olan 255 başka kod vardır. Ayrıntılar için mansayfalarına bakın.
shawnhcorey

3
@shawnhcorey Sorun, git'in sıfırdan farklı hata kodlarını belgelememesidir.
Ian Kemp

13

git statusGit olmayan bir depoda çalıştırmak 1 değil 128 döndürür; bu, bir git deposunun var olup olmadığını hızlı bir şekilde belirlemede yardımcı olur.


7

git push --delete origin a_remote_tag_name

Git sürümü kullanan etiket yoksa bu 256 döndürür 1.8.3.1

Her komut tarafından döndürülen belirli dönüş kodlarının ve bunların neyi gösterdiklerinin birleştirilmiş bir listesine sahip olmak güzel olurdu. Bu ayrıca, dönüş kodu anlamlarının (otomasyon komut dosyalarının güvenebileceği) değiştirilmesini önlemeye yardımcı olabilir.


6

Git'ten herhangi bir hata mesajı gelmeyen 128 hatası, "beklenmeyen sorun" için bir bütün olabilir.

Bunu, git checkout -- myfilefarklı bir kullanıcı tarafından .git altındaki dosyaları değiştirmek için gereken işlemlerde (örneğin , değiştirilmiş bir dosyayı geri döndürmek için " ") alıyordum . (Benim durumumda " chmod -R og+w .git" düzeltti; doğal olarak, durumunuz için güvenlik sonuçlarını anlamadığınız sürece bunu yapma!)


2

Git 2.24 (Q4 2019), gitkomutların nasıl kod döndürdüğünü gösteriyor.

Bkz 50094ca commit , c1a6f21 işlemek , 854b5cb işlemek , dd2b6b6 işlemek , 6bd26f5 taahhüt , c6ec6da işlemek , f2e2fa8 işlemek , 460609c işlemek , 92014b6 taahhüt , 0ab74e9 taahhüt , cb46c40 işlemek , b562a54 taahhüt (2019 27 Eyl) ve fe49814 taahhüt (2019 20 Eyl) tarafından Denton Liu ( Denton-L) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 1c6fc94 tamamlama 2019 30 Eki)

t4014: git komutlarının dönüş kodlarını kaybetmeyi durdur

Şu anda, Git komutlarının dönüş kodlarının kaybolmasının iki yolu vardır.

İlk yol, bir komutun bir borunun yukarı akışında olduğu zamandır. Bir boruda, yalnızca son komutun dönüş kodu kullanılır. Böylece, diğer tüm komutların dönüş kodları maskelenmiş olacaktır.
Yukarı akışta Git komutları olmayacak şekilde boruları yeniden yazın.

Diğer yol, bir komutun atamasız bir alt kabuğa girmesidir .
Dönüş kodu, çevreleyen komutların lehine kaybolacaktır.
Bunun örneklerini, Git komutlarının çıktısını bir dosyaya ve çevreleyen komutları yalnızca Git olmayan komutlara sahip alt kabukları çağıracak şekilde yeniden yazın.

Yani yazmak yerine:

git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"

Tür:

git cat-file commit rebuild-1 >actual &&
    grep "^Side .* with .* backslash-n" actual
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.