假设我进行了一次提交并将其推送,然后其他人将其提交,在其上创建一个或多个标签,再进行几次提交,然后再次推送所有内容。
现在如何在不获取更多提交(即git pull
不计入)的情况下为我已经在计算机上获取的提交获取新标签?
编辑:
我的动力是节省时间和资源。
基本上,每当我向GitLab提交新提交时,GitLab内就会触发一系列自动化作业。第一个分析提交消息(遵循一定的约定),然后确定哪种类型的版本凹凸比较合适,然后检查先前提交的版本标记,并使用适当的版本凹凸为当前提交创建一个新版本。
然后触发下一个作业。这项工作可能负责编译源代码。然后触发另一个作业,该作业可能负责创建源代码存档。
每个作业都在其自己的临时Docker容器中运行,并且所有容器都包含一个代表推送时存储库的文件夹。因此,需要在作业2和3的开始处获取在第一个作业中创建的新创建的标签(这些作业需要知道版本号,例如为源代码存档指定适当的名称)。每次执行完整的git fetch
会浪费资源。尤其是当您在很短的时间内进行多次提交时。
也可以手动触发旧提交的作业链。在这种情况下,您可能会获取成千上万的作业2和3不需要的提交。
实际上,实际上有15多个职位,但是我必须简化事情,否则我必须写一本书。
答案 0 :(得分:1)
我将提供解决方案,但首先请参考我对原始问题的评论;总而言之,我非常怀疑这是一次宝贵的努力。
要获取,您必须能够命名要获取的内容。 IIRC被认为是一种安全措施,因为如果实际的引用已被强制按下以从历史记录中删除该提交,则它将阻止获取已知的哈希。因此,您必须命名标签或分支,或者只是获取所有可访问的内容(或多或少)。
如果第1步除了创建任何计算出的版本标签,还创建了一个具有第2步和第3步已知名称的单个标签,那么您可以使用--tags
选项获取那个标签并得到您的要求。
source-repo $ git tag v1.3.7
source-repo $ git tag -f current_build
source-repo $ cd path/to/target/repo
target-repo $ git fetch source-repo current_build
From url://of/source/repo
* tag current_build -> FETCH_HEAD
* [new tag] v1.3.7 -> v1.3.7
* [new tag] current_build -> current_build
答案 1 :(得分:0)
免责声明:破损的解决方案,答案仅保留用于进一步调查。
git fetch --tags <commitID>
将fetch
命令的范围限制为仅此提交。
如果有疑问,请先进行试运行,然后看看将执行什么操作:
git fetch --dry-run --tags <commitID>