git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* How to create tags outside of refs/tags?
@ 2011-02-21 17:21 Christian Halstrick
  2011-02-21 17:48 ` Jay Soffian
  2011-02-22  6:17 ` Christian Halstrick
  0 siblings, 2 replies; 16+ messages in thread
From: Christian Halstrick @ 2011-02-21 17:21 UTC (permalink / raw)
  To: git

I would like to create a tag which full name is not starting with
refs/tags. Is that possible with 'git tag'? If not, is there any
other command to create such tags?

I would like to create such tags to mark released states of my sources
which should never be garbage collected in case no branch is pointing
them anymore. On the other hand these tags should not pollute the
namespace of normal tags, means: don't want a 'git tag' command to
list those technical tags.

Ciao
 Chris

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-21 17:21 How to create tags outside of refs/tags? Christian Halstrick
@ 2011-02-21 17:48 ` Jay Soffian
  2011-02-21 23:52   ` Junio C Hamano
  2011-02-22  6:17 ` Christian Halstrick
  1 sibling, 1 reply; 16+ messages in thread
From: Jay Soffian @ 2011-02-21 17:48 UTC (permalink / raw)
  To: Christian Halstrick; +Cc: git

On Mon, Feb 21, 2011 at 12:21 PM, Christian Halstrick
<christian.halstrick@gmail.com> wrote:
> I would like to create a tag which full name is not starting with
> refs/tags. Is that possible with 'git tag'?

Nope.

> If not, is there any other command to create such tags?

If it's just a light-weight tag, you can use the low-level (plumbing)
command update-ref to create an arbitrary ref:

$ git update-ref refs/blargh HEAD

If it's an annotated/signed tag you want, you'll have to first create
the tag object with 'git mktag', then use update-ref to create a ref
to that tag.

See git-tag.sh in the contrib directory of git.git.

HTH,

j.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-21 17:48 ` Jay Soffian
@ 2011-02-21 23:52   ` Junio C Hamano
  0 siblings, 0 replies; 16+ messages in thread
From: Junio C Hamano @ 2011-02-21 23:52 UTC (permalink / raw)
  To: Jay Soffian; +Cc: Christian Halstrick, git

Jay Soffian <jaysoffian@gmail.com> writes:

> On Mon, Feb 21, 2011 at 12:21 PM, Christian Halstrick
> <christian.halstrick@gmail.com> wrote:
>> I would like to create a tag which full name is not starting with
>> refs/tags. Is that possible with 'git tag'?
>
> Nope.
>
>> If not, is there any other command to create such tags?
>
> If it's just a light-weight tag, you can use the low-level (plumbing)
> command update-ref to create an arbitrary ref:

That is a very unfriendly answer.  You shouldn't be answering everybody
who ask "How do I shoot my foot off?  git-foo command does not seem to let
me do so" with "Here is how to do that".

> $ git update-ref refs/blargh HEAD

At least, please say "that thing is no longer a tag, many git commands
would complain because refs/blargh does not have two-levels, and do not
ever think about starting that thing without 'refs/', or your 'gc' may end
up losing that object" when you give a potentially dangerous hint like
that (the last one being the most important).

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-21 17:21 How to create tags outside of refs/tags? Christian Halstrick
  2011-02-21 17:48 ` Jay Soffian
@ 2011-02-22  6:17 ` Christian Halstrick
  2011-02-22  8:03   ` Jeff King
  2011-02-22 15:06   ` Jay Soffian
  1 sibling, 2 replies; 16+ messages in thread
From: Christian Halstrick @ 2011-02-22  6:17 UTC (permalink / raw)
  To: git

But look at my intention:

On Mon, Feb 21, 2011 at 18:21, Christian Halstrick
<christian.halstrick@gmail.com> wrote:
> I would like to create such tags to mark released states of my sources
> which should never be garbage collected in case no branch is pointing
> them anymore. On the other hand these tags should not pollute the
> namespace of normal tags, means: don't want a 'git tag' command to
> list those technical tags.

Is there any better way to achieve that certain commits are not
garbage collected than to create such tags. I love my foot and don't
want to "shoot if off" but I want to make sure the the
"release-process-machinery" in our company can be sure that certain
source states are never gc'ed. I can also live with creating normal
tags 'refs/tags/release/1.20' but would prefer a solution where 'git
tags' shows only developer created tags.

Will any ref underneath "refs/' prevent gc to garbage collect a
commit? Or only those in the well-known locations (e.g. refs/tags/*)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22  6:17 ` Christian Halstrick
@ 2011-02-22  8:03   ` Jeff King
  2011-02-22  8:09     ` Junio C Hamano
  2011-02-22 15:06   ` Jay Soffian
  1 sibling, 1 reply; 16+ messages in thread
From: Jeff King @ 2011-02-22  8:03 UTC (permalink / raw)
  To: Christian Halstrick; +Cc: Junio C Hamano, git

On Tue, Feb 22, 2011 at 07:17:20AM +0100, Christian Halstrick wrote:

> On Mon, Feb 21, 2011 at 18:21, Christian Halstrick
> <christian.halstrick@gmail.com> wrote:
> > I would like to create such tags to mark released states of my sources
> > which should never be garbage collected in case no branch is pointing
> > them anymore. On the other hand these tags should not pollute the
> > namespace of normal tags, means: don't want a 'git tag' command to
> > list those technical tags.
> 
> Is there any better way to achieve that certain commits are not
> garbage collected than to create such tags. I love my foot and don't
> want to "shoot if off" but I want to make sure the the
> "release-process-machinery" in our company can be sure that certain
> source states are never gc'ed. I can also live with creating normal
> tags 'refs/tags/release/1.20' but would prefer a solution where 'git
> tags' shows only developer created tags.

It sounds a lot saner to me to fix "git tag", then, to ignore certain
uninteresting bits of the tag namespace. We already do allow pattern
matching the tags shown, but:

  1. It's an fnmatch, so I don't think there is a way to do a negative
     match like "ignore everything that matches release/*".

  2. It can only be specified on the command-line, whereas obviously you
     would want this as the default for a repo when you type "git tag".

So I think we could do something like the patch below, which allows:

  # set up some boring and interesting tags
  for i in boring more-boring interesting; do
    for j in one two three; do
      git tag $i/$j
    done
  done

  # tell git to ignore boring stuff
  git config tag.ignore 'boring/*'
  git config --add tag.ignore 'more-boring/*'

  # only interesting tags are shown
  git tag

  # only interesting tags are checked for --contains
  git tag --contains HEAD

  # all tags are shown
  git tag --no-ignore

One alternative would be to allow specifying a default pattern in the
config, and then some way of marking it as a regex instead of fnmatch.
Then you could (in theory) construct a regex that negatively matches
your boring refs. Although without perl-compatibile negative look-ahead,
such regexes can get pretty hard to write.

Anyway, here's what the patch looks like. Obviously missing docs and
tests.

---
diff --git a/builtin/tag.c b/builtin/tag.c
index 46f7138..629dfa3 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -12,6 +12,7 @@
 #include "tag.h"
 #include "run-command.h"
 #include "parse-options.h"
+#include "string-list.h"
 
 static const char * const git_tag_usage[] = {
 	"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]",
@@ -27,8 +28,11 @@ struct tag_filter {
 	const char *pattern;
 	int lines;
 	struct commit_list *with_commit;
+	const struct string_list *ignore;
 };
 
+static struct string_list ignore_tags = STRING_LIST_INIT_DUP;
+
 static int show_reference(const char *refname, const unsigned char *sha1,
 			  int flag, void *cb_data)
 {
@@ -41,6 +45,13 @@ static int show_reference(const char *refname, const unsigned char *sha1,
 		char *buf, *sp, *eol;
 		size_t len;
 
+		if (filter->ignore) {
+			for (i = 0; i < filter->ignore->nr; i++)
+				if (!fnmatch(filter->ignore->items[i].string,
+					     refname, 0))
+					return 0;
+		}
+
 		if (filter->with_commit) {
 			struct commit *commit;
 
@@ -89,7 +100,8 @@ static int show_reference(const char *refname, const unsigned char *sha1,
 }
 
 static int list_tags(const char *pattern, int lines,
-			struct commit_list *with_commit)
+			struct commit_list *with_commit,
+			const struct string_list *ignore)
 {
 	struct tag_filter filter;
 
@@ -99,6 +111,7 @@ static int list_tags(const char *pattern, int lines,
 	filter.pattern = pattern;
 	filter.lines = lines;
 	filter.with_commit = with_commit;
+	filter.ignore = ignore;
 
 	for_each_tag_ref(show_reference, (void *) &filter);
 
@@ -233,6 +246,13 @@ static int git_tag_config(const char *var, const char *value, void *cb)
 		return 0;
 	}
 
+	if (!strcmp(var, "tag.ignore")) {
+		if (!value)
+			return config_error_nonbool(var);
+		string_list_append(&ignore_tags, value);
+		return 0;
+	}
+
 	return git_default_config(var, value, cb);
 }
 
@@ -365,6 +385,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 	const char *msgfile = NULL, *keyid = NULL;
 	struct msg_arg msg = { 0, STRBUF_INIT };
 	struct commit_list *with_commit = NULL;
+	int ignore = 1;
 	struct option options[] = {
 		OPT_BOOLEAN('l', NULL, &list, "list tag names"),
 		{ OPTION_INTEGER, 'n', NULL, &lines, "n",
@@ -391,6 +412,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 			PARSE_OPT_LASTARG_DEFAULT,
 			parse_opt_with_commit, (intptr_t)"HEAD",
 		},
+		OPT_BOOLEAN(0, "ignore", &ignore, "respect tag.ignore config"),
 		OPT_END()
 	};
 
@@ -415,7 +437,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		usage_with_options(git_tag_usage, options);
 	if (list)
 		return list_tags(argv[0], lines == -1 ? 0 : lines,
-				 with_commit);
+				 with_commit,
+				 ignore ? &ignore_tags : NULL);
 	if (lines != -1)
 		die("-n option is only allowed with -l.");
 	if (with_commit)

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22  8:03   ` Jeff King
@ 2011-02-22  8:09     ` Junio C Hamano
  2011-02-22  8:14       ` Jeff King
  0 siblings, 1 reply; 16+ messages in thread
From: Junio C Hamano @ 2011-02-22  8:09 UTC (permalink / raw)
  To: Jeff King; +Cc: Christian Halstrick, git

Jeff King <peff@peff.net> writes:

> It sounds a lot saner to me to fix "git tag", then, to ignore certain
> uninteresting bits of the tag namespace. We already do allow pattern
> matching the tags shown, but:
>
>   1. It's an fnmatch, so I don't think there is a way to do a negative
>      match like "ignore everything that matches release/*".
>
>   2. It can only be specified on the command-line, whereas obviously you
>      would want this as the default for a repo when you type "git tag".
>
> So I think we could do something like the patch below, which allows:
>
>   # set up some boring and interesting tags
>   for i in boring more-boring interesting; do
>     for j in one two three; do
>       git tag $i/$j
>     done
>   done
>
>   # tell git to ignore boring stuff
>   git config tag.ignore 'boring/*'
>   git config --add tag.ignore 'more-boring/*'

Hmph, isn't that what "grep -v" was invented for?

Also it is unclear if the boring tags will or will not be propagated (or
should or should not be, for that matter) to outer world when you do "git
push --tags" with your "ignore".  Most likely some people do want to see
them hidden (e.g. when publishing), and some others do want to be pushed
(e.g. when backing the repository up).

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22  8:09     ` Junio C Hamano
@ 2011-02-22  8:14       ` Jeff King
  2011-02-22 10:09         ` Jakub Narebski
  0 siblings, 1 reply; 16+ messages in thread
From: Jeff King @ 2011-02-22  8:14 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Christian Halstrick, git

On Tue, Feb 22, 2011 at 12:09:37AM -0800, Junio C Hamano wrote:

> >   # tell git to ignore boring stuff
> >   git config tag.ignore 'boring/*'
> >   git config --add tag.ignore 'more-boring/*'
> 
> Hmph, isn't that what "grep -v" was invented for?

Heh. Yeah, but I think the point is that you will want to do this _every
time_, so it saves typing. I guess you could make an alias. Or even more
hack-ish, a custom tag.pager that filters the results. ;)

Yet another option that would work in my example is to use
"interesting/*" as a positive pattern. But that implies that all of the
interesting ones can be grouped in that way.

I dunno. I don't really care much either way. I would probably not be a
user of this feature myself.

> Also it is unclear if the boring tags will or will not be propagated (or
> should or should not be, for that matter) to outer world when you do "git
> push --tags" with your "ignore".  Most likely some people do want to see
> them hidden (e.g. when publishing), and some others do want to be pushed
> (e.g. when backing the repository up).

I think changing the config name to tag.list-ignore would make it more
obvious what is going on. If you don't want to push certain tags, I
think refspecs are the way to do that, and this should be a purely local
display thing.

-Peff

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22  8:14       ` Jeff King
@ 2011-02-22 10:09         ` Jakub Narebski
  2011-02-22 15:27           ` Jeff King
  0 siblings, 1 reply; 16+ messages in thread
From: Jakub Narebski @ 2011-02-22 10:09 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Christian Halstrick, git

Jeff King <peff@peff.net> writes:

> On Tue, Feb 22, 2011 at 12:09:37AM -0800, Junio C Hamano wrote:
> 
> > >   # tell git to ignore boring stuff
> > >   git config tag.ignore 'boring/*'
> > >   git config --add tag.ignore 'more-boring/*'
> > 
> > Hmph, isn't that what "grep -v" was invented for?
> 
> Heh. Yeah, but I think the point is that you will want to do this _every
> time_, so it saves typing. I guess you could make an alias. Or even more
> hack-ish, a custom tag.pager that filters the results. ;)

[...]
> > Also it is unclear if the boring tags will or will not be propagated (or
> > should or should not be, for that matter) to outer world when you do "git
> > push --tags" with your "ignore".  Most likely some people do want to see
> > them hidden (e.g. when publishing), and some others do want to be pushed
> > (e.g. when backing the repository up).
> 
> I think changing the config name to tag.list-ignore would make it more
> obvious what is going on. If you don't want to push certain tags, I
> think refspecs are the way to do that, and this should be a purely local
> display thing.

You meant `tag.listIgnore`, weren't you?  No hyphens in config
variable names.

About refspecs: we currently do not support negative refspecs, do we?
(IIRC there was proposal to use '!' or '-' as prefix for them).  So we
can't currently exclude refs/tags/private/* while including
refs/tags/v*?

-- 
Jakub Narebski
Poland
ShadeHawk on #git

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22  6:17 ` Christian Halstrick
  2011-02-22  8:03   ` Jeff King
@ 2011-02-22 15:06   ` Jay Soffian
  1 sibling, 0 replies; 16+ messages in thread
From: Jay Soffian @ 2011-02-22 15:06 UTC (permalink / raw)
  To: Christian Halstrick; +Cc: git, Junio C Hamano, Jeff King

On Tue, Feb 22, 2011 at 1:17 AM, Christian Halstrick
<christian.halstrick@gmail.com> wrote:
> Is there any better way to achieve that certain commits are not
> garbage collected than to create such tags. I love my foot and don't
> want to "shoot if off" but I want to make sure the the
> "release-process-machinery" in our company can be sure that certain
> source states are never gc'ed. I can also live with creating normal
> tags 'refs/tags/release/1.20' but would prefer a solution where 'git
> tags' shows only developer created tags.

Yes, I'm sorry I wasn't more careful/clearer in my earlier reply.

> Will any ref underneath "refs/' prevent gc to garbage collect a
> commit? Or only those in the well-known locations (e.g. refs/tags/*)

Anything under refs/ is safe, but you should create a subdirectory so
that you've got your own name-space under there. For example, the
gerrit code review system uses refs/changes/ for its refs.

Because these refs would be outside git's normal name-spaces
(refs/heads and refs/tags), they won't be fetched by the default
(non-mirror) refspec.

j.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 10:09         ` Jakub Narebski
@ 2011-02-22 15:27           ` Jeff King
  2011-02-22 16:21             ` Christian Halstrick
  0 siblings, 1 reply; 16+ messages in thread
From: Jeff King @ 2011-02-22 15:27 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: Junio C Hamano, Christian Halstrick, git

On Tue, Feb 22, 2011 at 02:09:14AM -0800, Jakub Narebski wrote:

> > I think changing the config name to tag.list-ignore would make it more
> > obvious what is going on. If you don't want to push certain tags, I
> > think refspecs are the way to do that, and this should be a purely local
> > display thing.
> 
> You meant `tag.listIgnore`, weren't you?  No hyphens in config
> variable names.

Sure.

> About refspecs: we currently do not support negative refspecs, do we?
> (IIRC there was proposal to use '!' or '-' as prefix for them).  So we
> can't currently exclude refs/tags/private/* while including
> refs/tags/v*?

Yeah, I think you might be stuck enumerating the tags you want via
refspec. But I stand by my statement; if this feature is something we
want, it should be purely about listing tags. I don't want to get into
weird tag-specific config affecting the what we push. If somebody wants
negative refspecs, that can be a separate patch.

But like I said before, I am lukewarm on the patch in the first place.

-Peff

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 15:27           ` Jeff King
@ 2011-02-22 16:21             ` Christian Halstrick
  2011-02-22 18:38               ` Junio C Hamano
  0 siblings, 1 reply; 16+ messages in thread
From: Christian Halstrick @ 2011-02-22 16:21 UTC (permalink / raw)
  To: Jeff King; +Cc: Jakub Narebski, Junio C Hamano, git

On Tue, Feb 22, 2011 at 16:27, Jeff King <peff@peff.net> wrote:
> On Tue, Feb 22, 2011 at 02:09:14AM -0800, Jakub Narebski wrote:
> refspec. But I stand by my statement; if this feature is something we
> want, it should be purely about listing tags. I don't want to get into
> weird tag-specific config affecting the what we push. If somebody wants
> negative refspecs, that can be a separate patch.

I am not sure whether what is discussed now is really solving my
problem best. Maybe I rephrase again the problem I have:
I just want to make sure that certain commits are not garbage
collected. And the artefacts I create to ensure that should not
pollute the namespace of developer-created tags/branches. Is creating
a tag and then hiding it again really the best solution for that?

Here is some background: there is a tool developed in our company
which helps teams to release their git-controlled products. The
release tool gets as input just a commit ID. Whenever the release tool
has succesfully done his work on a product it wants to make sure the
this commit will never be garbage collected. Even not if month's later
the product owner resets all their branches making the released
commits beeing unreachable. And since some projects may run a lot of
attempts until they finally released some stuff we don't to have our
tags namespace to
be polluted with too many attempt-to-release tags.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 16:21             ` Christian Halstrick
@ 2011-02-22 18:38               ` Junio C Hamano
  2011-02-22 22:08                 ` Christian Halstrick
  2011-02-23 16:36                 ` Enrico Weigelt
  0 siblings, 2 replies; 16+ messages in thread
From: Junio C Hamano @ 2011-02-22 18:38 UTC (permalink / raw)
  To: Christian Halstrick; +Cc: Jeff King, Jakub Narebski, git

Christian Halstrick <christian.halstrick@gmail.com> writes:

> I am not sure whether what is discussed now is really solving my
> problem best. Maybe I rephrase again the problem I have:
> I just want to make sure that certain commits are not garbage
> collected. And the artefacts I create to ensure that should not
> pollute the namespace of developer-created tags/branches. Is creating
> a tag and then hiding it again really the best solution for that?
>
> Here is some background: there is a tool developed in our company which
> helps teams to release their git-controlled products. The release tool
> gets as input just a commit ID. Whenever the release tool has
> succesfully done his work on a product it wants to make sure the this
> commit will never be garbage collected. Even not if month's later the
> product owner resets all their branches making the released commits
> beeing unreachable. And since some projects may run a lot of attempts
> until they finally released some stuff we don't to have our tags
> namespace to be polluted with too many attempt-to-release tags.

How about taking advantage of the fact that you do not have to treat tag
namespace as a global thing?  For the "release tool" to "get a commit ID"
and do something useful, the "release tool" must be working on a git
repository, and hopefully that repository is something other than the ones
developers directly play with (by checking out random branches in its
working tree and compiling, etc.).

You can run "git tag" in that "release tool" repository, and if you do not
want to show that to others, never let developers fetch tags from there.

I would think that using a private namespace other than tags for your own
use (e.g. "git update-ref refs/anchor/release-20110222 $that_commit") may
be the best option that is easiest to understand, though.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 18:38               ` Junio C Hamano
@ 2011-02-22 22:08                 ` Christian Halstrick
  2011-02-23 12:42                   ` Michael J Gruber
  2011-02-23 16:36                 ` Enrico Weigelt
  1 sibling, 1 reply; 16+ messages in thread
From: Christian Halstrick @ 2011-02-22 22:08 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeff King, Jakub Narebski, git

Hi,

> How about taking advantage of the fact that you do not have to treat tag
> namespace as a global thing?  For the "release tool" to "get a commit ID"
> and do something useful, the "release tool" must be working on a git
> repository, and hopefully that repository is something other than the ones
> developers directly play with (by checking out random branches in its
> working tree and compiling, etc.).

These assumptions are all correct. The "release tool" works on his clone
of a central repo. The release tool may even modify the content (e.g. increasing
release numbers in project metadata files) and create new git commits.
In the end it wants to create tags/refs locally und push these tags back
so that in the central repo the commits are not gc'ed.

Something like:

cd <releaseRepo>
git fetch origin
git checkout <commitIdToRelease>
edit pom.xml; git add pom.xml
git commit -m "release ..."
git tag <releaseName>
git push origin 'refs/tags/<releaseName>:refs/releases/<releaseName>'

should do the job, or?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 22:08                 ` Christian Halstrick
@ 2011-02-23 12:42                   ` Michael J Gruber
  2011-02-23 13:45                     ` Christian Halstrick
  0 siblings, 1 reply; 16+ messages in thread
From: Michael J Gruber @ 2011-02-23 12:42 UTC (permalink / raw)
  To: Christian Halstrick; +Cc: Junio C Hamano, Jeff King, Jakub Narebski, git

Christian Halstrick venit, vidit, dixit 22.02.2011 23:08:
> Hi,
> 
>> How about taking advantage of the fact that you do not have to treat tag
>> namespace as a global thing?  For the "release tool" to "get a commit ID"
>> and do something useful, the "release tool" must be working on a git
>> repository, and hopefully that repository is something other than the ones
>> developers directly play with (by checking out random branches in its
>> working tree and compiling, etc.).
> 
> These assumptions are all correct. The "release tool" works on his clone
> of a central repo. The release tool may even modify the content (e.g. increasing
> release numbers in project metadata files) and create new git commits.
> In the end it wants to create tags/refs locally und push these tags back
> so that in the central repo the commits are not gc'ed.
> 
> Something like:
> 
> cd <releaseRepo>
> git fetch origin
> git checkout <commitIdToRelease>
> edit pom.xml; git add pom.xml
> git commit -m "release ..."
> git tag <releaseName>
> git push origin 'refs/tags/<releaseName>:refs/releases/<releaseName>'
> 
> should do the job, or?

Yep. Also, if you do

git tag release/<releasename>

then a simple push refspec 'refs/tags/release/*:refs/releases/*' in your
config does the job. (Assuming you don't have any other tags in release/.)

Michael

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-23 12:42                   ` Michael J Gruber
@ 2011-02-23 13:45                     ` Christian Halstrick
  0 siblings, 0 replies; 16+ messages in thread
From: Christian Halstrick @ 2011-02-23 13:45 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: Junio C Hamano, Jeff King, Jakub Narebski, git

thanks all of you for your fast help. My problem is now solved.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to create tags outside of refs/tags?
  2011-02-22 18:38               ` Junio C Hamano
  2011-02-22 22:08                 ` Christian Halstrick
@ 2011-02-23 16:36                 ` Enrico Weigelt
  1 sibling, 0 replies; 16+ messages in thread
From: Enrico Weigelt @ 2011-02-23 16:36 UTC (permalink / raw)
  To: git

* Junio C Hamano <gitster@pobox.com> wrote:

Hi folks,


> I would think that using a private namespace other than tags for your own
> use (e.g. "git update-ref refs/anchor/release-20110222 $that_commit") may
> be the best option that is easiest to understand, though.

I'm doing similar things with source crawlers in the OSS-QM
project: each time a new upstream version arrives, it gets
tag into a queue namespace, so I can pick them up an do my
usual qm works on them one by one.

git ls-remote git://pubgit.metux.de/oss-qm/glib2.git | grep queue


cu
-- 
----------------------------------------------------------------------
 Enrico Weigelt, metux IT service -- http://www.metux.de/

 phone:  +49 36207 519931  email: weigelt@metux.de
 mobile: +49 151 27565287  icq:   210169427         skype: nekrad666
----------------------------------------------------------------------
 Embedded-Linux / Portierung / Opensource-QM / Verteilte Systeme
----------------------------------------------------------------------

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2011-02-23 16:48 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-21 17:21 How to create tags outside of refs/tags? Christian Halstrick
2011-02-21 17:48 ` Jay Soffian
2011-02-21 23:52   ` Junio C Hamano
2011-02-22  6:17 ` Christian Halstrick
2011-02-22  8:03   ` Jeff King
2011-02-22  8:09     ` Junio C Hamano
2011-02-22  8:14       ` Jeff King
2011-02-22 10:09         ` Jakub Narebski
2011-02-22 15:27           ` Jeff King
2011-02-22 16:21             ` Christian Halstrick
2011-02-22 18:38               ` Junio C Hamano
2011-02-22 22:08                 ` Christian Halstrick
2011-02-23 12:42                   ` Michael J Gruber
2011-02-23 13:45                     ` Christian Halstrick
2011-02-23 16:36                 ` Enrico Weigelt
2011-02-22 15:06   ` Jay Soffian

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).