2

在 Windows Git 上,仅在以下情况下存在引用不同的问题:

$ git branch foo
$ git branch FOO
fatal: A branch named 'FOO' already exists.

$ git branch dir/foo
$ git branch DIR/bar
$ git branch --list
* develop
  foo
  dir/bar
  dir/foo

这可以通过 Git 使用文件系统将 refs 作为文件存储在目录foo中来解释。bar<repository>/.git/refs/heads/dir

$ git branch --delete dir/bar
$ git branch --delete dir/foo
$ git branch --list
* develop
  foo

较旧的 Git 版本似乎<repository>/.git/refs在较新的 Git 版本中删除了一些空目录。

<repository>/.git/refs手动删除空目录是否安全?

4

1 回答 1

2

<repository>/.git/refs手动删除空目录是否安全?

是的,如果没有其他运行。如果需要,Git 会重新创建它们。

(如果 Git 命令正在运行,它可能会判断该目录存在并且不需要创建,然后您删除该目录,然后 Git 命令尝试使用您刚刚删除的目录中的文件。)

请注意,如果您运行git pack-refs --all,现有的引用将被合并到一个包含打包引用的文件中。这将允许您创建仅大小写不同的新引用,但不要这样做,因为当 Git 去更新引用时,它会偶然发现文件系统中的大小写折叠问题。

(解决这个问题的方法是让 Git 停止使用文件系统中的文件来保存参考值。我相信有一天会发生这种情况,我只是不知道什么时候。)

于 2018-09-09T07:33:02.583 回答