【问题标题】:Changing case of Folder via Git bash on Windows在 Windows 上通过 Git bash 更改文件夹的大小写
【发布时间】:2013-01-12 18:34:36
【问题描述】:

我需要更改文件夹和文件的大小写。我尝试的第一件事是重命名文件夹,但 Git 没有接受更改。所以我尝试使用git mv -f controller Controller 但它说:

fatal: renaming 'application/classes/controller failed: Permission denied

我已尝试设置全局忽略大小写标志:

git config --global core.ignorecase false

但它仍然不起作用。有些人建议将文件夹移出 repo,删除,然后重新添加,但是当其他人拉 repo 时,这个更改会被采纳吗?还有什么我可以尝试的吗?

编辑:它适用于文件,但不适用于文件夹。

【问题讨论】:

  • 权限被拒绝可能只是因为您有一个资源管理器窗口或命令行客户端,该文件夹将此文件夹作为当前目录,因此无法重命名。确保不是这种情况,然后重试。
  • 问题是Windows文件系统确实是保留大小写的。将 controller 移动到 Controller 会将其移动到自身中。可能解决方案是将其移至临时名称,然后移至正确的名称。或者使用一个像样的操作系统;-)
  • @MichaelWild NTFS 是保留大小写的,它可以很好地处理改变大小写的重命名。肯定有其他东西挡住了东西,可能是 Daniel 建议的某个资源管理器窗口。
  • 可能是git-mv(或者可能是较低级别的 MSYS 甚至 CRT 库)实现重命名的方式存在问题。我这里刚试过,重命名也失败了。但是,使用临时的就可以了。
  • 移动文件夹时出现问题。更改文件的大小写有效。

标签: windows git


【解决方案1】:

除了执行以下操作之外,我无法解决此问题

  1. 在文件夹名称大小写更改之前从提交分支,作为临时分支只是为了解决此问题。
  2. Cherry Pick 提交以在提交前解决文件夹大小写更改。
  3. 重置旧分支这个新的临时分支最终提交。
  4. 删除临时分支。

【讨论】:

    【解决方案2】:

    确保关闭 Visual Studio 以及与该路径相关的所有 Windows 资源管理器文件夹。

    【讨论】:

    • 我的目录中没有任何要重命名的文件打开,所以我认为我没问题。但是,VSCode 仍在以某种方式使用它。关闭 VSCode 对我有用。
    【解决方案3】:

    确保在使用中间文件夹重命名文件夹后将更改添加到索引,如下所示。

    git mv oldfolder newfolder
    
    git add -u newfolder
    
    git commit -m "changed the foldername whaddup"
    

    Reference

    【讨论】:

    • 根据我的经验,git mv 已经做好了准备工作。这是旧版本吗? (2014...)
    【解决方案4】:

    在 cmets 的总结中,您必须通过中间临时名称重命名目录。例如

    git mv controller Controller-tmp
    git mv Controller-tmp Controller
    

    我认为这与 rename(2) 的 MinGW 实现不支持此操作有关。请参阅此 thread、有关 CRT rename 实现和 MoveFileEx 函数的 MSDN 文档。

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 2012-05-18
      • 2022-01-11
      • 1970-01-01
      • 2018-04-02
      • 2021-04-05
      相关资源
      最近更新 更多