Jak ustawić odwołanie HEAD pilota Git tak, aby wskazywało na coś innego niż „master”?
W moim projekcie obowiązuje zasada nieużywania gałęzi „master” (wszystkie gałęzie mają mieć zrozumiałe nazwy). Co więcej, kanoniczne repozytorium główne 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 wskazywał na inną gałąź. Powoduje to dwa problemy:
Podczas klonowania repozytorium
ostrzeżenie: zdalne HEAD odnosi się do nieistniejącego ref, niezdolnego do pobrania.
To zagmatwane i niewygodne.
Internetowa przeglądarka kodu opiera się na HEAD jako podstawie przeglądania drzewa. W takim razie potrzebuję HEAD, aby wskazać prawidłową gałąź.
źródło
Odpowiedzi:
Prawie to samo pytanie pojawiło się rok temu na GitHubie .
Pomysł polegał na zmianie nazwy gałęzi głównej:
(„
git-symbolic-ref HEAD refs/head/published
” nie zostanie przeniesiony do zdalnego repozytorium)Jest to podobne do „ Jak usunąć źródło / wzorzec w Git ”.
Jak powiedziano w tym wątku : (moje podkreślenie)
(co jest sednem twojego pytania, wiem;))
Może jedynym sposobem byłaby „publikacja dla biednych” , w której:
Ale wymagałoby to dostępu do zapisu na serwerze, co nie zawsze jest możliwe.
Jak wyjaśniam w „ Git: poprawny sposób zmiany Active Branch w czystym repozytorium? ”,
git remote set-head
Nie zmieniłbym niczego w zdalnym repozytorium.Zmieniłoby to tylko gałąź zdalnego śledzenia przechowywaną lokalnie w lokalnym repozytorium w
remotes/<name>/HEAD
.źródło
-f
(--force
). Odpowiednio zredagowałem odpowiedź. Następnie odpowiedź, o której mowa, używa tej samej opcji.Aktualizacja: Działa to tylko w przypadku lokalnej kopii repozytorium („klient”). Zobacz komentarze innych poniżej.
W najnowszej wersji git (luty 2014) poprawna procedura wyglądałaby tak:
git remote set-head $REMOTE_NAME $BRANCH
Na przykład przełączenie głowicy ze zdalnego
origin
na gałąźdevelop
wyglądałoby tak:git remote set-head origin develop
źródło
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Możesz wtedy sprawdzić lokalne zmiany za pomocącat .git/refs/remotes/origin/HEAD
(powinno byćref: refs/remotes/origin/default
), a brak zmian zdalnych za pomocągit remote show origin
(nadal będzie to, czym było przed dodaniem domyślnej gałęzi).Skoro wspominasz o GitHubie, aby zrobić to na ich stronie, po prostu wejdź do swojego projektu, a następnie ...
admin > Default Branch > (choose something)
Gotowe.
źródło
Zobacz: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
To ustawia domyślną gałąź w repozytorium git. Możesz uruchomić to w czystych lub lustrzanych repozytoriach.
Stosowanie:
źródło
(Istniało już w zasadzie to samo pytanie „ utwórz symboliczny odnośnik git w zdalnym repozytorium ”, na które nie było uniwersalnej odpowiedzi).
Ale są konkretne odpowiedzi dla różnych „farm” git (gdzie wielu użytkowników może zarządzać repozytoriami git przez ograniczony interfejs: przez http i ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Te konkretne odpowiedzi mogą być przydatne dla osób czytających tę stronę i myślących o tych konkretnych usługach.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
na przykład,ssh git.alt default-branch packages/autosshd.git sisyphus
aby zmienić HEAD w zdalnym repozytorium,autosshd.git
aby wskazywał nasisyphus
gałąź.źródło
Jeśli masz dostęp do zdalnego repozytorium z powłoki, po prostu przejdź do .git (lub głównego katalogu, jeśli jest to nagie repozytorium) i zmień plik HEAD, aby wskazywał na właściwą głowę. Na przykład, domyślnie zawsze zawiera „refs: refs / heads / master”, ale jeśli chcesz zamiast tego foo być HEAD, po prostu edytuj plik HEAD i zmień zawartość na „refs: refs / heads / foo”.
źródło
myrepo.git
. Zawartość pliku HEAD w podanym katalogu została zmieniona zref: refs/heads/master
naref: refs/heads/mainline
. Teraz, kiedy próbuję sklonować repozytorium na mojej lokalnej skrzynce, nadal wskazuje na master. Uruchomiłemgit clone ssh://[email protected]/myrepo
polecenie. Jakiś pomysł na takie zachowanie?git version 1.7.1
& Wersja klienta Git:git version 1.9.4.msysgit.2
Możesz utworzyć odłączoną gałąź główną używając tylko porcelanowych poleceń Git:
To daje nam główną gałąź z niegrzeczną wiadomością (możesz być bardziej uprzejmy). Teraz tworzymy naszą "prawdziwą" gałąź (nazwijmy ją pnia na cześć SVN) i oddzielamy ją od mistrza :
Cześć Presto! gitk - wszystkie pokażą master i trunk bez połączenia między nimi.
„Magia” polega na tym, że --amend powoduje, że git commit tworzy nowy commit z tym samym rodzicem, co obecny HEAD, a następnie wskazuje HEAD na to. Ale obecny HEAD nie ma rodzica, ponieważ jest to początkowe zatwierdzenie w repozytorium, więc nowy HEAD też go nie otrzymuje, co powoduje ich odłączenie od siebie.
Stare zatwierdzenie HEAD nie jest usuwane przez git-gc, ponieważ refs / heads / master wciąż na to wskazuje.
Flaga --allow-empty jest potrzebna tylko dlatego, że zatwierdzamy puste drzewo. Gdyby po git rm były jakieś dodatki git, nie byłoby to konieczne.
Prawdę mówiąc, możesz utworzyć odłączoną gałąź w dowolnym momencie, rozgałęziając początkowe zatwierdzenie w repozytorium, usuwając jego drzewo, dodając odłączone 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 jasną odpowiedź, jak utworzyć odłączoną gałąź.
źródło
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
doda nową gałąź,detached-branch
która pasuje do gałęziremote-branch-name
w zdalnymgit:[email protected]:foo
. Oczywiście „zdalne” może być repozytorium w lokalnym systemie plików, które wcześniej przygotowałeś.Najpierw utwórz nową gałąź, którą chcesz ustawić jako domyślną, na przykład:
$>git branch main
Następnie wepchnij tę gałąź do początku :
$>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ć „ główne ”.
Następnie, jeśli wybierzesz, możesz usunąć gałąź główną:
$>git push origin :master
źródło
git symbolic-ref
na zdalnej powłoce lub w inny sposób zmodyfikować plik tekstowy wywoływanyHEAD
w katalogu głównym zdalnego repozytorium.W związku z pytaniem znalazłem się tutaj podczas wyszukiwania:
Jak powiadomić lokalne repozytorium o zmienionej domyślnej gałęzi w serwisie GitHub
Dla kompletności, dodając odpowiedź:
źródło
Dla ludzi gitolite, gitolite obsługuje polecenie o nazwie - czekaj na to -
symbolic-ref
. Pozwala na zdalne uruchomienie tego polecenia, jeśli masz uprawnienia W (zapis) do repozytorium.źródło
Po prostu zaloguj się na swoje konto GitHub i po prawej stronie w menu nawigacyjnym wybierz Ustawienia , w zakładce Ustawienia wybierz Oddział domyślny i wróć do strony głównej repozytorium, które mi się udało.
źródło