git 标签将文件添加到上一个标签

git tag add a file to a previous tag

我想知道您在 Git 中关于如何将单个文件添加到 Git 中的修订版本的先前标签的意见或建议的工作流程。 当说一个新的固件版本并且固件文件需要对所有版本(已标记)可用时,就会看到这种情况。

在 CVS 中,我可以简单地 cvs add 文件并将其标记为 V1.2、V1.3 等。但是在 Git 中,当 master 已经向前移动时,如何使这个或某些文件对标签可用?

目标是让这些文件在 repo 中可用,以便任何想要生成发布版本的人都可以获取这些文件并将它们包含在发布版本中。

非常感谢!

CVS 标记单个文件,所以这在那里很有意义。

Git 不会:标记只是特定提交的另一个名称。1 提交是不可变的:您不能添加任何内容,删除任何内容,或改变任何东西。 (这是因为提交的 "true name" 是它的 SHA-1,它是作为提交一部分的每一位的密码校验和。即使更改一个位,您也会更改校验和,从而获得一个新的、不同的提交.)

您可以做的是删除(或强行更改)标签,以便具有相同拼写的新标签引用新的不同提交。这会让已经复制旧标签的人感到困惑,因为他们会认为他们已经有了正确的标签。因此,仅当您 (a) 不太关心它们,(b) 确定它们不存在,and/or (c) 将告诉他们必须删除错误标签时才这样做。


1在git中,分支名称,如master只是一个名称一个特定的提交,除了每个人都同意一个特殊的 属性 分支名称:它们会随着时间的推移而变化,最好以 "fast forward" 的方式发生变化,即 master 的未来版本可能指向一个新提交,但无论新提交是什么,它都会——或者至少,在正常情况下,它应该——在其历史记录中包含当前提交。

标签与分支不同,不会移动(或不应移动)。

The goal is to make this files available in the repo so that anyone who wants to generate the release versions can grab these files and include them in the release versions.

有一个比更改发布标签的内容更好的方法来实现。在发布后更改发布通常是不好的形式;当用户签出 V1.2 时,他们想要获得版本 1.2。

考虑单独保留发布标签,而不是使用 stablemaintenanceV1.x 分支来保持更新。考虑关注 Semantic Versioning 并将错误修正作为带有新标签的新版本发布:V1.2.1 和 V1.2.2 等等。

如果需要,可以提供一个 latest 标记指向最新版本。或者,如果您维护软件的多个版本,您可以将 V1-latest 指向版本 1 分支的最新版本。

# Move the V1-latest tag to the same commit as V1.2.2
git tag -f V1-latest V1.2.2

现在来看看如何做你要求的...


How do I make this certain file or files available to the tags when the master has already moved forward?

Git 中的标签只是指向提交的标签。你可以移动它们。通常 git tag 不会让你这样做,标签不应该移动,所以你必须用 -f 强制它。

所以您需要对您的更改进行新的提交并将标签移到那里。

  1. 查看标签:git checkout <name of the tag>
  2. 随心所欲地进行更改。
  3. 提交它们。
  4. 将标签移动到新提交:git tag -f <name of the tag>

Git 会告诉你你在 "detached HEAD"。这意味着没有分支指向这个提交。没关系,您可以工作并做出承诺。在完成并移动标签之前不要结账另一个分支,否则你将失去你的位置。

形象地想一下,你有这样的东西。

F [master]
|
E
|
D
|
C {v1.2}
|

结帐后 v1.2,进行更改并提交。

F [master]
|
E
|
D G DETACHED-HEAD
|/
C {v1.2}
|

G 包含您对 v1.2 的新更改。一旦你 git tag -f V1.2 你就拥有了这个。

F [master]
|
E
|
D G {v1.2}
|/
C
|