Git 'ana' dalımı 'yayın' olarak nasıl yeniden adlandırabilirim?


116

Projelerimiz için, şubenin nasıl kullanılması gerektiğinin daha net olmasını sağlamak için artık ana şubenin sürüm şubesi olarak adlandırılacağı yeni bir politika uygulamak istiyoruz. Doğal olarak aday şubeler de geliştirip yayınlayacağız.

Aşağıdakileri kullanarak ana şubeyi yerel olarak yeniden adlandırabileceğimi biliyorum:

git branch -m master release

Ancak, bu yalnızca yereldir. Bunu uzaktan kumandaya itsem bile, HEAD hala uzak ana dalı işaret ediyor. Ana şubeden tamamen kurtulmak ve ilk klonun ardından varsayılan yerel şubeyi serbest bırakmak istiyorum.

Bunu nasıl başarabilirim?

Görünüşe göre kaynak Gitorious bir sunucuda olduğu için , ana dalı silerken hatalar alıyorum. Şimdi, varsayılan dalın 'yayın' olması için bunu değiştirmenin mümkün olup olmadığını görmeye çalışıyorum.


2
Heh, yeterince adil. Uzun vadeli değer, en azından denemek için yeterince yüksek.
Kyle Hayes


Bazı (uzak) sunucular "varsayılan" dalı silmeyi reddeder (Github'da durum böyledir). Bu nedenle, işlemlerin zamanı için başka bir "varsayılan" dal seçmek için sunucuya gitmeniz gerekebilir ... Github'da bu "dal" görünümünde yapılabilir.
jehon

Yanıtlar:


141
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

Lütfen, GitHub kullanıyorsanız , 3. adımdan sonra GitHub'daki "varsayılan" dalınızı değiştirmeniz gerekeceğini unutmayın :

Github.com adresindeki deponuzda AyarlarDallarVarsayılan Dallara gidin . Serbest bırakmak için değiştirin ve ardından geri kalan adımları uygulayın.


3
Ben git itme --delete çalıştığınızda, aşağıdaki hatayı alıyorum: Geçerli dalı silinmesi yasaktır
Kyle Hayes

8
Github veya benzeri bir şey kullanıyorsanız, varsayılan dalı başka bir şey yapmanız gerekir: matthew-brett.github.com/pydagogue/gh_delete_master.html veya sadece master'ı orada bırakın ve görmezden gelin .
Adam Dymitruk

Evet, korkunç bir örneğimiz var. Bunun bir seçenek olup olmadığına bakalım.
Kyle Hayes

Gitorious kancalar ana şube silinmesini korusun taahhüt gibi görünüyor - görebildiğim sebepsiz: /
FGE

1
Aynı ! [remote rejected] branch (deletion of the current branch prohibited) şey Bitbucket ile de olacak. Ayarlar ekranında (dişli simgesinin altında) "Ana Depo"
yu değiştirin

13

Ana şubenize göz atın

git checkout master

Sürüm şubenizi oluşturun ve ona geçin:

git branch release
git checkout release

Bunu sunucuya gönder

git push origin release

Sunucudaki ana dal referansını silin

git push origin :master

Yerel ana dalı silin

git branch -d master

2
Bu adımlarla, yukarıda bahsettiğimle aynı hatayla karşılaşacağımı söyleyebilirim.
Kyle Hayes

@KyleHayes Bu, sunucunun bir yapılandırma sorunu. Varsayılan olarak bu şekilde olsa da, bunu değiştirme işlemi kullanıcı tarafından görülebilir veya Stackoverflow'da kolayca keşfedilebilir
Jeff Ferland

Bir şubeyi silmeden önce başka bir şubeye geçmelisiniz.
Martine

5

Not: Bu yanıt, komut satırı erişiminizin olduğu kendi kendine barındırılan Git sunucuları için tasarlanmıştır.

remote masterBir istemciden silmeye çalışmak gerçekten izin verilmediğinden ve yasaklamanın denyDeleteCurrentmantıklı olduğunu varsaydığım için bu ayarı değiştirmek istemiyorum.

Ancak, uzak sunucuya komut satırı erişiminiz varsa ana sunucunuzu yeniden adlandırmanın en kolay yolunun yeniden adlandırma komutunu doğrudan uzaktan çalıştırmak olduğunu buldum .

Bu benim için çalıştı:

  1. Uzak git sunucusuna SSH üzerinden giriş yapın
  2. Projenizin xxx.git klasörüne gidin
  3. Çalıştırmak: git branch -m master release

Artık uzak depo release, varsayılan dalı olarak kullanır ve git clonebu depodaki herhangi bir istemciden herhangi biri varsayılan olarak yayın şubesini teslim alır.

İhtiyaçlarınıza göre yapılandırmak için çıplak bir depo kurduktan sonra da çok yararlıdır.


3

Başkaları tarafından daha önce belirtildiği gibi, buradaki sorun Gitorious'dur ve varsayılan olarak HEAD dalını silmenize izin vermez. Bu sorunu aşmak için iki seçeneğiniz var. Biri Gitorious sunucuda (ssh ile) oturum açmak, dosya sunucusunda Git deposunu bulmak ve şunu eklemek:

[receive]
        denyDeleteCurrent = warn

konfigürasyona.

Daha kolay bir seçenek, sadece varsayılan şubeyi değiştirmektir. Gitorious web arayüzünde deponuza gidin, "Depoyu düzenle" ye basın ve "Head, Git deposundaki HEAD'in sembolik referansını şu şekilde değiştirin:" seçeneğini ayarlayın. Bunu yaptıktan sonra ana dalı silebilirsiniz.


2

GitHub ile bu sorunla karşılaşırsanız , uzaktaki dalı silene kadar yukarıdaki adımları uygulayın. Bunu yapmana izin vermeyecek. Ardından Web arayüzünde oturum açın ve bilgi havuzunda AyarlarDallarVarsayılan Dallara gidin . Bunu yeni dala değiştirin ve kalan adımları uygulayın.


1

İdeal olarak, izlemeyi kurmak istiyorsanız, şunu yapın:

git push origin HEAD:release
git checkout --track origin/release

Şimdi, diğerlerini silmek istiyor musun?

git branch -d master
git push origin :master

Basit!


Git push origin: master komutuna geldiğimde @ Adam'ın yorumunda yayınladığım hatayla aynı hatayı aldım.
Kyle Hayes

0

Dalları yeniden adlandırmayı bitirdiğiniz için, HEAD'i releaseuzaktan

git remote set-head origin release

Sonra masteruzaktaki şubeyi silmek için, en azından GitHub'da yönetici olmanız gerekir. Daha fazla bilgi için lütfen bu gönderiye bakın .


0

Git 2.28'den itibaren (27 Temmuz 2020'de yayınlandı), artık yeni bir depo açtığınızda oluşturulan şubenin adını yapılandırabilirsiniz:

$ git config --global init.defaultBranch main

Bu değişkeni ayarladıktan sonra git init'i çalıştırmak, ilk dalı main olan bir depo oluşturacaktır:

$ git init

/Home/thomas/test-git-repo/.git/ içinde başlatılmış boş Git deposu $ git status Ana dalda

Henüz kaydetme yok

işlenecek bir şey yok (dosyaları oluşturun / kopyalayın ve izlemek için "git add" kullanın) Sürüm notları: https://lore.kernel.org/git/xmqq5za8hpir.fsf@gitster.c.googlers.com/

cc Kiley

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.