为什么有些Git分支名称中会带有斜杠?

8

我正在阅读这个教程https://www.atlassian.com/git/tutorials/syncing/git-fetch

其中有一个添加远程仓库的示例

git remote add coworkers_repo git@bitbucket.org:coworker/coworkers_repo.git

然后获取一个分支

git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch

在这个最后的命令中,为什么分支名称是 "coworkers/feature_branch" 带有斜杠?分支不应该只是一串字符,例如 "coworkers" 或 "feature_branch" 吗?或者我漏掉了些什么?
3个回答

8

斜杠是允许的(以及其他特殊字符),一些 Git UI 软件(例如 SourceTree)将使用它们来将分支分组,就像在文件夹中一样。这会导致类似于以下内容:

coworkers
  feature_branch1
  feature_branch2
customers
  feature_branch1
  feature_branch2

正如Keith Thompson所指出的,“one/two和one/two/three都是有效的分支名称,但你不能在同一个仓库中同时存在两者。由于分支在.git目录树中的表示方式,这将要求one/two既是一个常规文件又是一个目录。”

4

分支(或其他引用)名称中允许使用各种字符,包括斜杠。实际上,分支foo只是形式为refs/heads/foo的引用。因此,添加更多斜杠是完全可行的。

人们经常使用它们的原因是为了粗略地将他们的分支分类。例如,在工作中,我们共享一个存储库来管理项目,而不是使用forks,因此一些开发人员喜欢创建名为username/branch的分支,以避免与其他用户的分支冲突。此外,一些项目喜欢将引用分类为组,如feature/*bugfix/*hotfix/*

git check-ref-format的文档概述了有效的格式。由于引用存储在文件系统中,因此有一些实际限制可以在ref中使用什么。例如,您不能同时拥有分支foo(ref refs/heads/foo)和foo/bar(ref refs/heads/foo/bar),因为在前一种情况下foo需要是一个文件,在后一种情况下它需要是一个目录。另外,如果您的文件系统不区分大小写或限制某些字节序列,那么您是否可以在系统上存储区分大小写或使用字节序列的分支通常会反映出来。
有一个名为reftable的ref后端计划,它不会遭受这些限制,但它尚未在Git中实现。

4
你看到的是(a)合法的,(b)一种约定。团队如何决定命名分支取决于团队。但是有许多流行和广泛使用的约定,其中斜杠用于对分支进行分类。例如,请参阅:

https://codingsight.com/git-branching-naming-convention-best-practices/

尤其是

命名git分支的常用实践有哪些示例?

我认为,即使从不同的角度提出,你的问题实际上也是一个重复的问题。

我应该补充一点:基于斜杠的方法非常流行,许多自动化工具都是基于它构建的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接