我们在一个相对较大的商店,我们创建了许多构建。我使用带注释的标签来标记用于构建的修订,不仅简化了对构建历史的访问,还将构建元数据存储到注释中。
现在有些人抱怨现有许多构建标签,所以我有一个明智的想法就是将它们存放在中央主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/*
放入配置中的提取设置中。