2012-10-25 168 views
2

我試圖把Linux機器上的一個提交拉到Windows機器上。我收到此錯誤信息:git pull errors

error: git checkout-index: unable to create file my/folder/name/: (Invalid argument) 

的Linux機的出現似乎是這樣的2 「姓名」文件夾名爲:'name''Name'。即使將它們聯合在'name'之後並重新提交,我仍然收到相同的錯誤消息。

在Windows上我有git版本1.7.3.1.msysgit.0,在Linux上我有git 1.7.5.4版本。

我確實發現了一個bunchofseeminglyrelated SO這樣的問題,但沒有一個有明確或相關的解決方案。

更新:這些文件託管在遠程託管服務上,以便Windows和Linux計算機都可以從遠程回購站獲取。

+0

而這可能無法與http://stackoverflow.com/questions/1209902/git-checkout-and-reset-on-windows-occasionally-shows-random-files-have-changed?路徑或文件名中是否有特殊字符? (如https://github.com/thoughtbot/paperclip/pull/621或http://code.google.com/p/msysgit/issues/detail?id=80所示) – VonC

+0

不是我能看到的。有問題的名字只是'測試'。 –

+0

當你說「*將它們統一在'name' *下」時,你是否添加了一個修復問題的新提交,或者是否重寫了歷史記錄,以使兩個單獨版本的'name'永遠不存在? – nickgrim

回答

2

回答我自己的問題,由於解決方案的怪異。

第一步是@Don Branson,@VonC和@robinst建議。我在Windows機器上的一個新文件夾中做了一個乾淨的clone
這似乎沒有工作,和git返回完全相同的錯誤。

但是git status將違規文件夾顯示爲「已刪除」,即使名稱相同的文件夾確實存在並且包含正確的文件。
然後我上演並提交了「已刪除」文件夾,推送到遠程回購。並從我原來的回購協議中提交。 瞧瞧該分支已正確更新。

+0

優秀!良好的解決方法。 +1 – VonC

+1

優秀。我只是嘗試在本地進行復制,並且無法重複結果。 git 1.7.1在Linux主目錄上,git 1.7.5.1在Windows目標上,''git clone''只需將我的目錄''m''和''M''放入一個名爲''M'的目錄中'。有趣。 –

+0

@唐布蘭森,試驗的讚美。在統一它們之前,嘗試提交'm'和'M',然後重新提交統一文件夾和刪除文件夾。 –

1

當你git pull git將按順序應用提交。因此,即使目錄通過最終提交進行合併,它們也不會在提交到HEAD的提交中。我會在Windows機器上嘗試新的git克隆。

+0

Git不檢查每個單獨的提交(一個接一個),它直接檢出最終狀態。 – robinst

+0

@robinst * apply *!= *退房* – nickgrim

+0

@robinst爲了快進,你是對的。但我不認爲這是非快進的情況。 –

1

問題可能是Git在舊目錄Name被刪除之前首先嚐試創建新文件(使用新名稱name)。因此,當它嘗試創建新目錄name時,它不會注意到Name已經存在,因爲它將它們區分大小寫。

你可以嘗試以下的(當然是有一個乾淨的工作目錄):

  1. 遞歸刪除my/folder/Name(原來的位置)。
  2. git reset --hard origin/branchname(你正在拉的分支)。

另外,只要做一個新的克隆。

+0

不是。刪除了違規目錄,並重新設置。仍然是相同的錯誤信息。 –

+0

@robinst您在這裏說的是同樣的事情 - 沿途會出現名稱衝突,並且新的克隆可能會解決問題。 –

+0

@robinst:一個乾淨的克隆產生相同的錯誤。 –