我们可以标记git存储库中的单个文件夹吗?
我们有一个带有不同文件夹的git存储库,我们不想标记整个存储库。我们只想标记该git存储库中的单个文件夹。
有可能或者更好的办法是拥有不同的存储库而不是拥有一个存储库?
答案 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-foo
和v1.0-bar
只是对提交的引用:
v1.0-foo -> 4bde21c
v1.0-bar -> 7cdeba1
那么您如何考虑标记bar
上的v1.0-foo
存储库的版本?
答案 1 :(得分:0)
不确定为什么要这么做,所以我只给出一些提示。
在Git存储库中具有跟踪文件的文件夹具有自己的修订版本,存储为树对象。该对象记录其文件和子文件夹的名称以及它们自己的对象哈希。但是对象不存储自己的路径,该路径存储在其父文件夹的树对象中。如果它是存储库的根文件夹,则其路径根本不会存储。因为它在克隆或初始化时可以是任何名称。
说存储库中的文件夹路径为./foo
。您可以运行git ls-tree <commit> -- foo
或git rev-parse <commit>:foo
来查看foo
的树哈希。您可以通过git tag <tagname> <tree_hash>
对其进行标记,也可以通过git tag <tagname> <commit>:foo
不知道其哈希值。
使用标记,您可以推入或获取所涉及的对象,或者提取实际的文件和子文件夹,或者使用管道命令对其进行操作。
由于我们可以使用<commit>:<path>
来描述文件夹的路径和内容,因此如果知道提交和路径,则不必创建额外的标签。