git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-clone-pack: do not silently overwrite an existing branch 'origin'

From
Junio C Hamano <junkio@cox.net>
Date
Dec 22, 2005, 21:12 UTC
Message-ID
<7vu0d0hm53.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.63.0512221859110.20025@wbgn013.biozentrum.uni-wuerzburg.de>
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
 
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 2 of 3 in “git-clone-pack: do not silently overwrite an existing branch 'origin'”
  1. git-clone-pack: do not silently overwrite an existing branch 'origin'Johannes Schindelin, Dec 22, 2005
  2. Junio C HamanoDec 22, 2005
  3. Johannes SchindelinDec 22, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.