Come faccio a rinominare il mio ramo "master" di Git in "release"?


115

Vorremmo imporre una nuova politica per i nostri progetti che il ramo master ora venga chiamato ramo di rilascio per garantire che sia più chiaro come deve essere utilizzato il ramo. Naturalmente avremo anche lo sviluppo e il rilascio di branch candidati.

Capisco che posso rinominare il ramo principale localmente semplicemente usando quanto segue:

git branch -m master release

Tuttavia, questo è solo a livello locale. Anche se lo spingo fino al telecomando, HEAD punta ancora al ramo master remoto. Voglio eliminare completamente il ramo principale e rendere il ramo locale predefinito al momento del clone iniziale, essere rilasciato.

Come posso raggiungere questo obiettivo?

Sembra che poiché l'origine è su un server Gitorious , ottengo errori durante l'eliminazione del ramo principale. Sto cercando di vedere ora se è possibile modificare questo in modo che il ramo predefinito sia "release".


2
Eh, abbastanza giusto. Il valore a lungo termine è abbastanza alto da provare almeno.
Kyle Hayes


Alcuni server (remoti) si rifiutano di eliminare il ramo "predefinito" (è il caso di Github). Quindi forse hai bisogno di andare sul server per scegliere un altro ramo "predefinito" per il tempo delle operazioni ... Su Github, questo può essere fatto nella vista "ramo".
jehon

1
git branchora supporta una --movebandiera git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Risposte:


139
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

Tieni presente che se utilizzi GitHub dovrai prima modificare il ramo "predefinito" su GitHub dopo il passaggio 3:

Nel tuo repository su github.com vai su ImpostazioniBranchesDefault Branch . Modificalo per rilasciare e poi esegui il resto dei passaggi.


3
Quando provo a git push --delete, ottengo il seguente errore: eliminazione del ramo corrente vietata
Kyle Hayes

8
Stai usando github o qualcosa di simile, devi rendere il ramo predefinito qualcos'altro: matthew-brett.github.com/pydagogue/gh_delete_master.html o semplicemente lasciare master lì e ignorarlo.
Adam Dymitruk

Sì, abbiamo un'istanza gitoria. Fammi vedere se è un'opzione.
Kyle Hayes

Sembra che gli hook di commit 'gitorious' vietino la cancellazione del ramo master - per nessun motivo che possa vedere: /
fge

1
Lo stesso ! [remote rejected] branch (deletion of the current branch prohibited) accadrà con Bitbucket. Cambia "Repository principale" nella schermata delle impostazioni (sotto l'icona dell'ingranaggio).
dnfehren,

13

Controlla il tuo ramo principale

git checkout master

Crea il tuo ramo di rilascio e passa ad esso:

git branch release
git checkout release

Invialo al server

git push origin release

Elimina il riferimento del ramo principale sul server

git push origin :master

Elimina il ramo principale locale

git branch -d master

2
Posso dire da questi passaggi che incorrerò nello stesso errore che ho menzionato sopra.
Kyle Hayes

@KyleHayes Questo è un problema di configurazione del server. Sebbene sia in questo modo per impostazione predefinita, il processo di modifica dovrebbe essere evidente all'utente o facilmente individuabile su Stackoverflow
Jeff Ferland

Devi passare a un altro ramo prima di poter eliminare un ramo.
martinedwards

5

Nota: questa risposta è destinata ai server Git ospitati autonomamente in cui si dispone dell'accesso alla riga di comando.

Dal momento che tentare di eliminare il remote masterda un client in effetti non è consentito e presumo che vietare denyDeleteCurrentabbia senso, non vorrei modificare tale impostazione.

Tuttavia, ho scoperto che il modo più semplice per rinominare il tuo master se e solo se hai accesso dalla riga di comando al server remoto è eseguire il comando rename direttamente sul telecomando.

Questo ha funzionato per me:

  1. Accedi tramite SSH al server git remoto
  2. Vai alla cartella xxx.git del tuo progetto
  3. correre: git branch -m master release

Ora il repository remoto utilizza releasecome ramo predefinito e qualsiasi altro git clonesu quel repository da qualsiasi client controllerà il ramo di rilascio per impostazione predefinita.

È molto utile anche dopo aver impostato un repository nudo per configurarlo in base alle proprie esigenze.


3

Come affermato in precedenza da altri, il problema qui è Gitorious, che non ti consente di eliminare il ramo HEAD per impostazione predefinita. Hai due opzioni per aggirare questo problema. Uno è accedere al server Gitorious (con ssh), trovare il repository Git sul file server e aggiungere:

[receive]
        denyDeleteCurrent = warn

alla configurazione.

Un'opzione più semplice è semplicemente cambiare il ramo predefinito. Vai al tuo repository nell'interfaccia web Gitorious, premi "Modifica repository" e imposta "Head Cambia il riferimento simbolico che HEAD nel repository Git punta a:". Dopo averlo fatto, puoi eliminare il ramo principale.


2

Se riscontri questo problema con GitHub , esegui i passaggi fino a eliminare il ramo in remoto. Non ti permetterà di farlo. Quindi accedi all'interfaccia Web e nel repository vai su ImpostazioniRamiRamo predefinito . Cambialo nel nuovo ramo e fai il resto dei passaggi.


1

Idealmente, vuoi impostare il monitoraggio, quindi fai questo:

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

Ora, vuoi eliminare gli altri?

git branch -d master
git push origin :master

Semplice!


Ho ricevuto lo stesso errore di quello che ho pubblicato nel commento di @ Adam quando sono arrivato al comando git push origin: master.
Kyle Hayes

0

Dato che hai finito di rinominare i rami, impostare HEAD su releaseper remoto

git remote set-head origin release

Quindi per eliminare il masterramo in remoto, dovresti essere l'amministratore, almeno su GitHub. Fare riferimento a questo post per ulteriori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.