2013-07-09 15 views
5

Mam projekt hostowany na moim osobistym serwerze git (nie ma go na GitHub). Oddział master to nieaktualny stary plik cookie i już go nie potrzebuję.Usuń gałąź Git Master na prywatnym serwerze (nie GitHub)

Kilka miesięcy temu stworzyłem 0.8/develop oddział off master i od tamtej pory przeszedł 0.8/master, 0.9/develop, 0.9/master i jesteśmy obecnie na 1.0/develop. Chciałbym pozbyć się gałęzi master, głównie dlatego, że nie pasuje ona do konwencji nazewnictwa, którą ustaliliśmy. To tylko kwestia sprzątania.

Znalazłem kilka podobnych pytań na SO, a także na blogu, ale wszystkie one wydają się być specyficzne zastosowania GitHub, a nie mój własny prywatny serwer:

Są zarówno konkretnie powiedzieć coś do skutku:

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

Oczywiście nie jest to opcja, ponieważ nie używam GitHub. Zgaduję, że mogę edytować zawartość pliku konfiguracyjnego w moim nagim repo, aby osiągnąć te same wyniki. Czy to jest poprawne? Plik konfiguracyjny aktualnie wygląda tak:

[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 

Mam dwa pytania:

  1. powinienem ustawić domyślną repo do mojego obecnego oddziału roboczego (1.0/develop) albo najstarszej gałęzi, co pozostało (0.8/develop) ?
  2. Jakie modyfikacje należy wprowadzić w pliku konfiguracyjnym, aby ustawić domyślne repozytorium?
+0

'git wypychania pochodzenia: master',' git zdalnego prune origin' – madhead

+0

@madhead pilota: błąd: Domyślnie, usuwanie bieżącego oddział zostanie odrzucona, ponieważ następny pilota: error: "git clone" nie spowoduje wypisania żadnego pliku, co spowoduje zamieszanie. –

+0

Zasadniczo próbujesz zrobić coś, czego naprawdę nie musisz robić. Po prostu zostaw mistrza przestarzałego lub bądź na bieżąco, cokolwiek wybierzesz. Nie ma powodu, aby go usunąć. –

Odpowiedz

7

Najpierw należy zdecydować, który oddział powinien być domyślnym odgałęzieniem po sklonowaniu repozytorium. W tym przykładzie zakładam new_master.

Na jednym z klientów utwórz gałąź new_master w repozytorium zdalnym, możesz zamiast tego użyć dowolnego elementu dla master, np. zatwierdzenie lub inną nazwę oddziału lub pomiń ten krok, jeśli masz już odpowiednią gałąź na pilocie.

git push origin master:new_master 

Następnym krokiem nie można zrobić ze zdalnego, więc wykonanie polecenia w zdalnym repozytorium (na przykład za pomocą SSH):

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

Ewentualnie zmienić zawartość pliku HEAD bezpośrednio.

Powrót na kliencie:

git fetch 
git remote show origin 

Powinieneś zobaczyć, że HEAD wskazuje new_master zamiast master (lub HEAD jest niejednoznaczne jeśli ustawisz new_master być master).Teraz możemy usunąć starego mistrza:

git push origin :master 

Git nie powinien już narzekać na skasowanie. Wreszcie, należy ustawić lokalną refs/remotes/origin/HEAD:

git remote set-head origin -a 
+0

Awesome! Czy radziłbyś wybrać starszą '0.8/develop' lub nowszą' 1.0/develop' jako nowego mistrza ... czy to ma znaczenie? –

+1

To tylko gałąź, która jest sprawdzana, gdy ktoś po raz pierwszy sklonuje repozytorium. Nasze 'master' /' HEAD' odzwierciedla bieżący stan produkcji, podczas gdy inne gałęzie są używane do aktywnego rozwoju. Ale to tylko nasz przepływ pracy. Ustaw to, co pasuje do Twojego przepływu pracy. – nif

Powiązane problemy