Nie ma żadnego sposobu, aby drugi parametr adresu git checkout -b
działał z adresem URL w przeciwieństwie do nazwy oddziału (w postaci <remote>/<branch>
lub innej).
Od strony man:
git checkout -b|-B <new_branch> [<start point>]
Specifying -b causes a new branch to be created as if git-branch(1) were
called and then checked out. In this case you can use the --track or
--no-track options, which will be passed to git branch. As a convenience,
--track without -b implies branch creation; see the description of
--track below.
If -B is given, <new_branch> is created if it doesn’t exist; otherwise,
it is reset. This is the transactional equivalent of
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
that is to say, the branch is not reset/created unless "git checkout" is
successful.
Drugim parametrem git branch
dalej start point
musi być coś, co wskazuje na popełnić w istniejącym repo. Odgałęzienie (które prawdopodobnie nie jest nawet pobierane) adresowane za pomocą adresu URL tego nie osiągnie. Co więcej, nie ma sposobu na zakodowanie gałęzi do adresu URL git w standardzie (github może mieć coś, ale myślę, że nie, w przeciwnym razie import golangu byłby dużo łatwiejszy).
Jeśli chcesz, aby to działało, trzeba będzie:
- Przetwarza wyjście
git remote -v show
aby uzyskać odpowiednią nazwę zdalnego
- Wykonuje
git fetch
celu zapewnienia właściwego oddziału jest rozebrany (git fetch --all
jest chyba twoim przyjacielem)
- Dołącz nazwę oddziału do nazwy zdalnej i
git checkout -b
tha t.
Oto bardzo lekko przetestowany skrypt bash:
#!/bin/bash
#
# usage: scriptname repo branchname
#
# where repo is the URL, branchname is the branchname to create
repo="$1"
branchname="$2"
remote=$(git remote -v show | perl -n -e 'if (m,^(\w+)\s+(\S+)\b, && $2 eq '"'${repo}'"') {print "$1\n" ; exit 0}')
if [ "$remote" == "" ] ; then
echo cannot find "${repo}" 1>&2
exit 1
fi
git fetch --all && git checkout -b "${branchname}" "remotes/${remote}/${branchname}"
Jeśli nazwa oddziału jest wyjątkowy, można pominąć '' całkowicie. –
Może zespół powinien przyjąć pewne standardowe konwencje nazewnictwa. – larsks