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.