Windows 分支开关上的文件夹大小写未更改

Windows 分支开关上的文件夹大小写未更改,windows,git,case-sensitive,case-insensitive,Windows,Git,Case Sensitive,Case Insensitive,我正在从事一个python项目,希望将(包)文件夹重命名为小写字母,比如从Myackage到mypackage。由于git区分大小写,而Windows则不区分大小写,因此我遵循了从和特别是从中获得的解决方案 我的程序如下: git mv Mypackage tmp git mv tmp mypackage git commit -m "Change capitalization of package name" 这将成功地将文件夹mypackage更改为mypackage(适用于git和Win

我正在从事一个python项目,希望将(包)文件夹重命名为小写字母,比如从
Myackage
mypackage
。由于git区分大小写,而Windows则不区分大小写,因此我遵循了从和特别是从中获得的解决方案

我的程序如下:

git mv Mypackage tmp
git mv tmp mypackage
git commit -m "Change capitalization of package name"
这将成功地将文件夹
mypackage
更改为
mypackage
(适用于git和Windows)。但是,如果我切换到另一个分支,我希望该文件夹会像以前一样变回
Mypackage
(大写!)。背景是,在python中,包的所有导入也都是区分大小写的,我需要将此重命名与导入的自适应一起进行

我尝试过这两种方法,
core.ignorecase
设置为
true
false
,但无论我尝试什么,如果我签出一个较旧的分支,文件夹仍然以小写字母的形式(
mypackage
)存在,并且在python中遇到问题

更新: 我建立了一个只有一个文件夹和一个文件的小示例,可以成功地更改文件夹的大小写。它还显示了所需的行为,即在切换分支时,Windows中文件夹的大小写会发生变化,但这仍然不适用于我的python项目

例如,子模块是否会在这里发挥作用

更新2: 我已通过以下方式检查了这两种情况的
区分大小写属性:

fsutil.exe file queryCaseSensitiveInfo .

这两个文件夹都声明,区分大小写已停用。一个项目文件夹名称的大小写仍在更改,但另一个文件夹的大小写未更改。

我找到了一种重现您行为的方法:

如果我的CaSeD文件夹包含一些额外的文件(例如未跟踪的文件),那么当我在提交之间跳转时,git不会更改文件夹名称的大小写

在您的设置中是这种情况吗


如果这是您的问题:您可以使用
签出后
钩子,该钩子在签出后根据
头中存储的内容强制重命名文件夹

从提交
HEAD
获取目录路径完整列表的一种方法是:

git ls-tree --name-only -d -r HEAD

如果您将此列表与从本地文件系统提取的类似列表相匹配(
ls-r
find.-type d
?来自
os.*
?)的一些python函数),您可以发现哪些文件夹需要调整资本结构。

我找到了一种方法来重现您的行为:

如果我的CaSeD文件夹包含一些额外的文件(例如未跟踪的文件),那么当我在提交之间跳转时,git不会更改文件夹名称的大小写

在您的设置中是这种情况吗


如果这是您的问题:您可以使用
签出后
钩子,该钩子在签出后根据
头中存储的内容强制重命名文件夹

从提交
HEAD
获取目录路径完整列表的一种方法是:

git ls-tree --name-only -d -r HEAD

如果将此列表与从本地文件系统提取的类似列表相匹配(
ls-r
find.-type d
?来自
os.*
?)的一些python函数),您可以发现哪些文件夹需要调整资本结构。

Windows 10上提供了区分大小写的属性,但在2018年4月更新之后,该属性仅影响您应用该属性的特定文件夹。该文件夹的子文件夹不会自动继承它。但是,如果您使用WSL创建文件夹,它在默认情况下处于启用状态,并且以这种方式对Windows可用

尽管您可以使用Git Unite工具将当前文件夹的大小写与Git索引匹配

如果使用重命名方法,请尝试将其与git命令一起使用,如“使用git重命名文件和文件夹”


属性
区分大小写
在Windows 10上可用,但在2018年4月更新之后,仅影响应用该属性的特定文件夹。该文件夹的子文件夹不会自动继承它。但是,如果您使用WSL创建文件夹,它在默认情况下处于启用状态,并且以这种方式对Windows可用

尽管您可以使用Git Unite工具将当前文件夹的大小写与Git索引匹配

如果使用重命名方法,请尝试将其与git命令一起使用,如“使用git重命名文件和文件夹”


我在我的机器上看到了你期望的行为,我不知道如何复制另一个。您使用什么版本的git?问题是,如果所有内容都不区分大小写,那么变更分支应该如何操作?如果您不区分大小写,则Mypackage和Mypackage是相同的,这就是为什么更改Mypackage和Mypackage之间的分支不会更改的原因。我看到了您在我的计算机上期望的行为,我不知道如何复制另一个。您使用什么版本的git?问题是,如果所有内容都不区分大小写,那么变更分支应该如何操作?如果您不区分大小写,则Mypackage和Mypackage是相同的,这就是为什么更改Mypackage和Mypackage之间的分支不会更改的原因。似乎这就是为什么文件夹资本化不会更改的原因。如果一个文件没有被跟踪,但是正在侦听
.gitignore
,那么这甚至是正确的。我为签出后脚本添加了一个起点,列出目录名并找出错误的目录名。这不是一个令人满意的解决方案,但这是我能想到的唯一系统的方法。似乎这就是为什么文件夹资本化没有改变的原因。如果一个文件没有被跟踪,但是正在侦听
.gitignore
,那么这甚至是正确的。我为签出后脚本添加了一个起点,列出目录名并找出错误的目录名。这不是一个令人满意的解决方案,但这是我能想到的唯一系统的方法。