Windows 能夠通過在檔案夾上使用以下命令來處理區分大小寫的檔案:
fsutil.exe file setCaseSensitiveInfo "C:\examplefolderpath" enable
但是,問題在于它不會自動應用于子檔案夾......有一種方法可以使用 PowerShell 將其應用于子檔案夾,但它們必須首先實際存在。因此,我正在尋找一種方法來檢索 git repo 的檔案夾結構,而無需實際下載其任何檔案。只有在創建檔案夾結構并運行 PowerShell 命令后,我才想簽出檔案。
有沒有一種方便的方法可以單獨使用 git 命令來做到這一點?
如果沒有,PowerShell 有沒有辦法從裸 git 存盤庫(使用git clone --bare)中檢索檔案夾結構并設定檔案夾結構?(對于我正在做的一個副專案,知道如何使用 Go 來做到這一點也很有用,除非單獨的 git 命令可以做到這一點。但是,這并不像知道如何使用 PowerShell 那樣重要.)
uj5u.com熱心網友回復:
Git 不提供僅檢出目錄而不檢出檔案的方法。不過,您有一些選擇:
- 在 WSL 中使用 Git 創建存盤庫,根據本文,這意味著它們將自動區分大小寫。
- 避免運行
git checkout并找到檔案層次結構git ls-tree -rd HEAD(或您想要的任何修訂而不是HEAD),然后生成這些目錄,然后才運行git checkout. 但是,請注意 PowerShell 管道會破壞通過它們傳遞的資料,因此在使用 Git 時這不是一個好主意。
如果您希望 Windows 版 Git 本地支持此功能,您可以轉到他們的問題跟蹤器并要求將其作為功能本地支持。我不知道這需要多少作業,而且我找不到所需 API 的檔案,因此不清楚它是否可以在 Git 中合理實作。
uj5u.com熱心網友回復:
感謝 bk2204 的回答為我指明了正確的方向……在使用 `` 創建了一個裸倉庫之后,我可以使用這個函式創建目錄結構:
function Invoke-GitCloneCS {
[Alias('igccs')]
param([Parameter(Mandatory)] $url)
# Terminate function if user isn't admin
if (${env:=::}) { 'Function must be ran as administrator!'; return }
# Normalize URL so the variable ends in .git
$url = ("$url" -replace '.git$') -replace '$','.git'
# Derive repo name from $url
$repo = $url.Split('/')[-1] -replace '.git$'
git clone $url --no-checkout
# Navigate to repo directory and apply setCaseSensitiveInfo to it
Set-Location $repo -pv D | & { fsutil.exe file setCaseSensitiveInfo $D enable }
# Retrieve the folder structure
(git ls-tree --name-only -rd HEAD).ForEach({
# Create each folder listed, and apply setCaseSensitiveInfo to it
New-Item $_ -Type D -pv D | & { fsutil.exe file setCaseSensitiveInfo $D enable }})
git checkout
Set-Location ..
}
現在,這不是完整的命令,我仍然需要在所有
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384900.html
