зеркало из https://github.com/microsoft/git.git
fetch,parse-remote,fmt-merge-msg: refs/remotes/* support
We can now easily fetch and merge things from heads in the refs/remotes/ hierarchy in remote repositories. The refs/remotes/ hierarchy is likely to become the standard for tracking foreign SCMs, as well as the location of Pull: targets for tracking remote branches in newly cloned repositories. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
f2561fda36
Коммит
687b8be8bb
10
git-fetch.sh
10
git-fetch.sh
|
@ -94,6 +94,9 @@ append_fetch_head () {
|
|||
# remote-nick is the URL given on the command line (or a shorthand)
|
||||
# remote-name is the $GIT_DIR relative refs/ path we computed
|
||||
# for this refspec.
|
||||
|
||||
# the $note_ variable will be fed to git-fmt-merge-msg for further
|
||||
# processing.
|
||||
case "$remote_name_" in
|
||||
HEAD)
|
||||
note_= ;;
|
||||
|
@ -103,6 +106,9 @@ append_fetch_head () {
|
|||
refs/tags/*)
|
||||
note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')"
|
||||
note_="tag '$note_' of " ;;
|
||||
refs/remotes/*)
|
||||
note_="$(expr "$remote_name_" : 'refs/remotes/\(.*\)')"
|
||||
note_="remote branch '$note_' of " ;;
|
||||
*)
|
||||
note_="$remote_name of " ;;
|
||||
esac
|
||||
|
@ -147,10 +153,10 @@ fast_forward_local () {
|
|||
else
|
||||
echo >&2 "* $1: storing $3"
|
||||
fi
|
||||
git-update-ref "$1" "$2"
|
||||
git-update-ref "$1" "$2"
|
||||
;;
|
||||
|
||||
refs/heads/*)
|
||||
refs/heads/* | refs/remotes/*)
|
||||
# $1 is the ref being updated.
|
||||
# $2 is the new value for the ref.
|
||||
local=$(git-rev-parse --verify "$1^0" 2>/dev/null)
|
||||
|
|
|
@ -75,6 +75,7 @@ while (<>) {
|
|||
$src{$src} = {
|
||||
BRANCH => [],
|
||||
TAG => [],
|
||||
R_BRANCH => [],
|
||||
GENERIC => [],
|
||||
# &1 == has HEAD.
|
||||
# &2 == has others.
|
||||
|
@ -91,6 +92,11 @@ while (<>) {
|
|||
push @{$src{$src}{TAG}}, $1;
|
||||
$src{$src}{HEAD_STATUS} |= 2;
|
||||
}
|
||||
elsif (/^remote branch (.*)$/) {
|
||||
$origin = $1;
|
||||
push @{$src{$src}{R_BRANCH}}, $1;
|
||||
$src{$src}{HEAD_STATUS} |= 2;
|
||||
}
|
||||
elsif (/^HEAD$/) {
|
||||
$origin = $src;
|
||||
$src{$src}{HEAD_STATUS} |= 1;
|
||||
|
@ -123,6 +129,8 @@ for my $src (@src) {
|
|||
}
|
||||
push @this, andjoin("branch ", "branches ",
|
||||
$src{$src}{BRANCH});
|
||||
push @this, andjoin("remote branch ", "remote branches ",
|
||||
$src{$src}{R_BRANCH});
|
||||
push @this, andjoin("tag ", "tags ",
|
||||
$src{$src}{TAG});
|
||||
push @this, andjoin("commit ", "commits ",
|
||||
|
|
|
@ -86,14 +86,14 @@ canon_refs_list_for_fetch () {
|
|||
local=$(expr "$ref" : '[^:]*:\(.*\)')
|
||||
case "$remote" in
|
||||
'') remote=HEAD ;;
|
||||
refs/heads/* | refs/tags/*) ;;
|
||||
heads/* | tags/* ) remote="refs/$remote" ;;
|
||||
refs/heads/* | refs/tags/* | refs/remotes/*) ;;
|
||||
heads/* | tags/* | remotes/* ) remote="refs/$remote" ;;
|
||||
*) remote="refs/heads/$remote" ;;
|
||||
esac
|
||||
case "$local" in
|
||||
'') local= ;;
|
||||
refs/heads/* | refs/tags/*) ;;
|
||||
heads/* | tags/* ) local="refs/$local" ;;
|
||||
refs/heads/* | refs/tags/* | refs/remotes/*) ;;
|
||||
heads/* | tags/* | remotes/* ) local="refs/$local" ;;
|
||||
*) local="refs/heads/$local" ;;
|
||||
esac
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче