Zmień Git remote HEAD aby wskazywał na coś poza master

Jak ustawić odniesienie do głowy Git remote 'a tak, aby wskazywało na coś poza "master"?

Mój projekt ma zasadę, aby nie używać gałęzi "master" (wszystkie gałęzie mają mieć sensowne nazwy). Co więcej, repozytorium główne canonical jest dostępne tylko przez ssh://, bez dostępu do powłoki (jak GitHub lub Unfuddle).

Mój problem polega na tym, że zdalne repozytorium nadal ma odniesienie HEAD do refs / heads / master, ale potrzebuję go, aby wskazać inną gałąź. Powoduje to dwa problemy:

  1. Podczas klonowania repo, jest to,

    Ostrzeżenie: zdalna Głowica odnosi się do nieistniejącego ref, nie można dokonać zakupu.

    To mylące i niewygodne.

  2. Internetowa przeglądarka kodu zależy od głowy jako podstawy do przeglądania drzewa. Muszę wskazać ważny oddział.

Author: random, 2009-09-28

10 answers

Było prawie to samo pytanie na Githubie rok temu.

Pomysł polegał na zmianie nazwy gałęzi master:]}
git branch -m master development
git branch -m published master
git push -f origin master 

Aby mistrz miał to, czego chcesz, aby ludzie używali, i wykonywali wszystkie inne prace w gałęziach.

W tym samym roku, w 2010 roku, w Polsce, w Polsce i za granicą, w 2011 roku, w Polsce i za granicą.]}

Jest to podobne do " Jak usunąć origin / master w Git ".


Jak napisano w ten wątek : (podkreślenie moje)

"git clone" tworzy tylko jedną gałąź lokalną.
Aby to zrobić, przegląda HEAD ref zdalnego repo i tworzy lokalną gałąź o tej samej nazwie, do której się odwołuje.

Więc aby to zakończyć, musisz repo A i sklonować:

  • HEAD referencje refs/heads/master i że istnieje
    - >dostajesz lokalną gałąź o nazwie master, zaczynającą się od origin / master

  • HEAD reference refs/heads/anotherBranch and that exists
    - >dostajesz oddział lokalny o nazwie anotherBranch, począwszy od origin/anotherBranch

  • HEAD referents refs/heads/master and that doesn ' t exist
    - >"git clone" narzeka

Nie wiem, czy jest jakiś sposób, aby bezpośrednio zmodyfikować HEAD ref w repo .

(o co chodzi w twoim pytaniu, wiem;))


może jedynym sposobem będzie "publikacja dla ubogich", gdzie:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

Ale to wymagałoby napisania dostęp do serwera, co nie zawsze jest możliwe.


Jak wyjaśniam w " Git: poprawny sposób zmiany aktywnej gałęzi w gołym repozytorium?", git remote set-head nic by nie zmieniło na zdalnym repo.

Zmieniłoby to tylko zdalną gałąź śledzenia przechowywaną lokalnie w Twoim lokalnym repo, w remotes/<name>/HEAD.

 59
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:57

Update: to działa tylko dla lokalnej kopii repozytorium ("klient"). Proszę zobaczyć komentarze innych poniżej.

W najnowszej wersji git (Luty 2014), poprawną procedurą byłoby:

git remote set-head $REMOTE_NAME $BRANCH

Więc na przykład, przełączenie głowicy na zdalnym {[1] } na branch develop byłoby:

git remote set-head origin develop

 39
Author: jrhorn424,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-05 17:33:36

Ponieważ wspominasz GitHub, aby to zrobić na ich stronie, po prostu wejdź do swojego projektu, a następnie...

admin > Default Branch > (choose something)

Zrobione.
 33
Author: srcspider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-22 06:30:47

Zobacz: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

Ustawia domyślną gałąź w repozytorium git. Można to uruchomić w repozytoriach gołych lub lustrzanych.

Użycie:

$ git symbolic-ref HEAD refs / heads /

 11
Author: mani-fresh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 16:08:54

(było już w zasadzie to samo pytanie " create a Git symbolic ref in remote repozytorium", które nie otrzymało uniwersalnej odpowiedzi.)

Ale istnieją konkretne odpowiedzi dla różnych "Farm" Gita (gdzie wielu użytkowników może zarządzać reposami Gita poprzez Ograniczony interfejs: poprzez http i ssh): http://Github.com, http://Gitorious.org, http://repo.or.cz, Girar (http://git.altlinux.org).

Te konkretne odpowiedzi może być przydatny dla tych, którzy czytają tę stronę i myślą o tych konkretnych usługach.

 9
Author: imz -- Ivan Zakharyaschev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 20:01:27

Jeśli masz dostęp do zdalnego repo z powłoki, po prostu wejdź do.git (lub główny katalog, jeśli jest to nagie repo) i zmień plik HEAD, aby wskazywał właściwą głowę. Na przykład, domyślnie zawsze zawiera 'refs: refs / heads/master', ale jeśli potrzebujesz foo, aby być głową, po prostu edytuj plik HEAD i zmień zawartość na 'refs: refs/heads / foo'.

 6
Author: squeegee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-03 16:24:00

Możesz utworzyć oddzielną gałąź master używając tylko poleceń Git:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

To daje nam master gałąź z niegrzeczną wiadomością (możesz chcieć być bardziej uprzejmy). Teraz tworzymy naszą" prawdziwą " gałąź (nazwijmy ją trunk na cześć SVN) i rozdzielamy ją od master :

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"
Hej, presto! gitk -- wszystkiepokażą masteri trunk bez powiązania między nimi.

"magia" polega na tym, że --amendpowoduje, że git commit tworzy nowy commit z tym samym rodzicem co bieżąca głowa, a następnie wskazuje na niego HEAD. Ale bieżąca głowica nie ma rodzica, ponieważ jest to początkowy commit w repozytorium, więc nowa głowica też go nie otrzymuje, co sprawia, że są one od siebie oddzielone.

Stary commit HEAD nie jest usuwany przez git-gc ponieważ refs/heads/master nadal na niego wskazuje.

Znacznik --allow-empty jest potrzebny tylko dlatego, że / align = "left" / Gdyby były jakieś git add's po git rm, to nie byłoby to konieczne.

Prawdę mówiąc, możesz utworzyć oddzieloną gałąź w dowolnym momencie, rozgałęziając początkowy commit w repozytorium, usuwając jego drzewo, dodając swoje oddzielone drzewo, a następnie wykonując git commit --amend.

Wiem, że to nie odpowiada na pytanie, jak zmodyfikować domyślną gałąź w zdalnym repozytorium, ale daje czystą odpowiedź na pytanie, Jak utworzyć odłączony branch.

 5
Author: kbro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-22 14:14:47

Najpierw Utwórz nową gałąź, którą chcesz ustawić jako domyślną, na przykład:

$>git branch main

Następnie przesuń gałąź do origin :

$>git push origin main

Teraz, kiedy logujesz się na swoje konto GitHub, możesz przejść do swojego repozytorium i wybrać Ustawienia>domyślna gałąź i wybrać " main ."

Następnie, jeśli tak zdecydujesz, możesz usunąć gałąź master:

$>git push origin :master

 2
Author: 4mnes7y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-21 18:05:38

Dla ludzi gitolite, gitolite obsługuje polecenie -- wait for it -- symbolic-ref. Pozwala na zdalne uruchomienie tego polecenia, jeśli masz uprawnienia w (write) do repo.

 0
Author: sitaram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-30 04:13:55

Proste po prostu zaloguj się na swoje konto GitHub i po prawej stronie w menu nawigacyjnym wybierz Settings, w zakładce Settings Wybierz default Branch i wróć do strony głównej swojego repozytorium, która mi pomogła.

 -1
Author: Matija,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 18:44:34