为什么Git引用没有文件扩展名

5

我最近在创建分支组时遇到了Git的一个常见问题:

我有一个名为“tim”的分支。
我想创建一个名为“tim”的文件夹/组,其中包含“tim”分支,从而导致分支路径为“tim/tim”。

当我尝试这样做时,Git非常不喜欢我,因为文件夹“tim”和分支引用“tim”在Git中是完全相同的东西。

我的问题是,如果有人知道为什么分支引用没有某种扩展名来解决这个问题吗?比如.gitbranch或其他什么? 显然,每次访问文件时添加.gitbranch会多一点工作,但与用户必须解决此问题所需的工作相比,几乎可以忽略不计,特别是当您在开发团队中时。(先前克隆存储库的任何人都必须手动进入其refs文件夹,并删除任何名为“tim”的分支的痕迹,否则他们将无法提取!)

如果这确实是一个合法问题,我将向相关渠道提出,但我想检查是否有人可能知道他们可能故意这样做的原因。

谢谢大家,
Tim


1
你能发一下命令和错误消息吗?例如 git checkout tim -- 可能有效。 - VonC
命令和错误非常普遍。请参阅S.O问题:https://dev59.com/Q3E85IYBdhLWcg3w9ohJ或此外部邮件站点的线程:http://osdir.com/ml/git/2009-11/msg01037.html - Tim
只有在分支名称中使用斜杠时才会发生这种情况。但是,一个名为“tim”的分支应该可以工作。请再次确认您输入的确切命令以及其错误信息是什么? - VonC
1
除此之外,将事物称为相同的名称可能会使Git感到困惑,命名永远不是显而易见的,但给予不同的名称并不需要太大的努力(例如像您自己建议的timbranch)。 - Vince
我没有确切的命令,也没有确切的错误消息,也没有生成它们的任何可访问性。但是它们与我之前链接到的同一个 S.O 相似。 我已经删除了本地的“tim”分支引用,创建了一个名为“tim”的文件夹,然后在其中创建了一个新的“tim”分支并将其推送。其他人尝试从存储库获取时,由于旧的“tim”分支,因此无法创建远程引用。 - Tim
没错,给它换个名字并不需要太多的努力,但为什么会混淆分支和文件夹呢?它应该完全可以处理好这个问题。换句话说,这个问题是关于是否有必要首先绕过这个问题的原因? - Tim
2个回答

5

我认为没有任何特定的理由。在Unix中,通常不使用文件扩展名,因此没有扩展名。这意味着您不能同时拥有foofoo/anything。虽然远程引用通常以打包格式存储在一个文件中,但已经记录下来并且现在已经确定不会更改。

然而:

  • git fetch应该足够聪明,在给定-p (--prune)选项时,在创建新分支之前删除旧分支。如果没有,请务必在git邮件列表上提出。
  • 我只看到在gui中默认修剪的方法,但在远程的fetch配置中没有。询问这一点也是有道理的。

正是我所期望的回应。我想使用打包和修剪可能也可以解决这个问题。 - Tim

0
Git在尝试将文件名tim(存储分支头)转换为目录名tim/(当您有斜杠时)时可能会遇到困难,因为引用命名自由度很高(请参见git-check-ref-format)。

正确。我在问题的描述/背景中已经表明我已经知道这一点,但这不是实际问题本身。 问题是为什么要强制执行这个规定。为什么不将分支引用文件存储为带有扩展名的文件以避免这种困难? - Tim
@Tim,据我所知,“扩展名”是 Windows 的东西,“Git”是 Unix 的东西。因此,除了那些“check-ref-format”规则,它们允许文件和目录名称的任何字符序列(没有特殊的“扩展名”规则),这是 Unix 的常规做法,因此不可能强制执行扩展名规则。如果我理解正确,您遇到的“坑点”是从“tim”更改为“tim”/,如果新分组的名称不同,则可能不会发生这种情况,例如timsBranches/ - Philip Oakley
@Tim,你是使用git命令重命名“tim”分支,还是只是将文件移动到子目录中,然后出现了错误信息? - Philip Oakley
因此,之前/被接受的答案是:“在Unix中,通常不使用文件扩展名,因此没有”。我删除了我的分支引用,并使用git命令创建了tim/tim - Tim
文件扩展名并不是Windows专属的,其他操作系统也大量使用文件扩展名。虽然git通常通过CLI运行,但我仍认为他们可以在文件上简单地支持扩展名,从而解决这个具体问题。但不管怎样,这是他们的选择。 - Tim

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