【问题标题】:Tag specific files in git在 git 中标记特定文件
【发布时间】:2017-02-22 05:23:43
【问题描述】:

我是新的 git,我想标记分支中的特定文件。 例子:我有 file1, file2, file3, file4 in master 并将这 4 个文件标记为 V1.0 用于我的初始版本

现在我在下一个版本中添加了file5 并合并到master
我只需要在新标签中将file5 标记为V2.0 而不是所有以前的文件(file1file2file3file4)。
这可以在git中完成吗?

谁能帮助我如何在 git 或任何其他解决方案中执行此操作,以便我可以更新项目的每个版本?

【问题讨论】:

  • Git 中的标签是提交的同义词,它代表文件组,而不是单个文件。我怀疑您甚至不需要您要询问的功能。如果你澄清你为什么认为你需要这个,也许我们可以给出更直接的答案。
  • 可以标记一棵树或一个blob,但这样做几乎没有任何意义。请注意,标记 blob 不会保存路径名,因为 blob 由其哈希值标识。标记树将允许您保存路径名,但您不妨使用更方便的机制并仅标记提交。您可以进行没有历史记录的提交:标签本身将保留该提交。

标签: git tortoisegit


【解决方案1】:

这可以在git中完成吗?

不,考虑到标签代表(通常,见下文)提交(这是对 all 存储库内容的引用,而不是文件或增量)


图片来自Git Plumbing

您可以list the files which have changed between two tags

git diff --name-only v1.0 v2.0

要仅列出文件,请添加--diff-filter=A

git diff --name-only --diff-filter=A v1.0 v2.0

这将返回“f5”。


如“How to Tag a single file in GIT”中所述,您可以在技术上标记单个文件或单个树:

> git ls-tree HEAD
040000 tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b    bar
100644 blob 409940768f2a684935a7d15a29f96e82c487f439    foo.txt

> git tag my-bar-tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b
> git tag my-foo-file 409940768f2a684935a7d15a29f96e82c487f439

但任何非提交标记都不会用作常规提交标记(例如,您无法检出它)。
这些非提交标签的可能用法:“Why git tag a blob or a tree (or a tag)?”。

【讨论】:

  • 我可以为项目的每个版本创建release_branches而不是标签吗?
  • @vikv 一个分支,就像一个标签,将引用一个提交。不是文件。不同之处在于,有了一个分支,您就可以开始进行新的修改和添加提交,而一个标签是不可变的并继续引用同一个提交。
  • 感谢您的回复,有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多