From: Johannes Schindelin Date: Thu, 22 Dec 2005 22:37:24 GMT Subject: Re: [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' Message-ID: In-Reply-To: <7vu0d0hm53.fsf@assigned-by-dhcp.cox.net> Hi, On Thu, 22 Dec 2005, Junio C Hamano wrote: > 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. As I said, I use git to keep track of a few CVS projects. I like to fetch all branches, one being the upstream branch, so that I can compare what changes not yet in upstream. > I have a mild aversion to this change, though. So don't. > 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. --- [PATCH] git-clone: Support changing the origin branch with -o Earlier, git-clone stored upstream's master in the branch named 'origin', possibly overwriting an existing such branch. Now you can change it by calling git-clone with '-o '. Signed-off-by: Johannes Schindelin --- Totally untested, but obviously correct :-) It still overwrites any existing ref of the same name silently. git-clone.sh | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/git-clone.sh b/git-clone.sh index 280cc2e..87ad477 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -67,6 +67,7 @@ use_local=no local_shared=no no_checkout= upload_pack= +origin=origin while case "$#,$1" in 0,*) break ;; @@ -75,6 +76,8 @@ while *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) local_shared=yes; use_local=yes ;; *,-q|*,--quiet) quiet=-q ;; + 1,-o) usage;; + *,-o) origin="$2"; shift;; 1,-u|1,--upload-pack) usage ;; *,-u|*,--upload-pack) shift @@ -208,14 +211,14 @@ then 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 && +Pull: $head_points_at:$origin" && + cp ".git/refs/heads/$head_points_at" .git/refs/heads/$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" || + test "$origin" = "$head" || echo "Pull: ${head}:${head}" done >>.git/remotes/origin esac