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

[PATCH v2 1/2] Teach clone to clone just one remote branch using --track

From
David Soria Parra <sn_@gmx.net>
Date
Dec 1, 2009, 22:51 UTC
Message-ID
<1259707865-6561-2-git-send-email-sn_@gmx.net>
In-Reply-To
<1259707865-6561-1-git-send-email-sn_@gmx.net>
From: David Soria Parra <dsp@php.net>

Add a --track option that can be used to clone just the given branch from the remote and nothing else. This is done by setting the remote.<branch>.fetch option before cloning. This option cannot be used together with --mirror. For example using

    git clone --track next git://git.kernel.org/pub/scm/git/git.git
will just clone the next branch from the git.git repository.

The option is called --track to ensure clean wording with 'git remote add --track'.

Signed-off-by: David Soria Parra <dsp@php.net>
---
 builtin-clone.c        |   12 +++++++++++-
 t/t5708-clone-track.sh |   43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 1 deletions(-)
 create mode 100755 t/t5708-clone-track.sh
diff --git a/builtin-clone.c b/builtin-clone.c
index 5df8b0f..bc335ee 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -43,6 +43,7 @@ static char *option_template, *option_reference, *option_depth;
 static char *option_origin = NULL;
 static char *option_branch = NULL;
 static char *option_upload_pack = "git-upload-pack";
+static char *option_track = NULL;
 static int option_verbose;
 
 static struct option builtin_clone_options[] = {
@@ -76,6 +77,8 @@ static struct option builtin_clone_options[] = {
 		   "path to git-upload-pack on the remote"),
 	OPT_STRING(0, "depth", &option_depth, "depth",
 		    "create a shallow clone of that depth"),
+	OPT_STRING('t', "track", &option_track, "branch",
+			"remote branche to track"),
 
 	OPT_END()
 };
@@ -483,7 +486,14 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 		strbuf_addf(&branch_top, "refs/remotes/%s/", option_origin);
 	}
 
-	strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
+	if (option_track) {
+		if (option_mirror)
+			return error("Cannot use --track together with --mirror");
+		strbuf_addf(&value, "+%s%s:%s%s", src_ref_prefix, option_track, branch_top.buf, option_track);
+		option_branch = option_track;
+	} else {
+		strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
+	}
 
 	if (option_mirror || !option_bare) {
 		/* Configure the remote */
diff --git a/t/t5708-clone-track.sh b/t/t5708-clone-track.sh
new file mode 100755
index 0000000..71b8461
--- /dev/null
+++ b/t/t5708-clone-track.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+test_description='clone --track option'
+. ./test-lib.sh
+
+check_HEAD() {
+	echo refs/heads/"$1" >expect &&
+	git symbolic-ref HEAD >actual &&
+	test_cmp expect actual
+}
+
+check_file() {
+	echo "$1" >expect &&
+	test_cmp expect file
+}
+
+test_expect_success 'setup' '
+	mkdir parent &&
+	(cd parent && git init &&
+	 echo one >file && git add file && git commit -m one &&
+	 git checkout -b two &&
+	 echo two >file && git add file && git commit -m two &&
+	 git checkout master)
+'
+
+test_expect_success 'vanilla clone has both branches' '
+	git clone parent clone &&
+	(cd clone &&
+	git branch -r | grep master &&
+	git branch -r | grep two
+	)
+'
+
+test_expect_success 'clone -t chooses specified remote branch' '
+	git clone -t two parent clone-two &&
+	(cd clone-two &&
+	!(git branch -r | grep master) &&
+	git branch -r | grep two &&
+	check_HEAD two
+	)
+'
+
+test_done
-- 
1.6.6.rc0.268.g1c272
Previous: David Soria ParraNext: David Soria Parra
Message 2 of 13 in “Add --track option to git clone”
  1. Add --track option to git cloneDavid Soria Parra, Dec 1, 2009
  2. 1/2 Teach clone to clone just one remote branch using --trackDavid Soria Parra, Dec 1, 2009
  3. 2/2 Documentation: Add --track option to the git clone manpageDavid Soria Parra, Dec 1, 2009
  4. Sean EstabrooksDec 2, 2009
  5. David Soria ParraDec 2, 2009
  6. Nanako ShiraishiDec 2, 2009
  7. David Soria ParraDec 2, 2009
  8. Jeff KingDec 2, 2009
  9. David Soria ParraDec 2, 2009
  10. Nanako ShiraishiDec 2, 2009
  11. Jeff KingDec 2, 2009
  12. Junio C HamanoDec 2, 2009
  13. Björn SteinbrinkDec 3, 2009

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.