【问题标题】:Git: How to checkout branch on case insensitive filesystems? Git thinks I have untracked files in working tree while I do notGit:如何在不区分大小写的文件系统上签出分支? Git 认为我在工作树中有未跟踪的文件,而我没有
【发布时间】:2019-10-02 23:16:37
【问题描述】:
nowaker@nwkr-newmbp ~/projects/my-project (git)-[version-pin] % git checkout master
error: The following untracked working tree files would be overwritten by checkout:
    Readme.md
Please move or remove them before you switch branches.
Aborting
% git status
On branch version-pin
nothing to commit, working tree clean

当前分支和 master 之间的唯一区别是我在当前分支上将文件名从 Readme.md 重命名为 README.md。 master 仍然有 Readme.md。因为默认的 Mac OSX 文件系统被格式化为不区分大小写,git 认为我在工作树中有未跟踪的文件,而我没有。

解决此问题的最佳方法是什么?

【问题讨论】:

    标签: git macos version-control filesystems


    【解决方案1】:

    使用git checkout --force

    % git checkout master --force
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    

    【讨论】:

      【解决方案2】:

      结帐https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase

      你可能想改变你的 git 配置

      git config --global core.ignorecase true
      

      【讨论】:

      • 不要那样做:Git 在您创建存储库时根据操作系统/文件系统的行为设置core.ignorecase 自身。这是一个信息标志,Git 使用它来了解 Git 执行各种文件系统操作时会发生什么。如果您更改了它,但操作系统仍然表现相同,那么您就是在对 Git 撒谎,如果 Git 然后行为不端,那是您的错。 :-) 这就是为什么您链接到的文档说“修改此值可能会导致意外行为。”
      【解决方案3】:

      如果这两个文件在可预见的将来不会更改,您可以使用git update-index --assume-unchanged $pathgit update-index --skip-worktree $path 来抑制错误。后期可以使用--no-assume-unchanged--no-skip-worktree取消效果。

      但是,最好的方法是将其中一个重命名为不同的名称,然后在区分大小写的系统上提交更改。

      【讨论】:

        猜你喜欢
        • 2015-08-14
        • 2018-12-11
        • 2020-12-07
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        相关资源
        最近更新 更多