Git şube adında eğik çizgi karakterini kullanma


222

Eminim popüler bir Git projesinde bir yerde şubelerin "özellik / xyz" gibi bir deseni olduğunu gördüm.

Ancak eğik çizgi karakteri olan bir şube oluşturmaya çalıştığımda bir hata alıyorum:

$ git branch labs/feature
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory

Aynı sorun (benim ilk denemem):

$ git checkout -b labs/feature

Git'te eğik çizgi karakterine sahip bir şube nasıl oluşturulur?

git  branch 

1
Aslında görünüşe göre problemin var HEAD. Git HEAD, sizin labs/featureyaratılmamış şubeye bir bağ olduğunuzu düşünüyor gibi görünüyor . Bunun nasıl olabileceğine dair hiçbir fikrim yok, ama buna foo/bardayanarak adlandırılan bir şube yaratma girişiminiz işe yaramıyor demektir. Nasıl HEADgeldiğine dair bir fikrin var mı?
CB Bailey

Karışıklık için özür dilerim, "laboratuvarlar / özellik", "foo / bar" değil, düzenlenmiş örnek.

Eğik çizgi önce herhangi bir şey FWIW altında bir dizin oluşturur .git/refs/headsyani eğer git checkout -b feature/123o zaman projectRootFolder/.git/refs/headsdizinin içinde adında bir dizin göreceksiniz: featurenerede o dizinin içinde bir şube göreceksiniz 123. Daha feature/124sonra featuredizinin içinde bir tane daha oluşturursanız124
Honey

:-D "Aslında seninle ilgili bir sorun var gibi görünüyor HEAD" Güzel bir @CBBailey
Kent Bull

Yanıtlar:


222

Şubenin labszaten mevcut olmadığından emin misiniz ( bu konuda olduğu gibi )?

Hem dosyaya hem de aynı ada sahip bir dizine sahip olamazsınız.

Temelde bunu yapmak için git almaya çalışıyorsunuz:

% cd .git/refs/heads
% ls -l
total 0
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master
% mkdir labs
mkdir: cannot create directory 'labs': File exists

"Dizin oluşturulamıyor" hatasının eşdeğerini alıyorsunuz.
İçinde eğik çizgiler bulunan bir dalınız olduğunda, altında bir dizin hiyerarşisi olarak depolanır .git/refs/heads.


3
Derin cevap için teşekkürler .. Interstingly git şube foo / bar (hangi çalıştı) çalıştı; sonra git şube -d foo / bar, ama foo / dizininin (şimdi boş) hala var olduğunu görüyorum! EDIT: ve ben "git branch foo" en kısa sürede değiştirilir. Herşey iyi.

1
@ faB: kötü ... ama beklenmedik değil: çubuğu (' foo' ad alanında) sildiniz , ancak foo(diğer dal için bir ad alanı olarak hizmet edebilecek veya bir dalın kendisi olabilir)
VonC

Bu gerçekten önemli değil, ama git aradığınızda bile duruşunu değiştirmiyor pack-refs, bu yüzden sizi bundan korumak için kendi yolumdan gidiyor.
Josh Lee

23
Cevabı özetlemek gerekirse: Şube adlarında eğik çizgiler olabilir. OP zaten bir labsşubeye sahipti ve yaratmaya çalıştı labs/feature.
duozmo

107

Hiyerarşik dal adlarına (eğik çizgi ile dal adları) sahip olmak mümkündür. Örneğin depomda böyle şubelerim var. Bir uyarı, depoda hem şube 'foo' hem de şube 'foo / bar' olamaz.

Senin sorunun adında eğik çizgi ile şube oluşturmak değil.

$ git şube foo / bar
hata: başvuru referanslarını / kafalarını / laboratuvarlarını / özelliğini çözemiyor: Bir dizin değil
fatal: Güncelleme için ref kilitlenemedi: Dizin değil

Yukarıdaki hata mesajı 'foo / bar' değil, 'labs / feature' dalından bahseder (copy'n'paste'de bir hata olmadıkça, yani oturumun bölümlerini düzenlediyseniz). git branchVeya sonucu ne git rev-parse --symbolic-full-name HEAD?


1
Teşekkürler, karışıklık için üzgünüm, ilk önce bir foo / bar örneği yazdım, ancak gerçek testimden hata mesajı yapıştırın. Tekrar yapmayacağım :) Ve benim hatam için de özür dilerim, gerçekten zaten bir "laboratuar" dalı vardı.

33

Bazan bir şubeniz varsa, bazen bu sorun oluşur.

Bunu denedim:

git checkout -b features/aName origin/features/aName

Ne yazık ki, zaten bir şubem vardı featuresve asker sorusu istisnasını aldım.

Şubeyi kaldırmak featuressorunu çözdü, yukarıdaki komut çalıştı.


32

Benim durumumda, zaten kullanılmamış bir labsdal olduğunu unuttum . Silinmesi sorunu çözdü:

git branch -d labs
git checkout -b labs/feature

Açıklama:

Her ad , her ikisi birden değil , yalnızca bir ana dal veya normal bir dal olabilir. Bu yüzden dallar labs ve labs/feature ikisi de aynı anda var olamaz.

Bu davranışın nedeni, dalların dosya sisteminde depolanması ve orada aynı düzeyde bir dosyaya labsve dizine sahip labsolamamanızdır.


-1

Yanılıyor olabilirim, ancak eğik çizgiler sadece uzak bir repo ile ilgili olduklarında şube adlarında göründüğünü düşündüm origin/master.


11
İsimlerinde '/' ile yerel şubeler oluşturmak tamamen mümkündür - ve gerçekten yaygındır. İlgili dalları bir 'ad alanında' gruplandırmanın yaygın bir yoludur.
CB Bailey

Evet dürüst olmak gerekirse, öğrenirken kafa karıştırıcı olabilir, ancak adlandırma da yararlı olabilir. Sonra yine eğik çizgi veya çizgi kullanarak, kişisel zevkin ötesinde önemli olup olmadığından emin değilim?

2
git flow bu adlandırma alanını kullanır :)
Rimian
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.