我们如何从git仓库标记单个文件夹

时间:2019-03-05 11:42:09

标签: git

我们可以标记git存储库中的单个文件夹吗?

我们有一个带有不同文件夹的git存储库,我们不想标记整个存储库。我们只想标记该git存储库中的单个文件夹。

有可能或者更好的办法是拥有不同的存储库而不是拥有一个存储库?

2 个答案:

答案 0 :(得分:1)

否,您不能将标签与git存储库中的文件夹相关联

这是因为每个标记都与特定的提交相关联。

因此,每次提交都指向包含两个文件夹的整个存储库。

如果每个文件夹都不相关,是的,您肯定应该有两个单独的存储库。

让我们想象一下这个时间表:

 * 4bde21c 5m ago, Fix spelling (master)
 * 4bde21c 10h ago, Fix foo (v1.0-foo)
 * 7cdeba1 3 days ago, Fix bar (v1.0-bar)
 * 3cd4aa1 10 days ago, Create bar
 * 21a57d2 1 month ago, Create foo

标签v1.0-foov1.0-bar只是对提交的引用:

 v1.0-foo -> 4bde21c
 v1.0-bar -> 7cdeba1 

那么您如何考虑标记bar上的v1.0-foo存储库的版本?

答案 1 :(得分:0)

不确定为什么要这么做,所以我只给出一些提示。

在Git存储库中具有跟踪文件的文件夹具有自己的修订版本,存储为树对象。该对象记录其文件和子文件夹的名称以及它们自己的对象哈希。但是对象不存储自己的路径,该路径存储在其父文件夹的树对象中。如果它是存储库的根文件夹,则其路径根本不会存储。因为它在克隆或初始化时可以是任何名称。

说存储库中的文件夹路径为./foo。您可以运行git ls-tree <commit> -- foogit rev-parse <commit>:foo来查看foo的树哈希。您可以通过git tag <tagname> <tree_hash>对其进行标记,也可以通过git tag <tagname> <commit>:foo不知道其哈希值。

使用标记,您可以推入或获取所涉及的对象,或者提取实际的文件和子文件夹,或者使用管道命令对其进行操作。

由于我们可以使用<commit>:<path>来描述文件夹的路径和内容,因此如果知道提交和路径,则不必创建额外的标签。