文件名大小写更改时如何切换分支?

Ser*_*rov 5 git

  1. 我有一个development带有文件的分支Config.json
  2. 我创建一个新的分支new_development,在那里我重新命名Config.json,以config.json和承诺。
  3. 我切换回以development查看该分支中的某些内容是如何制作的。没有错误。
  4. 我转而new_development继续研究新事物。它显示一个错误:

错误:以下未跟踪的工作树文件将被检出覆盖:

   Config.json
Run Code Online (Sandbox Code Playgroud)

请在切换分支之前移动或移除它们。

中止

该文件实际上在 git 中。

我有这个 git 配置:

[core]
    ignorecase = false
Run Code Online (Sandbox Code Playgroud)

当相同的文件有不同的大小写时,如何使分支切换工作?

Edw*_*son 10

当相同文件具有不同大小写时,如何使分支切换工作?

core.ignoreCasetrue.

您使用的是不区分大小写的文件系统;git 使用该core.ignoreCase设置来表明这一点。它是在您创建存储库时配置的(通过git init或通过git clone): git 查看您的文件系统以确定它是否区分大小写,并缓存该信息(在设置中core.ignoreCase),以便它不必执行此查找每一次操作。

这不是一个需要您更改的设置。

对于core.ignoreCase = false,在不区分大小写的文件系统上:

% git ls-tree HEAD
100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99    foo
% git ls-tree branch
100644 blob bcc9cdfd113753edf279e92afd622b0f3bb05fbc    FOO
% git checkout branch
error: The following untracked working tree files would be overwritten by checkout:
    FOO
Please move or remove them before you switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)

这是因为我已经告诉 git 我的文件系统区分大小写。查看我试图检查的树,发现有一个名为的文件FOO不在我当前的树中,然后在磁盘上查找是否存在同名的未跟踪工作文件。它是文件(实际上是文件HEADstatsFOOfoo,因为我们使用的是不区分大小写的文件系统)并意识到工作目录中有一个未跟踪的文件。

当然,除非你不这样做。你有文件foo

如果我纠正这个问题,设置core.ignoreCase反映我的文件系统的实际情况,那么我可以正确切换分支:

% git config core.ignoreCase true
% git checkout branch
Switched to branch 'branch'
% git ls-tree HEAD
100644 blob bcc9cdfd113753edf279e92afd622b0f3bb05fbc    FOO
Run Code Online (Sandbox Code Playgroud)