From: Junio C Hamano Date: Thu, 22 Dec 2005 21:12:08 GMT Subject: Re: [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' Message-ID: <7vu0d0hm53.fsf@assigned-by-dhcp.cox.net> In-Reply-To: Johannes Schindelin writes: > When cloning a repository which already contains a branch called 'origin', > do not silently overwrite it with the remote 'master' ref. If we consider the "origin is special and is used to track upstream" convention pretty much ingrained, then unconditionally overwriting origin without saying anything is the right approach. After all, you do not care what upstream your upstream is keeping track of, and you would want to use 'origin' for the usual purpose of keeping track of upstream. Otherwise, if we do not treat "origin" specially, we could do something like this. If "origin" exists, then we do not overwrite upon clone, nor subsequent fetch. I have a mild aversion to this change, though. I'd much prefer the third approach I am too lazy to code, which lets you say what local branch name instead of 'origin' to keep track of upstream from 'git clone' command line. --- diff --git a/git-clone.sh b/git-clone.sh index 280cc2e..edebee7 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -206,17 +206,22 @@ then refs/heads/*) head_points_at=`expr "$head_points_at" : 'refs/heads/\(.*\)'` mkdir -p .git/remotes && - echo >.git/remotes/origin \ - "URL: $repo -Pull: $head_points_at:origin" && - cp ".git/refs/heads/$head_points_at" .git/refs/heads/origin && + echo "URL: $repo" >.git/remotes/origin && + if test -f ".git/refs/heads/origin" + then + echo "Pull: $head_points_at:" + else + echo "Pull: $head_points_at:origin" + cp ".git/refs/heads/$head_points_at" \ + .git/refs/heads/origin && + fi >>.git/remotes/origin && find .git/refs/heads -type f -print | while read ref do - head=`expr "$ref" : '.git/refs/heads/\(.*\)'` && - test "$head_points_at" = "$head" || - test "origin" = "$head" || - echo "Pull: ${head}:${head}" + head=`expr "$ref" : '.git/refs/heads/\(.*\)'` && + test "$head_points_at" = "$head" || + test "origin" = "$head" || + echo "Pull: ${head}:${head}" done >>.git/remotes/origin esac