文件夹大小写在分支开关上没有改变
Folder capitalization not changing on branch switch
我正在做一个 python 项目,想将一个(包)文件夹重命名为小写字母,比方说从 Myackage
到 mypackage
。由于 git 区分大小写而 Windows 不区分大小写,因此我遵循了 here and espacially here.
中的解决方案
我的程序如下:
git mv Mypackage tmp
git mv tmp mypackage
git commit -m "Change capitalization of package name"
这会将文件夹 Myackage
成功更改为 mypackage
(对于 git 和 Windows)。但是,如果我切换到另一个分支,我希望该文件夹像以前一样改回 Mypackage
(大写字母!)。背景是,包的所有导入在 python 中也是区分大小写的,我需要这个重命名伴随着导入的适应。
我都试过了,core.ignorecase
设置为 true
和 false
,但无论我尝试什么,如果我检出一个较旧的分支,该文件夹的形式仍然是小写字母 (mypackage
) 和我 运行 内的问题 python.
更新:
我已经建立了一个只有一个文件夹和一个文件的小例子,并且可以成功地改变文件夹的大小写。它还显示了所需的行为,即在分支切换时 Windows 中文件夹的大小写发生变化,但这仍然不适用于我的 python 项目。
会不会是,例如,子模块在这里发挥作用?
更新 2:
我已经通过以下方式检查了两种情况的 case sensitivity
属性:
fsutil.exe file queryCaseSensitiveInfo .
两个文件夹都声称,区分大小写已停用。仍然对于一个项目文件夹名称大小写更改,但对于另一个文件夹不是。
我找到了重现您的行为的方法:
如果我的 CaSeD 文件夹包含一些额外的文件(例如未跟踪的文件),git 将不会在我在提交之间跳转时更改我的文件夹名称的大小写。
您的设置是否属于这种情况?
如果这是您的问题:您可以使用 post-checkout
挂钩,它会在结帐后根据存储在 HEAD
中的内容强制重命名文件夹。
从提交 HEAD
获取目录路径的完整列表的一种方法是:
git ls-tree --name-only -d -r HEAD
如果您将此列表与从本地文件系统中提取的类似列表匹配(ls -r
?find . -type d
?os.*
中的某些 python 函数?),您可以发现哪些文件夹需要资本重组。
属性 case sensitivity
在 Windows 10 上可用,但在 2018 年 4 月更新之后并且仅影响您应用它的特定文件夹。它不会被该文件夹的子文件夹自动继承。但是,如果您使用 WSL 创建文件夹,它默认处于启用状态,并且以这种方式可供 Windows 使用。 [1]
尽管您可以使用 Git Unite [2] 工具将当前文件夹的大小写与 git 索引相匹配。
如果您使用重命名方法,请尝试将其与 git 命令一起使用,例如 "Rename files and folders with git"[3]
git mv foldername tempname && git mv tempname folderName
我正在做一个 python 项目,想将一个(包)文件夹重命名为小写字母,比方说从 Myackage
到 mypackage
。由于 git 区分大小写而 Windows 不区分大小写,因此我遵循了 here and espacially here.
我的程序如下:
git mv Mypackage tmp
git mv tmp mypackage
git commit -m "Change capitalization of package name"
这会将文件夹 Myackage
成功更改为 mypackage
(对于 git 和 Windows)。但是,如果我切换到另一个分支,我希望该文件夹像以前一样改回 Mypackage
(大写字母!)。背景是,包的所有导入在 python 中也是区分大小写的,我需要这个重命名伴随着导入的适应。
我都试过了,core.ignorecase
设置为 true
和 false
,但无论我尝试什么,如果我检出一个较旧的分支,该文件夹的形式仍然是小写字母 (mypackage
) 和我 运行 内的问题 python.
更新: 我已经建立了一个只有一个文件夹和一个文件的小例子,并且可以成功地改变文件夹的大小写。它还显示了所需的行为,即在分支切换时 Windows 中文件夹的大小写发生变化,但这仍然不适用于我的 python 项目。
会不会是,例如,子模块在这里发挥作用?
更新 2:
我已经通过以下方式检查了两种情况的 case sensitivity
属性:
fsutil.exe file queryCaseSensitiveInfo .
两个文件夹都声称,区分大小写已停用。仍然对于一个项目文件夹名称大小写更改,但对于另一个文件夹不是。
我找到了重现您的行为的方法:
如果我的 CaSeD 文件夹包含一些额外的文件(例如未跟踪的文件),git 将不会在我在提交之间跳转时更改我的文件夹名称的大小写。
您的设置是否属于这种情况?
如果这是您的问题:您可以使用 post-checkout
挂钩,它会在结帐后根据存储在 HEAD
中的内容强制重命名文件夹。
从提交 HEAD
获取目录路径的完整列表的一种方法是:
git ls-tree --name-only -d -r HEAD
如果您将此列表与从本地文件系统中提取的类似列表匹配(ls -r
?find . -type d
?os.*
中的某些 python 函数?),您可以发现哪些文件夹需要资本重组。
属性 case sensitivity
在 Windows 10 上可用,但在 2018 年 4 月更新之后并且仅影响您应用它的特定文件夹。它不会被该文件夹的子文件夹自动继承。但是,如果您使用 WSL 创建文件夹,它默认处于启用状态,并且以这种方式可供 Windows 使用。 [1]
尽管您可以使用 Git Unite [2] 工具将当前文件夹的大小写与 git 索引相匹配。
如果您使用重命名方法,请尝试将其与 git 命令一起使用,例如 "Rename files and folders with git"[3]
git mv foldername tempname && git mv tempname folderName