簡體   English   中英

git checkout錯誤:無法創建文件

[英]git checkout error: unable to create file

在將git存儲庫從Linux克隆到Windows系統時,我在結帳階段遇到以下錯誤:

$ git clone gituser @ serveraddr:/git/git_repo.git git_WA
克隆到'git_WA'......
gituser @ serveraddr的密碼:
remote:計數對象:500846,完成。
remote:壓縮對象:100%(118676/118676),完成。
遠程:總計500846(delta 307739),重用483023(delta 291136)
接收物體:100%(500846/500846),907.54 MiB | 完成9.04 MiB / s。
解決增量:100%(307739/307739),完成。

錯誤:無法創建文件RealR ******************************************* ************************************************** ************************************************** ************************************************** ************* validation.xml(沒有這樣的文件或目錄)
簽出文件:100%(441329/441329)
簽出文件:100%(441329/441329),完成。
完成。

案例2:克隆為裸倉庫,從本地裸倉庫中檢出全部=>相同的錯誤。

案例3:直接克隆C:\\中的倉庫,結賬成功,無錯誤。

- >看起來像文件名/文件路徑長度限制的問題。

案例4:從SVN repo簽出相同的文件。 能夠在任何位置結賬,沒有任何問題。 因此從Windows端沒有問題。 (是的,我在SVN和GIT中都有數據,我只是從SVN遷移到GIT)。

因此,問題必須在msysgit內,一些文件路徑長度限制。 可以調整gitclient / msysgit中的路徑長度嗎?

Edit1: 所有操作都嘗試使用TortoiseGIT客戶端v1.8.0git-bash:git版本1.8.0.msysgit.0
Edit2:添加了克隆時使用的實際命令。

將項目簽出到具有67-(Windows)或76-(cygwin)字符庫路徑的Windows目錄時,我遇到了類似的問題 - 當添加到簽出文件的路徑長度時,它超出了Windows的路徑 - 長度限制:

git checkout -f HEAD
error: unable to create file <194-character filepath> (No such file or directory)
fatal: cannot create directory at '<187-character directory path>': No such file
or directory

我通過將git存儲庫簽出到c:\\ git解決了這個問題 ,它的長度為6或15個字符,保持Windows限制下的最大路徑長度。

嘗試:

git config --system core.longpaths true

這將允許它檢查文件,即使文件路徑較長。 這個問題就是當你試圖刪除它時,因為Windows不允許刪除超過允許閾值的路徑。 解決方法是重命名本地存儲庫中的文件夾,以減少路徑的總長度。 例如,alpha / beta / gamma / universe.txt的路徑可以限制為1/2/3 / universe.txt,因此它的長度在windows filesize閾值之下。

許多Windows API限制為260個符號用於文件路徑名。 因此git無法創建名稱超過260個符號的文件。 NTFS文件系統實際上支持更長的名稱(32k),但沒有簡單的方法來允許程序的長名稱。

解決方法1:將項目移動到更靠近磁盤根目錄的新位置。 優點:

  • 一切都應該工作正常(假設沒有路徑更長的文件260)

壞處:

  • 您必須更改項目位置

解決方法2:從更靠近磁盤根目錄的文件夾創建項目文件夾的Junction ,並從聯結文件夾執行git clone。 您可以使用mklink命令或Link Shell Extension執行此操作。

優點:

  • 您可以擁有長文件名(大於260)
  • 您可以保留項目位置
  • 您可以在初始克隆后安全地刪除聯結(如果您不需要處理在原始位置違反260符號限制的文件)

壞處:

  • 交叉點的完整文件名仍然必須少於260個符號。 否則此解決方案將無濟於事。
  • 如果要用long修改文件

考慮到類似的問題 ,我看到的唯一建議是:

解決方法:使用http://www.cygwin.com/

或者至少檢查msysgit的git-bash會話中的結賬是否更好。


2015年5月更新(2年后):

注意: 最新的2.4.1 git-for-windows建議

core.longpaths::

在Git for Windows中為內置命令啟用長路徑(> 260)支持。
默認情況下禁用此選項,因為Windows資源管理器,cmd.exe和Git for Windows工具鏈(msys,bash,tcl,perl ...)不支持長路徑。
只有在你知道自己在做什么並且准備好生活在一些怪癖時才啟用它。

使用Windows PowerShell。 為我工作。

暫無
暫無

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

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