mirror of
https://github.com/git/git.git
synced 2024-12-05 16:04:29 +08:00
3c02396adc
The current message is too long and at too low a level for anybody to understand it if they don't know about the configuration format already. The text about setting up a remote is superfluous and doesn't help understand or recover from the error that has happened. Show the usage more prominently and explain how to set up the tracking information. If there is only one remote, that name is used instead of the generic <remote>. Also simplify the message we print on detached HEAD to remove unnecessary information which is better left for the documentation. Signed-off-by: Carlos Martín Nieto <cmn@elego.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
88 lines
2.1 KiB
Bash
88 lines
2.1 KiB
Bash
#!/bin/sh
|
|
|
|
# git-ls-remote could be called from outside a git managed repository;
|
|
# this would fail in that case and would issue an error message.
|
|
GIT_DIR=$(git rev-parse -q --git-dir) || :;
|
|
|
|
get_default_remote () {
|
|
curr_branch=$(git symbolic-ref -q HEAD)
|
|
curr_branch="${curr_branch#refs/heads/}"
|
|
origin=$(git config --get "branch.$curr_branch.remote")
|
|
echo ${origin:-origin}
|
|
}
|
|
|
|
get_remote_merge_branch () {
|
|
case "$#" in
|
|
0|1)
|
|
origin="$1"
|
|
default=$(get_default_remote)
|
|
test -z "$origin" && origin=$default
|
|
curr_branch=$(git symbolic-ref -q HEAD) &&
|
|
[ "$origin" = "$default" ] &&
|
|
echo $(git for-each-ref --format='%(upstream)' $curr_branch)
|
|
;;
|
|
*)
|
|
repo=$1
|
|
shift
|
|
ref=$1
|
|
# FIXME: It should return the tracking branch
|
|
# Currently only works with the default mapping
|
|
case "$ref" in
|
|
+*)
|
|
ref=$(expr "z$ref" : 'z+\(.*\)')
|
|
;;
|
|
esac
|
|
expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
|
|
remote=$(expr "z$ref" : 'z\([^:]*\):')
|
|
case "$remote" in
|
|
'' | HEAD ) remote=HEAD ;;
|
|
heads/*) remote=${remote#heads/} ;;
|
|
refs/heads/*) remote=${remote#refs/heads/} ;;
|
|
refs/* | tags/* | remotes/* ) remote=
|
|
esac
|
|
[ -n "$remote" ] && case "$repo" in
|
|
.)
|
|
echo "refs/heads/$remote"
|
|
;;
|
|
*)
|
|
echo "refs/remotes/$repo/$remote"
|
|
;;
|
|
esac
|
|
esac
|
|
}
|
|
|
|
error_on_missing_default_upstream () {
|
|
cmd="$1"
|
|
op_type="$2"
|
|
op_prep="$3"
|
|
example="$4"
|
|
branch_name=$(git symbolic-ref -q HEAD)
|
|
# If there's only one remote, use that in the suggestion
|
|
remote="<remote>"
|
|
if test $(git remote | wc -l) = 1
|
|
then
|
|
remote=$(git remote)
|
|
fi
|
|
|
|
if test -z "$branch_name"
|
|
then
|
|
echo "You are not currently on a branch. Please specify which
|
|
branch you want to $op_type $op_prep. See git-${cmd}(1) for details.
|
|
|
|
$example
|
|
"
|
|
else
|
|
echo "There is no tracking information for the current branch.
|
|
Please specify which branch you want to $op_type $op_prep.
|
|
See git-${cmd}(1) for details
|
|
|
|
$example
|
|
|
|
If you wish to set tracking information for this branch you can do so with:
|
|
|
|
git branch --set-upstream ${branch_name#refs/heads/} $remote/<branch>
|
|
"
|
|
fi
|
|
exit 1
|
|
}
|