Jak mogę utworzyć repozytorium Git z domyślną nazwą gałęzi inną niż „ master
”?
Użyłbyś Git 2.28 (Q3 2020): nazwa głównej gałęzi w istniejących repozytoriach i domyślna nazwa używana dla pierwszej gałęzi w nowo utworzonych repozytoriach jest konfigurowalna, dzięki czemu możemy ostatecznie odzwyczaić się od zakodowanego na stałe 'master
”.
I przypomnienie z sierpnia 2020 r. Z GitHub :
Jeśli 1 października 2020 r. Nie zmienisz domyślnej gałęzi dla nowych repozytoriów dla użytkownika, organizacji lub przedsiębiorstwa, zmieni się ona automatycznie z master
namain
.
Możesz zrezygnować z tej zmiany w dowolnym momencie:
- Dla użytkowników na https://github.com/settings/repositories stronie
- W przypadku właścicieli organizacji w
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
stronie
- Dla administratorów firmowych, na
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges
stronie
Ta zmiana jest jedną z wielu zmian, które GitHub wprowadza, aby wspierać projekty i opiekunów, którzy chcą zmienić nazwę swojej domyślnej gałęzi.
Aby dowiedzieć się więcej o zmianach, które wprowadzamy, odwiedź github / renaming .
Ale wracając do samego Gita: (2.28, III kw.2020 ) Zobacz commit 508fd8e (29 czerwca 2020) autorstwa Đoàn Trần Công Danh ( sgn
) .
Zobacz zatwierdzenie 0068f21 , zatwierdzenie a471214 , zatwierdzenie 0cc1b47 , zatwierdzenie 32ba12d , zatwierdzenie 6069ecc , zatwierdzenie f0a96e8 , zatwierdzenie 4d04658 (24 czerwca 2020) i zatwierdzenie 489947c (23 czerwca 2020) autorstwa Johannesa Schindelina ( dscho
) .
Zobacz zatwierdzenie 8747ebb (24 czerwca 2020) autorstwa Don Goodman-Wilson ( DEGoodmanWilson
) .
(Scalone przez Junio C Hamano - gitster
- incommit 11cbda2 , 06 lipca 2020)
init
: zezwól na określenie początkowej nazwy gałęzi dla nowego repozytorium
Podpisał: Johannes Schindelin
Coraz więcej projektów i firm chce zmienić główną branżową nazwę swoich repozytoriów (patrz np. Tweet Mislav Marohnić ).
Aby zmienić nazwę tej gałęzi dla nowych repozytoriów, obecnie jedynym sposobem, aby zrobić to automatycznie, jest skopiowanie całego katalogu szablonów Gita, następnie wkodowanie żądanej domyślnej nazwy gałęzi do .git/HEAD
pliku, a następnie skonfigurowanieinit.templateDir
aby wskazywało na te skopiowane pliki szablonów.
Aby uczynić ten proces znacznie mniej uciążliwy, niech wprowadzi nową opcję: --initial-branch=<branch-name>
.
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
I:
init
: pozwala na ustawienie domyślnej nazwy początkowej gałęzi poprzez plik config
Pomoc: Johannes Schindelin
Pomoc: Derrick Stolee
Podpisanie: Don Goodman-Wilson
Właśnie wprowadziliśmy opcję wiersza poleceń, --initial-branch=<branch-name>
aby umożliwić inicjalizację nowego repozytorium z inną początkową gałęzią niż ta zakodowana na stałe.
Aby umożliwić użytkownikom bardziej trwałe nadpisywanie początkowej nazwy gałęzi (tj. Bez konieczności ręcznego określania nazwy dla każdego git init
wywołania), wprowadźmy init.defaultBranch
ustawienie konfiguracyjne.
Uwaga: zatwierdzenie 489947c , dotyczące komunikatu o zatwierdzeniu przez scalanie, zostało cofnięte w Git 2.29, zobacz " Jak mogę dostosować komunikat zatwierdzenia przez git? ". Ustawienie pozostaje.
init.defaultBranch
Ma to wpływ na moduły podrzędne:
submodule
: cofnij się do HEAD pilota w celu wykrycia brakującej gałęzi pilota
Pomoc: Philippe Blain
Podpisał: Johannes Schindelin
Gdy remote.<name>.branch
nie jest skonfigurowany, git submodule update
obecnie wraca do używania nazwy gałęzi master
.
O wiele lepszym pomysłem jest jednak użycie pilota HEAD
: na wszystkich serwerach Git, na których działają stosunkowo najnowsze wersje Gita, symref HEAD
wskazuje na główną gałąź.
Uwaga: t7419 pokazuje, że mogą istnieć przypadki użycia, które oczekują git submodule update --remote
aktualizacji podmodułów do zdalnej master
gałęzi, nawet jeśli zdalna HEAD
wskazuje na inną gałąź.
Prawdopodobnie ta poprawka sprawia, że zachowanie jest bardziej intuicyjne, ale istnieje niewielkie prawdopodobieństwo, że może to spowodować regresję w niejasnych konfiguracjach.
Mimo to powinno być w porządku, aby naprawić to zachowanie bez dłuższego okresu przejściowego:
git submodule update --remote
Komenda nie jest to powszechne.
- Bieżące zachowanie Gita podczas uruchamiania tego polecenia jest całkowicie mylące, chyba że bieżąca gałąź zdalnego repozytorium to
master
(w takim przypadku proponowane zachowanie pasuje do starego zachowania).
- Jeśli użytkownik napotka regresji związku ze zmianą zachowań, poprawka jest właściwie banalna: ustawienie
submodule.<name>.branch
, aby master
przywróci stary zachowanie.
Zauważ, że w Git 2.29 (Q4 2020) testy w programie contrib/
są dostosowywane do ostatniej zmiany wfmt-merge-msg
.
Zobacz commit b87528c (03 sierpnia 2020) autorstwa Emily Shaffer ( nasamuffin
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 83b8250 , 10 sierpnia 2020 r.)
Revert "contrib
:: subtree
dostosuj test, aby zmienić fmt-merge-msg
„
Podpisał: Emily Shaffer
To przywraca zatwierdzenie 508fd8e8baf3e18ee40b2cf0b8899188a8506d07 .
W 6e6029a8 ( fmt-merge-msg
: zezwalaj na ponowne pominięcie miejsca docelowego scalania) otrzymujemy zachowanie, w którym łączy się z ' master
', domyślnie nie dołącza się znaku „ into 'master'
” na końcu wiadomości łączenia. Ta poprawka testowa nie jest już potrzebna.
Również:
W Git 2.29 (Q4 2020) zaktualizuj testy, aby usunąć master
z nich słowo „ ”.
Zobacz commit f33f2d3 , commit b6211b8 (26 września 2020) i commit 432f5e6 , commit 5a0c32b , commit 659288c (21 września 2020) autor: Johannes Schindelin ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 58138d3 , 05 października 2020 r.)
tests
: unikaj zmian w master
nazwie gałęzi
Podpisał: Johannes Schindelin
Termin master
ten ma ładną historię, która nieustannie przypomina o niesprawiedliwości rasowej. Projekt Git nie ma zamiaru tego utrwalać i już zaczął tego unikać.
Zestaw testów używa odmian tej nazwy dla gałęzi innych niż domyślna. Oprócz t3200, gdzie właśnie zajęliśmy się tym w poprzednim zatwierdzeniu, nazwy tych instancji można zmienić w sposób zautomatyzowany, ponieważ nie wymagają one żadnych zmian poza skryptem testowym, więc zróbmy to.
Widząc, że dotknięte gałęzie mają bardzo niewiele (jeśli cokolwiek) wspólnego z gałęzią domyślną, zdecydowaliśmy się na użycie całkowicie oddzielnego schematu nazewnictwa: topic_<number>
(nie może tak być, topic-<number>
ponieważ t5515 używa test_oid
maszyny z terminem, a maszyna używa wewnętrznie zmiennych powłoki, których nazwy nie mogą zawierać myślników).
Ta sztuczka została wykonana przez to wywołanie seda (GNU):
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
I nadal z Git 2.29:
Zobacz commit 538228e , commit a15ad5d (08 października 2020) autorstwa Johannesa Schindelina ( dscho
) .
(Scalenie przez Junio C Hamano -gitster
- w zatwierdzeniu 62564ba , 08 października 2020 r.)
t1415
: unikaj używania main
jako nazwy referencyjnej
Podpisał: Johannes Schindelin
W ramach przygotowań do serii poprawek, która zmieni rozwiązanie awaryjne dla init.defaultBranch
na main
, nie main
używajmy nazwy referencyjnej w tym skrypcie testowym.
W przeciwnym razie (git for-each-ref ... | grep main
mężczyzna ), który chce złapać te referencje, również by się nieoczekiwanie złapałrefs/heads/main
.
Ponieważ odnośniki są lokalnymi dla danego obszaru roboczego (tj. Każde drzewo robocze ma swoje własne, tak jak HEAD
), a przypadek testowy używa już dodatkowego drzewa roboczego o nazwie " second
", użyjmy nazwy "first
zamiast " dla tych odnośników.
W tym czasie dostosuj tytuły testów, które mówią o „repozytorium”, a zamiast tego oznaczają „drzewo robocze”.