Próbuję zautomatyzować proces i wydam git branch
polecenie, aby dowiedzieć się, w której gałęzi jestem. Wszystko działa dobrze, z wyjątkiem nowo zainicjowanego repozytorium, w którym git branch
nic nie zwraca. Biorąc pod uwagę, że nic nie zrobiłem z repozytorium, nawet początkowe zatwierdzenie, mogę zaakceptować odpowiedź. Jeśli jednak uruchomię, git status
to powie mi, że jestem na master
gałęzi, jak widać tutaj:
$ mkdir todelete
$ cd todelete
$ git init
Initialized empty Git repository in /u/u70021a/todelete/.git
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
$ git branch
$
czy robię coś źle? Czy jest jakieś ustawienie, którego nie ustawiłem poprawnie?
Mam też kilka nowych osób do Gita i nie mogę im wyjaśnić, dlaczego polecenie pokazujące, w której gałęzi się znajdują, nic nie pokazuje, ale polecenie statusu tak.
cat .git/HEAD
aby zobaczyć, w której gałęzi się znajduje, ustalenie, że gałąź istnieje, zużywa więcej procesora i czasu dysku, więc prawdopodobnie dlatego tego nie zrobiligit branch
w zautomatyzowanym procesie, ponieważ nie jest on przeznaczony do tego przypadku użycia. Byłoby interesujące zobaczyć, co pokazują tutaj polecenia inne niż porcelanowe, czygit symbolic-ref --short HEAD
mają takie samo zachowanie?git symbolic-ref
pokazuje nazwę zawartą wHEAD
(stąd odniesienie do gałęzi osieroconej / nienarodzonej), pod warunkiem, żeHEAD
nie jest ona odłączona. W nowym pustym repozytoriumHEAD
nie można odłączyć, ponieważ odłączony HEAD musi zawierać identyfikator skrótu istniejącego, prawidłowego zatwierdzenia. (W niepusty repozytorium z wolnostojącym PRZEWODNICZACEGO,git symbolic-ref
powoduje błąd.)git branch
nic nie pokazuje, ponieważ nie ma gałęzi. Ale, jak możesz przeczytać wman git init
:Pogrubiłem część, która moim zdaniem jest istotna - wygląda na to, że chociaż nie ma jeszcze gałęzi wzorcowej, odniesienie do niej już istnieje i dlatego jest pokazane w
git status
. Po zatwierdzeniu zostanie utworzona odpowiednia gałąź.źródło
Istniejące odpowiedzi odnoszą się do dosłownego pytania, dlaczego dane wyjściowe są tym, czym są, ale myślę, że w pewnym sensie zamknęły one prawdziwy problem ...
Powiedziałeś, że coś automatyzujesz, więc sugerowałbym, że ani
git status
niegit branch
jest to najlepsze narzędzie w kontekście skryptowania.W tej dyskusji można znaleźć kilka alternatyw: Jak programowo określić bieżącą pobraną gałąź Git
Nie znając twoich potrzeb (ani tego, jak chciałbyś, aby zachowywała się nienarodzona gałąź), niekoniecznie zalecam, ale chodzi mi o to, że niektóre polecenia są przeznaczone do interakcji z ludźmi (porcelana), a inne do skryptów ( instalacja wodociągowa)
źródło
Gałąź jeszcze się nie narodziła. Dlatego
git branch
nie pokazuje tego (git symbolic-ref HEAD
wskazuje, że HEAD wskazuje na domyślną gałąź master i że jest nienarodzony, ponieważgit branch
tego nie pokazuje, tj. Możesz być na gałęzi, która jeszcze nie istnieje). Jednak popełnienie czegoś spowoduje utworzenie gałęzi.Dzieje się tak również w przypadku płatności w
orphan
oddziale.Przypuszczam, że
git status
pokazuje nazwę gałęzi, ponieważ jest to gałąź, która zostanie utworzona.Aby uzyskać informacje na temat skryptów, zobacz Jak programowo określić bieżącą pobraną gałąź Git
źródło
W git domyślną gałęzią jest
master
. Kiedy zatwierdzisz, git "użyje" bieżącej gałęzi, na której jesteś teraz. Ponieważ zainicjowałeś nowe repozytorium, jesteś w "domyślnej" gałęzi i dlatego nie widzisz go na liście swoich gałęzi, pojawi się po zatwierdzeniu zmian.źródło