2013-10-03 58 views
8

GIT開關支路

git status 
# On branch master 
nothing to commit, working directory clean 

開始時,然後切換到一個新的分支和運行git status混帳有時會抱怨隨機後切換到另一個分支

git checkout somebranch 

抱怨隨意更改的文件更改文件。如果I DIFF與git diff文件會先顯示整個文件已經撕去了所有行,然後再

- someline 
- someotherline 
+ someline 
+ someotherline 

然後運行git diff --ignore-space-at-eol .不會顯示任何改變的文件導致我相信這是結束的問題某處線加在git repo裏面,因爲如果我用選擇的合併工具(Beyond Compare)對文件進行二進制比較,它會告訴我這些文件是二進制文件,即使git抱怨它們不一樣,我甚至會做一個十六進制比較而且他們確實是相同的,那麼爲什麼git會將他們視爲已更改?

這個倉庫是在舊的svn庫,將其轉變按照GitHub的指引https://help.github.com/articles/importing-from-subversion後,我們增加了我們的.gitattributes文件到看起來像這樣的解決方案:

# .gitattributes 
# Auto detect text files and perform LF normalization 
* text=auto 

# Custom for Visual Studio 
*.cs  diff=csharp 
*.sln merge=union 
*.csproj merge=union 
*.vbproj merge=union 
*.fsproj merge=union 
*.dbproj merge=union 

# Standard to msysgit 
*.doc diff=astextplain 
*.DOC diff=astextplain 
*.docx diff=astextplain 
*.DOCX diff=astextplain 
*.dot diff=astextplain 
*.DOT diff=astextplain 
*.pdf diff=astextplain 
*.PDF diff=astextplain 
*.rtf diff=astextplain 
*.RTF diff=astextplain 

添加.gitattributes文件後我們也跟着從https://help.github.com/articles/dealing-with-line-endings githubs指南固定行尾

對球隊每個人都運行在Windows上,大家對團隊使用core.autocrlf =真實,每個人都使用至少

git --version 
git version 1.8.3.msysgit.0 

這裏有什麼問題? git抱怨的文件是完全隨機的,它發生在整個團隊中的每個人。也不可能通過一個git checkout文件來恢復它所抱怨的文件 - 這還沒有真正改變。

回答

0

首先,不要混合舊方案(core.autocrlf)和新方案(.gitattributes)。

要在本地解決問題的文件,你可以做到以下幾點:

git rm --cached -r . 
git reset --hard 
+1

'.gitattributes'應該覆蓋開發者在'core.autocrlf'中設置的任何內容,這就是我們首先使用.gitattributes的原因。我們已經通過跟隨我在問題中提供的github的鏈接完成了您提出的修復,但我們仍然看到了問題。 –

4

我加入由Visual Studio在我的倉庫生成的默認.gitattributes文件後有同樣的問題。您可以通過註釋掉.gitattributes以下行解決這個問題:

# * text=auto 

只提交該文件和所有其他雜散更改的文件現在將從您的局部變化列表中消失。

注意:auto選項指示git存儲所有文件,LF行在內部結束。當你檢出這些文件時,行結束符被轉換回CRLF,所以我們運行git diff,它會看到從庫中的LF和結算版本中的CRLF之間的差異。對我來說就像一個錯誤。