threads / discuss / 4433

HEAD branch duplicated in remotes/origin

Subject: HEAD branch duplicated in remotes/origin

## tl;dr

4 messages between Jun 8, 2006 and Jun 8, 2006.

replies: 3people: 2as markdown or json

Uwe Zeisberger· Jun 8, 2006, 07:38 UTC · lore
Hello,

when cloning with --use-separate-remote, $GITDIR/remotes/origin contains two references to refs/heads/master. This breaks `git fetch origin'.

uzeisberger@io:~/gsrc$ git --version git version 1.4.0.rc2.ga95e

uzeisberger@io:~/gsrc$ git clone --use-separate-remote git://git.kernel.org/pub/scm/git/git.git git-copy
Checking files out...)
 100% (523/523) done
uzeisberger@io:~/gsrc$ cd git-copy

uzeisberger@io:~/gsrc/git-copy$ git fetch origin error: no such remote ref refs/heads/master Fetch failure: git://git.kernel.org/pub/scm/git/git.git

uzeisberger@io:~/gsrc/git-copy$ grep -n master .git/remotes/origin 2:Pull: refs/heads/master:refs/remotes/origin/master 12:Pull: refs/heads/master:refs/remotes/origin/master

uzeisberger@io:~/gsrc/git-copy$ sed -i 2d .git/remotes/origin
uzeisberger@io:~/gsrc/git-copy$ git fetch origin
uzeisberger@io:~/gsrc/git-copy$ 

I didn't look into it deeply, but I think this happens because the remote HEAD is translated to refs/heads/master and added while master is added once more while processing refs/heads/master explicitly.

Best regards Uwe

-- 
Uwe Zeisberger

http://www.google.com/search?q=12+divided+by+3
Junio C Hamano· Jun 8, 2006, 08:17 UTC · re: Uwe Zeisberger · lore

Re: HEAD branch duplicated in remotes/origin

Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de> writes:
> when cloning with --use-separate-remote, $GITDIR/remotes/origin contains
> two references to refs/heads/master.
Thanks for noticing.

Very lightly tested but I think this should fix it. -- >8 -- git-clone: fix duplicated "master" in $GIT_DIR/remotes/origin

Under --use-separate-remote we ended up duplicating the branch remote HEAD pointed at in $GIT_DIR/remotes/origin file.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
diff --git a/git-clone.sh b/git-clone.sh
index de59904..64318b4 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -391,11 +391,16 @@ Pull: refs/heads/$head_points_at:$origin
 		(cd "$GIT_DIR/$remote_top" && find . -type f -print) |
 		while read dotslref
 		do
-			name=`expr "$dotslref" : './\(.*\)'` &&
-			test "$use_separate_remote" = '' && {
-				test "$head_points_at" = "$name" ||
-				test "$origin" = "$name"
-			} ||
+			name=`expr "$dotslref" : './\(.*\)'`
+			if test "z$head_points_at" = "z$name"
+			then
+				continue
+			fi
+			if test "$use_separate_remote" = '' &&
+			   test "z$origin" = "z$name"
+			then
+				continue
+			fi
 			echo "Pull: refs/heads/${name}:$remote_top/${name}"
 		done >>"$GIT_DIR/remotes/$origin" &&
 		case "$use_separate_remote" in
Uwe Zeisberger· Jun 8, 2006, 12:33 UTC · re: Junio C Hamano · lore

Re: HEAD branch duplicated in remotes/origin

Hello Junio,
Junio C Hamano wrote:
Show 43 quoted lines
> Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de> writes:
> 
> > when cloning with --use-separate-remote, $GITDIR/remotes/origin contains
> > two references to refs/heads/master.
> 
> Thanks for noticing.
> 
> Very lightly tested but I think this should fix it.
> -- >8 --
> git-clone: fix duplicated "master" in $GIT_DIR/remotes/origin
> 
> Under --use-separate-remote we ended up duplicating the branch
> remote HEAD pointed at in $GIT_DIR/remotes/origin file.
> 
> Signed-off-by: Junio C Hamano <junkio@cox.net>
> ---
> diff --git a/git-clone.sh b/git-clone.sh
> index de59904..64318b4 100755
> --- a/git-clone.sh
> +++ b/git-clone.sh
> @@ -391,11 +391,16 @@ Pull: refs/heads/$head_points_at:$origin
>  		(cd "$GIT_DIR/$remote_top" && find . -type f -print) |
>  		while read dotslref
>  		do
> -			name=`expr "$dotslref" : './\(.*\)'` &&
> -			test "$use_separate_remote" = '' && {
> -				test "$head_points_at" = "$name" ||
> -				test "$origin" = "$name"
> -			} ||
> +			name=`expr "$dotslref" : './\(.*\)'`
> +			if test "z$head_points_at" = "z$name"
> +			then
> +				continue
> +			fi
> +			if test "$use_separate_remote" = '' &&
> +			   test "z$origin" = "z$name"
> +			then
> +				continue
> +			fi
>  			echo "Pull: refs/heads/${name}:$remote_top/${name}"
>  		done >>"$GIT_DIR/remotes/$origin" &&
>  		case "$use_separate_remote" in
> 

I wonder if this is easier not to add the other duplicate. That is let this as it is and don't add the head HEAD points at. Don't know, didn't look into it.

Moreover, is it sound to error if a Pull: line is duplicated? In my eyes at least the error message is wrong/missleading. Otherwise the patch works for me, but probably I only did the same testing as you.

Best regards Uwe

-- 
Uwe Zeisberger

cal 9 1752 | grep 10
Junio C Hamano· Jun 8, 2006, 16:39 UTC · re: Uwe Zeisberger · lore

Re: HEAD branch duplicated in remotes/origin

Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de> writes:
> I wonder if this is easier not to add the other duplicate.

Unfortunately the above is probably easier. The other duplicate is coming from the lowlevel code that makes sure each of the fetch-pack parameters is not used to match more than once. We should fix it eventually, though.

← back to recent threads