2013-07-09 11 views
5

Ho un progetto ospitato sul mio server git personale (non è su GitHub). Il ramo master è un vecchio cookie obsoleto e non ne ho più bisogno.Elimina il ramo principale git su un server privato (non GitHub)

Un paio di mesi fa ho creato un ramo 0.8/develop off di master e da allora siamo passati attraverso 0.8/master, 0.9/develop, 0.9/master e siamo attualmente in 1.0/develop. Mi piacerebbe sbarazzarsi del ramo master, principalmente perché non corrisponde alla convenzione di denominazione che abbiamo stabilito. È solo una questione di pulizie.

ho trovato diverse domande correlate sul SO, così come un post sul blog, ma tutti sembrano essere specifico da utilizzare di GitHub, e non il mio server privato:

Questi sia specificamente dire qualcosa per l'effetto di:

You need to go to the main GitHub page for your forked repository, and click on the 'Settings' button.

Ovviamente, questa non è un'opzione in quanto non sto utilizzando GitHub. Sto indovinando che posso modificare il contenuto del file di configurazione nel mio repository per ottenere gli stessi risultati. È corretto? Il file di configurazione attualmente simile a questo:

[core] 
     repositoryformatversion = 0 
     filemode = true 
     bare = true 
     logallrefupdates = true 
     ignorecase = true 
     precomposeunicode = false 
     sharedRepository = group 
[remote "origin"] 
     url = file:///Library/WebServer/Documents/loupe 
     fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
     remote = origin 
     merge = refs/heads/master 

Ho due domande:

  1. Devo impostare il mio repo di default al mio ramo corrente di funzionamento (1.0/develop), o il ramo più antico che rimane (0.8/develop) ?
  2. Quali modifiche devo apportare al file di configurazione per impostare il repository predefinito?
+0

'git push origine: master',' git prune remoto origin' – madhead

+0

@madhead remoto: Errore: per impostazione predefinita, l'eliminazione del ramo corrente viene negato, perché la prossima remoto: errore: 'git clone' non darà come risultato alcun file estratto, causando confusione. –

+0

Fondamentalmente stai cercando di fare qualcosa che non devi assolutamente fare. Basta lasciare il master obsoleto o tenerlo aggiornato, qualunque sia la tua scelta. Non c'è motivo di cancellarlo. –

risposta

7

Prima di decidere quale ramo deve essere il ramo predefinito quando il repository è clonato. Presumo new_master per questo esempio.

Su uno dei client creare il ramo new_master nel repository remoto, è possibile utilizzare qualsiasi cosa per master invece, ad es. un commit o un altro nome di ramo o saltare questo passaggio se si dispone già di un ramo adatto sul telecomando.

git push origin master:new_master 

Il passo successivo non può essere fatto da remoto, in modo da eseguire il comando nel repository remoto (ad esempio utilizzando SSH):

cd /path/to/my_git_repo 
git symbolic-ref HEAD refs/heads/new_master 

In alternativa, modificare il contenuto del file HEAD direttamente.

Torna sul client:

git fetch 
git remote show origin 

Dovreste vedere che le HEAD punti a new_master invece di master (o che HEAD è ambiguo se si imposta new_master essere master).Ora siamo in grado di rimuovere il vecchio maestro:

git push origin :master 

Git non dovrebbe lamentarsi più circa l'eliminazione. Infine, impostare il locale refs/remotes/origin/HEAD:

git remote set-head origin -a 
+0

Fantastico! Consiglieresti di scegliere il più vecchio '0.8/develop' o il più recente' 1.0/develop' come nuovo master ... o importa? –

+1

È solo il ramo che viene estratto quando qualcuno clona il repository per la prima volta. Il nostro 'master' /' HEAD' riflette lo stato attuale della produzione, mentre altri rami sono utilizzati per lo sviluppo attivo. Ma questo è solo il nostro flusso di lavoro. Impostalo su qualsiasi cosa si adatti al tuo flusso di lavoro. – nif

Problemi correlati