2013-04-11 53 views
12

我已經通過關注this tutorial將SVN存儲庫轉換爲Git。現在似乎無法提取像this answer中建議的子存儲庫。Git不會恢復或提交它認爲被修改的文件

原諒長文章,但大部分文本是格式良好的git輸出。

操作系統:Windows 8 命令行:MinGW的 Git版本:1.8.1.msysgit.1

中提取subrepository似乎並沒有工作,除非你有一個乾淨的臨時區域和沒有修改的過程文件。

git status告訴我,我有一個修改過的文件,即使這是一個新鮮的SVN導入。好的,讓我們試着擺脫它。

嘗試並恢復文件。

user$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: folder with space/folder/toolbar.png 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

user$ git checkout -- "folder with space/folder/toolbar.png" 

user$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: folder with space/folder/toolbar.png 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

這並沒有奏效,但我並不在乎是否提交,所以我會嘗試下一步。

user$ git commit -a -m "Testing if committing fixes it" 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: folder with space/folder/toolbar.png 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

user$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: folder with space/folder/toolbar.png 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

通過跳過暫存提交不起作用,所以讓我們先嚐試着手。

user$ git add "folder with space/folder/toolbar.png" 

user$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: folder with space/folder/toolbar.png 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

無法正常工作,所以我很難過...去問一個更聰明的人。

我是git的新手,但很熟悉汞,並且已經閱讀this online tutorial以啓動自己。

我完全有可能搞砸了一個簡單的命令。

已經嘗試過: 我環顧四周,解決我的具體問題,但有一點運氣。我偶然發現了this answer這似乎相關,但不能解決我的問題。

編輯:可能有趣的事 這是讓我困惑的部分。前段時間我推出了這個回購協議進入在線資源庫。新鮮的克隆後,回購仍然認爲文件被修改(即git status返回相同的結果,我已經設置git config --global core.autocrlf false並驗證通過運行git config --global core.autocrlf確實返回false)。

編輯2:解決發現的,但問題仍然沒有完全理解 我已經成功通過簡單地從系統中,臨時區域刪除文件,然後提交更改修復庫。 之後,我將文件複製回來並將其提交到存儲庫。

問題雖然固定,但只會讓我更困惑。

當我玩弄移除文件時,我注意到如果我重置版本庫到最後一次提交已刪除文件的HEAD,git status將表示沒有任何更改,並且該文件未被跟蹤,但是文件將被恢復在我的工作樹。這是奇怪的,因爲它被標記爲在git中被刪除...

只有在第二次刪除它後,即使git不再記住它,我是否設法實際刪除它,以便git resetgit reset --hard不會恢復該文件。

如果有人能請解釋我是如何陷入這種狀態下,如果是在Git中或正常行爲的錯誤我將不勝感激。

我suspitions 我已經失去了我使用,但發生了什麼事去像這樣的命令序列: 該文件是Images/toolbar.png,我已經航行到Images文件夾。

之後我刪除它從文件系統Git的檢測,像這樣的變化:

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: toolbar.png 
#  deleted: ../images/toolbar.png 
# 

注意一個事實,即images文件夾不大寫!這是在Windows中運行,忽略路徑情況。我懷疑這可能是問題的一部分...

我真的很困惑,但我的問題了。所以這篇文章只是作爲一種好奇心,儘管我無法複製它在某處從SVN轉換中的行爲。

+0

看起來好像git可能沒有正確處理你的文件。是否有可能嘗試刪除文件夾名稱中的空格,並查看是否可以修復它? – Devin 2013-04-11 04:24:05

+0

可能是的,簡單不...我會嘗試。 – nonsensickle 2013-04-11 04:27:46

+0

現在,我試圖拉一個乾淨的存儲庫,但我懷疑這不會幫助。在嘗試完成後,我會嘗試刪除空間,但版本庫不小。另外,爲什麼git會遇到路徑中的空間問題? – nonsensickle 2013-04-11 04:42:47

回答

9

我以前有過類似的問題。

對此文件或其目錄中的任何位置進行了更改的大小寫?

我有一個大寫字母改爲全小寫的目錄(假設它從/Foo/foo)。它給了我你所描述的所有相同的問題。

每當我修改過的文件,它給了我類似的輸出:

#  modified: bar.txt 
#  modified: ../Foo/bar.txt 

我也有同樣的問題提交或復位沒有產生任何結果,其中。

我認爲這個問題的原因是Windows文件路徑是不區分大小寫,但Unix上的有。由於很多像Git這樣的命令行工具都是在Unix-y系統上開發的,所以它們有時無法很好地處理這種差異,並且在將文件添加爲Foo/bar.txtfoo/bar.txt時可能會感到困惑。我認爲這讓Git認爲有兩個不同的文件,實際上只有一個文件。

我的最終修復是一樣的你,從歷史刪除整個目錄,然後重新添加它(永不再千變萬化大小寫)。這也造成了你所描述的同樣古怪的地方,在它拿走之前我必須將它刪除兩次。

不管怎樣,我知道這是不是一個明確的答案,但我既然已經能夠重現問題,所以我敢肯定這是什麼原因造成的(至少對我來說)。

+0

這正是我所經歷的。我不知道它發生了什麼,但我確信git通過SHA1校驗和發現它是相同的文件,但是因爲目錄不同而感到困惑......無論哪種方式,你都是唯一接近的答案我有什麼。我很樂意接受它作爲答案,尤其是如果你能重現它。 – nonsensickle 2013-09-09 06:00:49

3

我有一個類似的問題,導致有兩個文件與我的電腦同名,看到它。

消息我一直得到:

# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: images/contact_seller.GIF 
# 

它的發生是因爲回購的初始提交從被格式化區分大小寫,並出現在我的iMac已格式化不區分大小寫錯誤的MacBook完成。

在區分大小寫的機器,你可以看到兩個文件

SwedishChef$ ls images/contact_seller* 
images/contact_seller.GIF images/contact_seller.gif 

如此混帳不得不做一些事情這不是另一臺計算機上有效。

我只需重命名文件並提交這些更改。