将一堆带有标签的 git 存储库放在一起

Posted

技术标签:

【中文标题】将一堆带有标签的 git 存储库放在一起【英文标题】:pull together a bunch of git repos with tags 【发布时间】:2018-05-17 13:07:08 【问题描述】:

我有一个项目,它使用来自几个不同 git 存储库(一些由供应商开发)的代码,我想以某种方式将它们组合在一起。我正在考虑使用 git 子模块,并引入我需要的每个模块。这似乎工作正常。 此时我正在考虑使用 git 标签来标记平台的发布。我在想一些事情:-

cd myrepo-master
git submodule update --remote

然后单独标记所有模块。

git submodule foreach 'git tag v0.1'
git submodule foreach 'git push origin v0.1'

还有主模块本身

git tag v0.1
git push origin v0.1

在这一点上,我有点卡住了。我在想我会 git clone,然后 git checkout 只是那个标签......但我想这不是事情的运作方式? (使用 git clone 时似乎没有指定标签的方法)

我是不是完全找错树了?有没有更好的方法来做到这一点?

编辑:澄清一下,我们只是想确保在特定时间点进入测试环境的所有代码(称为发布?版本?)也被推送到更高的环境,包括 prod使用完全相同的代码。但是该代码来自几个不同的存储库。

【问题讨论】:

Git 中的标签只是指向特定提交的指针,而git clone 指的是许多提交的整个存储库。它们不是一回事。 是的,但是如果我在特定时间点标记所有内容,我如何在其他地方提取/克隆/签出所有内容以匹配该标记或提交? 【参考方案1】:

您只需要标记主模块,而不是子模块。例如在你做的主模块中:

git tag v0.1
git push

然后在其他地方,可能在您的构建环境中:

git pull
git checkout v0.1
git submodule update

这将检查提交时的每个子模块,如主模块的标记提交所记录的那样。

如果你是从头开始,而不是拉动,你会这样做:

git clone url-to-the-remote-repo
cd main-module
git submodule init
git checkout v0.1
git submodule update

【讨论】:

以上是关于将一堆带有标签的 git 存储库放在一起的主要内容,如果未能解决你的问题,请参考以下文章

如何将 git 存储库回滚到特定提交?

计算 git 存储库中的行数

为啥不建议将 git 存储库放在 Dropbox 文件夹中?

在 Git 中导出带有历史记录的子树

带有单独存储库的 git-tf

将 Visual Studio 项目放在 git 存储库中,并在 networkdrive 上添加远程(裸机?)源