簡體   English   中英

文件夾大小寫在分支交換機上沒有改變

[英]Folder capitalization not changing on branch switch

我正在處理一個 python 項目,想將一個(包)文件夾重命名為小寫字母,假設從Myackagemypackage 由於 git 區分大小寫而 Windows 不區分大小寫,因此我遵循了從這里和特別是這里獲取的解決方案。

我的程序如下:

git mv Mypackage tmp
git mv tmp mypackage
git commit -m "Change capitalization of package name"

這成功地將文件夾Myackage更改為mypackage (對於 git 和 Windows)。 但是如果我切換到另一個分支,我希望文件夾會變回Mypackage (用大寫字母!),就像以前一樣。 背景是,包的所有導入在 python 中也是區分大小寫的,我需要這個 renamng 伴隨着導入的適應。

我已經嘗試了兩者, core.ignorecase設置為truefalse ,但無論我嘗試什么,如果我簽出一個較舊的分支,文件夾仍然是小寫字母( mypackage )的形式,並且我在 python 中遇到了問題。

更新:我已經設置了一個只有一個文件夾和一個文件的小示例,並且可以成功更改文件夾的大小寫。 它還顯示了所需的行為,即在分支切換時 Windows 中文件夾的大小寫發生變化,但這仍然不適用於我的 python 項目。

難道,例如,子模塊,在這里發揮作用嗎?

更新 2:我已經通過以下方式檢查了兩種情況的case sensitivity屬性:

fsutil.exe file queryCaseSensitiveInfo .

兩個文件夾都聲稱不區分大小寫。 仍然為一個項目文件夾名稱大寫更改,但對於另一個文件夾沒有。

屬性case sensitivity在 Windows 10 上可用,但在 2018 年 4 月更新之后,只會影響您應用它的特定文件夾。 該文件夾的子文件夾不會自動繼承它。 但是,如果您使用 WSL 創建文件夾,則默認情況下會啟用該文件夾並以這種方式在 Windows 中可用。 [1]

雖然可以使用 Git Unite [2]工具將當前文件夾的大小寫與 git 索引進行匹配。

如果您使用重命名方法,請嘗試將其與“使用 git 重命名文件和文件夾” [3] 中的git 命令一起使用

git mv foldername tempname && git mv tempname folderName

我找到了一種重現您行為的方法:

如果我的 CaSeD 文件夾包含一些額外的文件(例如未跟蹤的文件),當我在提交之間跳轉時,git 不會更改我的文件夾名稱的大小寫。

您的設置是這種情況嗎?


如果這是您的問題:您可以使用post-checkout掛鈎,它會根據結帳后存儲在HEAD內容強制重命名文件夾。

從提交HEAD獲取目錄路徑的完整列表的一種方法是:

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

如果將此列表與從本地文件系統中提取的類似列表( ls -rfind . -type d ?來自os.*一些 python 函數?)匹配,您可以發現哪些文件夾需要重新調整大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM