Hmm, to użycie nazwy oddziału wydaje podejrzane. Podobnie jak w odpowiedzi Dustina, może istnieć wiele gałęzi zawierających zatwierdzenie. Dlaczego jedna z tych nazw jest lepsza od innej w tym celu?
Jeśli interesuje Cię tylko jedna konkretna gałąź, możesz obliczyć "podstawę scalenia" między gałęzią a zatwierdzeniem.
Na poniższych schematach zatwierdzenie do budowy to C
, końcówka żądanego oddziału to T
, a podstawa scalania jest oznaczona powyżej M
.
Jeśli M
równa C
równa T
, to commit budować to wierzchołek deklarowanym gałęzi.
M
↓
o--o--o--o--o--x branch # x is both C and T
Jeśli M
równa C
, wtedy czubek deklarowanym gałęzi jest potomkiem commit zbudować.
M
↓
o--o--C--o--o--T branch
Jeśli M
równa T
, a następnie zobowiązać się do budowania jest potomkiem wierzchołka deklarowanym gałęzi.
M
↓
o--o--T branch
\
o--o--C
Jeśli M
równa się coś innego, wtedy C
jest potomkiem jakiegoś przodka T
.
M
↓
o--o--o--o--o--T branch
\
o--o--C
Jeśli nie ma M
, a następnie zobowiązać się do budowy nie jest związane z deklarowanym gałęzi.
o--o--o--o--o--T branch
o--o--o--o--C
Można zrobić to sprawdzić tak:
#!/bin/sh
# Usage: is-ancestor-of <branch> <commit>
if test $# -ne 2; then
echo "$0"': invalid arguments'
exit 128
fi
claimed_branch="$1"
commit="$2"
merge_base="$(git merge-base "$commit" "$claimed_branch")" &&
test -n "$merge_base" &&
test "$merge_base" = "$(git rev-parse --verify "$commit")" &&
exit 0
echo "$commit is not an ancestor of $claimed_branch" 1>&2
exit 1
Powyższy skrypt właściwie nie wymagają lub sprawdzić, że „oddział” argument jest oddział (może to być dowolny komisje ish). Aby upewnić się, że coś jest w rzeczywistości oddział, możesz użyć czegoś takiego:
#!/bin/sh
# Usage: is-branch <branch>
if test $# -ne 1; then
echo "$0"': invalid arguments'
exit 128
fi
branch="$1"
# check various branch hierarchies, adjust as needed
git show-ref --verify refs/heads/"$branch" ||
git show-ref --verify refs/remotes/"$branch" || {
echo "not a branch name: $branch" 1>&2
exit 1
}
więc można ich używać razem w celu sprawdzenia, że coś jest gałęzią i że pewna popełnić jest w tej branży:
is-branch "$claimed_branch" && is-ancestor-of "$claimed_branch" "$commit_to_build"
dlaczego potrzebujesz nazwy oddziału? wydaje się dodatkową, nieprzydatną informacją dla systemu kompilacji. I tak naprawdę nie widzę, w jaki sposób byłoby to przydatne dla logów budujących czytanie programisty. – hasen
Potrzebowałbyś nazwy oddziału w przypadku, gdyby twój workflow miał, nie wiem, rozwinięty i główny oddział używany do wdrożenia i chcesz wiedzieć, czy zatwierdzenia dostały się do jakiegoś konkretnego? Przy okazji, proszę przyjąć prawdziwą odpowiedź. –
@Pinko Myślę, że wybrana odpowiedź powinna być [ta] (https://stackoverflow.com/a/2444924/161278). Ponieważ ma o wiele więcej głosów i jest znacznie prostsza dzięki użyciu natywnej funkcjonalności git. –