Karmaşık Git şube adı tüm Git komutlarını kırdı


338

masterAşağıdaki komutla bir şube oluşturmaya çalışıyordum ,

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

Git aniden yanıt vermeyi bıraktığında. Kaçanların bir ()şekilde suçlanacağından şüpheleniyorum . Şimdi, herhangi bir Git komutunu çalıştırmayı denediğimde aynı hatayı alıyorum:

git:176: command not found: _of_ProductSearchQuery

gither komut yazışımdaki sayı arttıkça.

Herkes ne olduğunu açıklayabilir mi? Ve normale nasıl dönebilirim? O dalı silmek istiyorum, ama bunu nasıl yapabilirim?


8
Ben kötü yan etkileri (lubuntu 13.10) ile bash kabuğumdaki şube oluşturmak çalıştırmak mümkün olduğu gibi bu zsh çevre ile ilgili olduğunu tahmin ediyorum, ama tamamen vanilya zsh benim geçiş yaparken hata görüyorum
Jonathan.Brink

27
Gelecekte, şüpheli görünen şeyleri alıntılayın. git branch "SSLOC-201_Implement___str__()_of_ProductSearchQuery"gayet iyi çalışıyor.
Qix - MONICA SEÇİLDİ

11
@Qix Sorunlu karakterlerden tamamen kaçınmak daha iyidir.
jub0bs

3
@Jubobs Kesinlikle, bazı şirketlerin böyle garip şube isimlerini zorladığını gördüm.
Qix - MONICA

1
@DwightSpencer Bağlantınız Bash'a özgü, ancak bu soru zsh'a özgü. Sorun aslında Bash'te oluşmuyor.
jub0bs

Yanıtlar:


617

Sorun

Herkes ne olduğunu açıklayabilir mi? [...] O dalı silebilmek isterdim, ama Git benim için çalışmaz.

Koşarak

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

zsh'de hiç şube oluşturmadınız . Bunun yerine, yanlışlıkla üç tanımlı kabuk fonksiyonları denilen git, branchve SSLOC-201_Implement___str__organıdır parametrelerini (varsa) ve görmezden _of_ProductSearchQuery. functionsVarolan tüm kabuk işlevlerini listeleyen yerleşik zsh komutunu çağırarak bunun gerçekten olup olmadığını kendiniz kontrol edebilirsiniz :

$ functions                                                     
SSLOC-201_Implement___str__ () {
    _of_ProductSearchQuery
}
branch () {
    _of_ProductSearchQuery
}
git () {
    _of_ProductSearchQuery
}

Ne yazık ki, diğer iki kabuk işlevi sorunlu olmasa da, "git" adı verilen kabuk işlevi artık iyi niyetli git komutu gölgeliyor !

$ which git
git () {
    _of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)

Bu nedenle, daha sonra hatayı alacaksınız

command not found: _of_ProductSearchQuery

Bir Git komutunu çalıştırmak girişiminde zaman örneğin git log, git statusvb (varsayarak, tabii ki, denilen hiçbir komut olduğunu _of_ProductSearchQueryvar).

Kenar notu

[...] Aynı hatayı alıyorum:

git:176: command not found: _of_ProductSearchQuery

( gither komut yazışımda artan sayı ile )

Bu sayı basitçe HISTCMDbir ortam değişkeni değerine karşılık gelir.

interaktif bir kabukta geçmiş olay numarasını, yani $HISTCMDokunmasına neden olan komutun olay numarasını günceller .

Daha fazla ayrıntı için zsh kılavuzuna bakın.

Çözüm

Ve normale nasıl dönebilirim?

Sorunlu kabuk işlevini (ve siz kazara oluşturduğunuz diğer ikisini, siz çalışırken) silin:

unset -f git
unset -f branch SSLOC-201_Implement___str__

O zaman her şey iyi olmalı.

Ya unsetgölgeli ise ?!

Güzel soru ! Sizi aşağıda Wumpus W. Wumbley'nin mükemmel yorumuna yönlendiriyorum .


Şube adlandırma ipuçları

Özel kabuk karakterlerinden kaçının

Evet, yorumlarda belirtildiği gibi, parantezler Git dalı adlarında geçerli karakterlerdir; sadece adı uygun şekilde alıntılamanız gerekir, ör.

$ git branch 'foo()bar'
$ git branch
  foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'

Ancak, komut satırı bağımsız değişkenleri olarak kullanıldığında bu adların her seferinde alıntılanması gerekliliği, sizi referans adlarında parantezlerden kaçınmaya ikna etmelidir. Daha genel olarak, bu tür sürprizleri önlemek için (mümkün olduğunca) kabuklarda özel bir anlamı olan karakterlerden kaçınmalısınız.

Basit dal adlarını kullanma

Yine de şube adlarınızı kısa ve tatlı tutmalısınız. Gibi uzun açıklamalar

SSLOC-201_Implement ___ str __ () = of_ProductSearchQuery

şube isimlerine değil, taahhüt mesajlarına aittir.


4
Bu iş parçacığında hiçbir şey parens yasadışı değildir. Git iyi gibi görünüyordu. Switched to a new branch 'abcd-()-foo'
Qix - MONICA SEÇİLDİ

1
İyi görünüyor; kesinlikle onları kullanmak için harika bir fikir değil, ancak teknik olarak geçersiz değiller .
Qix - MONICA SEÇİLDİ

12
Birisi, unsetsözde kabuk işlevi oluşturarak gölgelendirirse ne olur ? (bu mümkün mü?)
Matteo Umili

2
@codroipo Ha! İyi bir noktaya değindin. Evet, mümkündür ve bu durumda, yeniden başlatmadan daha iyi olabilirsiniz zsh.
jub0bs

45
Kullanabilirsin builtin unset. Eğer builtinve unsetikisi de daha sonra, fonksiyonlar gölgesinde edilmiş olması unfunction. Eğer bu da gitmişse unhash -f. Bunların hepsi dört gitmiş ise, o zaman kabuk yeniden başlatın.
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.