合并来自多个参考位置的git标签

时间:2016-05-19 17:18:55

标签: git git-tag

我们在一个相对较大的商店,我们创建了许多构建。我使用带注释的标签来标记用于构建的修订,不仅简化了对构建历史的访问,还将构建元数据存储到注释中。

现在有些人抱怨现有许多构建标签,所以我有一个明智的想法就是将它们存放在中央主git仓库的单独引用中,每个人都克隆它。

所以我将构建标记放入refs/builds/tags并将一些移动引用(例如master-latest-build)存入refs/builds/heads

到目前为止一切顺利。对于大多数开发人员来说,这确实具有正确的属性,他们在使用默认refspec时将不再看到标记和特殊分支。

我遇到的问题是,如果我试图将" public"两者合并在一起,那么git似乎不喜欢它。标签和构建标签。

我尝试在我的git配置中执行此操作:

[remote "origin"]
    url = ssh://gerrit.myshop.com:29418/codebase.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/builds/heads/*:refs/remotes/origin/*
    fetch = +refs/builds/tags/*:refs/tags/*
    fetch = +refs/tags/*:refs/tags/*
    fetch = +refs/notes/commits:refs/notes/commits

但是当我尝试运行git remote show origin时,它会将我的所有构建代码列为"陈旧",并且运行git fetch --prune将全部删除它们,只是为了重新创建它们。我假设这是因为refs / tags在refs / build / tags之后,其状态"胜出"。

有没有更好的方法来做我想做的事情,即有选择地隐藏一些分支和标签而不强迫每个开发人员更改默认的git配置?

更新

上面的配置实际上工作正常。显示问题的配置是我没有明确映射refs/tags/*:refs/tags/*的配置。这会将标签显示为陈旧。请参阅此处的要点以获取一个简单示例:https://gist.github.com/cg-soft/62ac3529cf9ad6f6586e07866de43bc4

该脚本的输出(对我来说,运行2.3.5)是:

Initialized empty Git repository in /Users/christian.goetze/git/tag-merge-demo/origin/.git/
[master (root-commit) 953ecf0] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
Cloning into 'client'...
done.
To /Users/christian.goetze/git/tag-merge-demo/origin
 * [new tag]         PUBLIC_TAG -> PUBLIC_TAG
To /Users/christian.goetze/git/tag-merge-demo/origin
 * [new branch]      PRIVATE_TAG -> refs/private/tags/PRIVATE_TAG
* remote origin
  Fetch URL: /Users/christian.goetze/git/tag-merge-demo/origin
  Push  URL: /Users/christian.goetze/git/tag-merge-demo/origin
  HEAD branch: master
  Remote branches:
    master                        tracked
    refs/private/tags/PRIVATE_TAG tracked
    refs/tags/PUBLIC_TAG          stale (use 'git remote prune' to remove)
  Local branch configured for 'git pull':
    master rebases onto remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
From /Users/christian.goetze/git/tag-merge-demo/origin
 x [deleted]         (none)     -> PUBLIC_TAG
 * [new tag]         PUBLIC_TAG -> PUBLIC_TAG
PRIVATE_TAG
PUBLIC_TAG

清楚地表明了这个问题。

解决方法是明确将refs/tags/*:refs/tags/*放入配置中的提取设置中。

0 个答案:

没有答案