* [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' @ 2005-12-22 17:59 Johannes Schindelin 2005-12-22 21:12 ` Junio C Hamano 0 siblings, 1 reply; 3+ messages in thread From: Johannes Schindelin @ 2005-12-22 17:59 UTC (permalink / raw) To: git, junkio When cloning a repository which already contains a branch called 'origin', do not silently overwrite it with the remote 'master' ref. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> --- This happened to me with a project I track via git-cvsimport. The clone strangely suffered a time warp ;-) git-clone.sh | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) f0d4ef72573488410a1e8eb0198e347630d6e2c9 diff --git a/git-clone.sh b/git-clone.sh index 280cc2e..e988964 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -204,6 +204,10 @@ then head_points_at=`git-symbolic-ref HEAD` case "$head_points_at" in refs/heads/*) + if test -e .git/refs/heads/origin; then + chmod a-w .git/refs/heads/origin + echo "Warning: branch 'origin' exists already" + fi head_points_at=`expr "$head_points_at" : 'refs/heads/\(.*\)'` mkdir -p .git/remotes && echo >.git/remotes/origin \ -- 1.0.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' 2005-12-22 17:59 [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' Johannes Schindelin @ 2005-12-22 21:12 ` Junio C Hamano 2005-12-22 22:37 ` Johannes Schindelin 0 siblings, 1 reply; 3+ messages in thread From: Junio C Hamano @ 2005-12-22 21:12 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git, junkio Johannes Schindelin <Johannes.Schindelin@gmx.de> 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 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' 2005-12-22 21:12 ` Junio C Hamano @ 2005-12-22 22:37 ` Johannes Schindelin 0 siblings, 0 replies; 3+ messages in thread From: Johannes Schindelin @ 2005-12-22 22:37 UTC (permalink / raw) To: Junio C Hamano; +Cc: git Hi, On Thu, 22 Dec 2005, Junio C Hamano wrote: > Johannes Schindelin <Johannes.Schindelin@gmx.de> 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 <other_name>'. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> --- 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 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-12-22 22:37 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-12-22 17:59 [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin' Johannes Schindelin 2005-12-22 21:12 ` Junio C Hamano 2005-12-22 22:37 ` Johannes Schindelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).