Używam następującego polecenia, aby dowiedzieć się, czy lokalna gałąź git branch-name
istnieje w moim repozytorium. Czy to jest poprawne? Czy jest lepszy sposób?
Pamiętaj, że robię to w skrypcie. Z tego powodu chciałbym użyć poleceń hydraulicznych, jeśli to możliwe.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
źródło
źródło
git branch | grep -w <branch-name>
. Ok, to polecenie z porcelany, ale nie wyobrażam sobie, aby ten konkretny sposób mógł ulec znacznej zmianie w przyszłości, aby uczynić ten fragment bezużytecznym ...git rev-parse --verify <branch_name>
weryfikuje również inne odwołania, takie jak tagi i zatwierdzanie skrótów, więc chociaż może być bardziej odpowiednie dla tego, czego potrzebujesz, zwróci fałszywie dodatnie, jeśli jesteś zainteresowany tylko gałęziami.Odpowiedzi:
O ile mi wiadomo, to najlepszy sposób, aby to zrobić w skrypcie. Nie jestem pewien, czy można dodać do tego znacznie więcej, ale równie dobrze może istnieć jedna odpowiedź, która mówi tylko: „To polecenie robi wszystko, co chcesz” :)
Jedyną rzeczą, na którą możesz uważać, jest to, że nazwy gałęzi mogą zawierać zaskakujące znaki, więc możesz zacytować
<branch-name>
.źródło
<branch-name>
. FWIW Używam tego w skrypcie tekstylnym. Będę pamiętać, aby zacytować zmienną.Kiedy szukam w wyszukiwarce hasła „sprawdź, czy gałąź istnieje”, ta strona jest pierwszą, którą widzę.
Dostaję to, czego chcę, ale chciałbym udzielić zaktualizowanej odpowiedzi, ponieważ oryginalny post pochodzi z 2011 roku.
Jest to zasadniczo to samo co zaakceptowana odpowiedź, ale nie trzeba wpisywać „refs / heads /”
źródło
git rev-parse --verify
informuje tylko, czy taki obiekt istnieje w repozytorium (tzn. Zwróci 0 dla dowolnej wartości,<branch_name>
która przekłada się na obiekt dowolnego typu w repo). Nie mówi ci, czy ten obiekt jest gałęzią, czy nie.Prawie na miejscu.
Wystarczy pominąć
--verify
a--quiet
i dostać albo hash jeśli oddział istnieje lub nic, jeśli tak nie jest.Przypisz ją do zmiennej i sprawdź, czy jest pusty ciąg.
źródło
Myślę, że możesz użyć
git show-branch
tutaj.Więc $? == 0 oznaczałoby, że gałąź istnieje i nie musisz w ogóle logować się w instalacjach refs / heads /. Dopóki nie przejdziesz
-r
do gałęzi show, będzie ona działać tylko w lokalnych oddziałach.źródło
git show-branch
to porcelana . Jak powiedziałem w moim pytaniu, wolałbym nie używać porcelanowych poleceń w skrypcie, jeśli dostępne są ekwiwalenty hydrauliczne. Zobacz kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
lubgit show-branch refs/remotes/origin/[branch]
.Polecam
git show-ref --quiet refs/heads/$name
.--quiet
oznacza, że nie ma danych wyjściowych, co jest dobre, ponieważ wtedy można dokładnie sprawdzić status wyjścia.refs/heads/$name
limity do lokalnych oddziałów i dopasowuje pełne nazwy (w przeciwnymdev
razie pasowałybydevelop
)Użycie w skrypcie:
źródło
Do użycia w skrypcie:
Wyjdzie to
0
wtedy i tylko wtedy<branch-name>
, gdy istnieje jako oddział lokalny.Przykład:
źródło
W skrypcie wsadowym systemu Windows jest nieco inaczej,
źródło
Nazwijmy to
git is_localbranch
(musisz dodać alias.gitconfig
).Stosowanie:
Źródło:
źródło
Wynik przeglądu mojej „Sugerowanej edycji” do „Aktualizacji” w początkowym pytaniu brzmiał: „Powinien być napisany jako komentarz lub odpowiedź”, więc zamieszczam go tutaj:
Drugi zaproponowany sposób nie tylko zweryfikuje gałęzie, ale wszelkie odniesienia o takiej nazwie @jhuynh .
Wyjaśnienie problemu z „aktualizacją” pierwszego pytania:
Załóżmy i sprawdźmy, że „master.000” jest tylko znacznikiem, taka lokalna gałąź nie istnieje, grep zwraca jeden wpis, który jest znacznikiem. Nadal analiza składni zwróci 0, jeśli istnieje odwołanie, nawet jeśli taka lokalna gałąź nie istnieje. To jest fałszywe dopasowanie, dokładnie tak jak wspomniano w @ paul-s
źródło
źródło
Tak, jest jeden.
Zobacz https://git-scm.com/docs/git-rev-parse, gdzie można znaleźć zestaw argumentów i funkcję.
źródło
Ani
git show-ref
niegit rev-parse
działa w mojej sprawie.Skończyło się na tym
Możesz to zrobić również za pomocą pliku skryptu
źródło
Jeśli potrafisz dołączyć grep.
źródło
grep
jako metaznak.abc
dopasuje, jeśli istnieje gałąź o nazwieabcdef
.Do użycia w skrypcie polecam następujące polecenie:
Pamiętaj, że
<repo_url>
może to być po prostu „.” aby określić repozytorium lokalne, jeśli znajdujesz się w jego strukturze katalogów, ścieżce do repozytorium lokalnego lub adresie repozytorium zdalnego.Polecenie zwraca 0, jeśli
<branch_name>
nie ma wartości 1, jeśli występuje.źródło
następnie sprawdź, czy zwracana wartość to 0 lub 1.
źródło