diff options
author | Linus Torvalds <torvalds@osdl.org> | 2006-11-16 11:47:22 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-11-16 23:45:48 -0800 |
commit | d09e79cb1c474b3bb323356e6d1072922ab7ccb2 (patch) | |
tree | 5a825bc76c99ee1d8c724eacf361f672051b8adc /git-pull.sh | |
parent | 73fbd33cce281f116852d02963935f2ae90acc76 (diff) | |
download | git-d09e79cb1c474b3bb323356e6d1072922ab7ccb2.tar.gz git-d09e79cb1c474b3bb323356e6d1072922ab7ccb2.tar.xz |
git-pull: allow pulling into an empty repository
We used to complain that we cannot merge anything we fetched
with a local branch that does not exist yet. Just treat the
case as a natural extension of fast forwarding and make the
local branch'es tip point at the same commit we just fetched.
After all an empty repository without an initial commit is an
ancestor of any commit.
[jc: I added a trivial test. We've become sloppy but we should
stick to the discipline of covering new behaviour with new
tests. ]
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-pull.sh')
-rwxr-xr-x | git-pull.sh | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/git-pull.sh b/git-pull.sh index ed04e7d8d..e23beb685 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -44,10 +44,10 @@ do shift done -orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?" +orig_head=$(git-rev-parse --verify HEAD 2>/dev/null) git-fetch --update-head-ok --reflog-action=pull "$@" || exit 1 -curr_head=$(git-rev-parse --verify HEAD) +curr_head=$(git-rev-parse --verify HEAD 2>/dev/null) if test "$curr_head" != "$orig_head" then # The fetch involved updating the current branch. @@ -80,6 +80,11 @@ case "$merge_head" in exit 0 ;; ?*' '?*) + if test -z "$orig_head" + then + echo >&2 "Cannot merge multiple branches into empty head" + exit 1 + fi var=`git-repo-config --get pull.octopus` if test -n "$var" then @@ -95,6 +100,13 @@ case "$merge_head" in ;; esac +if test -z "$orig_head" +then + git-update-ref -m "initial pull" HEAD $merge_head "" && + git-read-tree --reset -u HEAD || exit 1 + exit +fi + case "$strategy_args" in '') strategy_args=$strategy_default_args |