# Feature request: option to not fetch tags for 'git remote' branches

7 messages from 2010-03-24 to 2010-03-30. Participants: Frans Pop, John Feuerstein, Björn Steinbrink, Samuel Tardieu.
Thread: https://gitlist.dev/t/23164

## Frans Pop, 2010-03-24 20:54

Subject: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <201003242154.29245.elendil@planet.nl>
URL: https://gitlist.dev/e/201003242154.29245.elendil%40planet.nl

```
I'm sometimes asked to build a kernel or rebase patches against a certain 
development repository. No problem, happy to do that.

Except that some of those repos have huge numbers of tags that I'm not 
interested in and which only muddy the tags from the "origin" repo and my 
own.

I mostly want to remove the remote again ASAP and having to semi-manually 
remove the unwanted tags afterwards is a nuisance.

Example (on top of kernel mainline):
$ git remote add -t master iwlwifi \
	git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
This results in the addition of 326 'master-<date>' tags, 70 'merge-<date>' 
tags and 6 'snapshot-<date>' tags.
Similar effects for example from Ingo's "tip" repository.

It would be great to be able to tell 'git remote' to skip tags and only 
fetch the requested branch. A --no-tags option maybe?

AFAIK this is currently not possible, although I'd happy to be proven 
wrong.

Cheers,
FJP

```

## John Feuerstein, 2010-03-24 21:08

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <4BAA7F5B.2040400@feurix.com>
URL: https://gitlist.dev/e/4BAA7F5B.2040400%40feurix.com
In-Reply-To: <201003242154.29245.elendil@planet.nl>

```
Hello Frans,

> It would be great to be able to tell 'git remote' to skip tags and only 
> fetch the requested branch. A --no-tags option maybe?
> 
> AFAIK this is currently not possible, although I'd happy to be proven 
> wrong.

have a look at -n, --no-tags provided by git-fetch, ie.

$ git remote add ... foo ...
$ git fetch -n foo


Regards,
John

```

## Björn Steinbrink, 2010-03-24 21:35

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <20100324213557.GA15639@atjola.homenet>
URL: https://gitlist.dev/e/20100324213557.GA15639%40atjola.homenet
In-Reply-To: <4BAA7F5B.2040400@feurix.com>

```
On 2010.03.24 22:08:43 +0100, John Feuerstein wrote:
> Hello Frans,
> 
> > It would be great to be able to tell 'git remote' to skip tags and only 
> > fetch the requested branch. A --no-tags option maybe?
> > 
> > AFAIK this is currently not possible, although I'd happy to be proven 
> > wrong.
> 
> have a look at -n, --no-tags provided by git-fetch, ie.
> 
> $ git remote add ... foo ...
> $ git fetch -n foo

And you can set remote.<name>.tagopt to --no-tags to make that the
default.

Björn

```

## Frans Pop, 2010-03-24 21:46

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <201003242246.16286.elendil@planet.nl>
URL: https://gitlist.dev/e/201003242246.16286.elendil%40planet.nl
In-Reply-To: <4BAA7F5B.2040400@feurix.com>

```
On Wednesday 24 March 2010, John Feuerstein wrote:
> > It would be great to be able to tell 'git remote' to skip tags and
> > only fetch the requested branch. A --no-tags option maybe?
> >
> > AFAIK this is currently not possible, although I'd happy to be proven
> > wrong.
>
> have a look at -n, --no-tags provided by git-fetch, ie.
>
> $ git remote add ... foo ...
> $ git fetch -n foo

Thanks John. I'll need to test if that's persistent, or that I'll have
to remember to specify it with each fetch. I guess the option is also 
recognized by 'git remote update'?

Ahh. I've just found 'remote.<name>.tagopt' in 'man git-config'.
I still think it would be nice if that could be set with an option for
'git remote add'. That would make life so much simpler :-)

Cheers,
FJP

```

## Samuel Tardieu, 2010-03-27 19:10

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <2010-03-27-20-10-25+trackit+sam@rfc1149.net>
URL: https://gitlist.dev/e/2010-03-27-20-10-25%2Btrackit%2Bsam%40rfc1149.net
In-Reply-To: <201003242246.16286.elendil@planet.nl>

```
Add a '--no-tags' option to 'git remote add' which adds a
'remote.REMOTE.tagopt = --no-tags' to the configuration file.

'git add -f -n REMOTE' will create a new remote and fetch from it
without importing the tags. Subsequent 'git fetch REMOTE' will also
not import the tags.

Signed-off-by: Samuel Tardieu <sam@rfc1149.net>
---
 Documentation/git-remote.txt |    5 ++++-
 builtin/remote.c             |   11 ++++++++++-
 t/t5505-remote.sh            |   36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+), 2 deletions(-)


>>>>> "Frans" == Frans Pop <elendil@planet.nl> writes:

Frans> I still think it would be nice if that could be set with an
Frans> option for 'git remote add'. That would make life so much simpler

This should do the job.

  Sam


diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index 3fc599c..9db3c35 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git remote' [-v | --verbose]
-'git remote add' [-t <branch>] [-m <master>] [-f] [--mirror] <name> <url>
+'git remote add' [-t <branch>] [-m <master>] [-f] [-n] [--mirror] <name> <url>
 'git remote rename' <old> <new>
 'git remote rm' <name>
 'git remote set-head' <name> (-a | -d | <branch>)
@@ -51,6 +51,9 @@ update remote-tracking branches <name>/<branch>.
 With `-f` option, `git fetch <name>` is run immediately after
 the remote information is set up.
 +
+With `-n` option, `git fetch <name>` does not import tags from
+the remote repository.
++
 With `-t <branch>` option, instead of the default glob
 refspec for the remote to track all branches under
 `$GIT_DIR/remotes/<name>/`, a refspec to track only `<branch>`
diff --git a/builtin/remote.c b/builtin/remote.c
index 277765b..bb5606b 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -106,7 +106,7 @@ static int fetch_remote(const char *name)
 
 static int add(int argc, const char **argv)
 {
-	int fetch = 0, mirror = 0;
+	int fetch = 0, mirror = 0, notags = 0;
 	struct string_list track = { NULL, 0, 0 };
 	const char *master = NULL;
 	struct remote *remote;
@@ -116,6 +116,8 @@ static int add(int argc, const char **argv)
 
 	struct option options[] = {
 		OPT_BOOLEAN('f', "fetch", &fetch, "fetch the remote branches"),
+		OPT_BOOLEAN('n', "no-tags", &notags,
+			"do not import remote tags when fetching"),
 		OPT_CALLBACK('t', "track", &track, "branch",
 			"branch(es) to track", opt_parse_track),
 		OPT_STRING('m', "master", &master, "branch", "master branch"),
@@ -172,6 +174,13 @@ static int add(int argc, const char **argv)
 			return 1;
 	}
 
+	if (notags) {
+		strbuf_reset(&buf);
+		strbuf_addf(&buf, "remote.%s.tagopt", name);
+		if (git_config_set(buf.buf, "--no-tags"))
+			return 1;
+	}
+
 	if (fetch && fetch_remote(name))
 		return 1;
 
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 2692050..3a92a70 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -319,6 +319,42 @@ test_expect_success 'add alt && prune' '
 	 git rev-parse --verify refs/remotes/origin/side2)
 '
 
+cat > test/expect << EOF
+some-tag
+EOF
+
+test_expect_success 'add with tags (default)' '
+	(cd one &&
+	 git tag -a -m "Some tag" some-tag) &&
+	(mkdir add-tags &&
+	 cd add-tags &&
+	 git init &&
+	 git remote add -f origin ../one &&
+	 git tag -l some-tag > ../test/output &&
+	 test_must_fail git config remote.origin.tagopt) &&
+	(cd one &&
+	 git tag -d some-tag) &&
+	test_cmp test/expect test/output
+'
+
+cat > test/expect << EOF
+--no-tags
+EOF
+
+test_expect_success 'add --no-tags' '
+	(cd one &&
+	 git tag -a -m "Some tag" some-tag) &&
+	(mkdir add-no-tags &&
+	 cd add-no-tags &&
+	 git init &&
+	 git remote add -f -n origin ../one &&
+	 git tag -l some-tag > ../test/output &&
+	 git config remote.origin.tagopt >> ../test/output) &&
+	(cd one &&
+	 git tag -d some-tag) &&
+	test_cmp test/expect test/output
+'
+
 cat > one/expect << EOF
   apis/master
   apis/side

```

## Samuel Tardieu, 2010-03-27 19:25

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <2010-03-27-20-25-15+trackit+sam@rfc1149.net>
URL: https://gitlist.dev/e/2010-03-27-20-25-15%2Btrackit%2Bsam%40rfc1149.net
In-Reply-To: <2010-03-27-20-10-25+trackit+sam@rfc1149.net>

```
>>>>> "Sam" == Samuel Tardieu <sam@rfc1149.net> writes:

Sam> Add a '--no-tags' option to 'git remote add' which adds a
Sam> 'remote.REMOTE.tagopt = --no-tags' to the configuration file.

Sam> 'git add -f -n REMOTE' will create a new remote and fetch from it
Sam> without importing the tags. Subsequent 'git fetch REMOTE' will also
Sam> not import the tags.

Sam> Signed-off-by: Samuel Tardieu <sam@rfc1149.net>

I didn't notice that the subject was not appropriate. One can use:

remote add: add a --no-tags (-n) option

```

## Frans Pop, 2010-03-30 08:09

Subject: Re: Feature request: option to not fetch tags for 'git remote' branches
Message-ID: <201003301009.29412.elendil@planet.nl>
URL: https://gitlist.dev/e/201003301009.29412.elendil%40planet.nl
In-Reply-To: <2010-03-27-20-10-25+trackit+sam@rfc1149.net>

```
On Saturday 27 March 2010, Samuel Tardieu wrote:
> Add a '--no-tags' option to 'git remote add' which adds a
> 'remote.REMOTE.tagopt = --no-tags' to the configuration file.
>
> 'git add -f -n REMOTE' will create a new remote and fetch from it
> without importing the tags. Subsequent 'git fetch REMOTE' will also
> not import the tags.

Not tested, but looks as if it will do exactly what I had in mind. Thanks!

```
