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

问题描述 投票:0回答:2

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

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

拥有不同的存储库而不是拥有单个存储库是可能的还是更好的?

git
2个回答
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存储库的版本?


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>来描述文件夹的路径和内容,因此如果您知道提交和路径,则不必创建额外的标记。

© www.soinside.com 2019 - 2024. All rights reserved.