2016-04-19 64 views
2

Issue: Bitbucket顯示整個文件已經改變,即使我沒有看到任何差異。這些文件中沒有合併衝突。Bitbucket CRLF問題?

詳情: 我創建了一個衝刺分支(名爲「sprintbranch」)和開發人員創建一個特性分支從衝刺分支(名爲「featurebranchX」)。我開始將功能分支合併回sprint分支,並在實現功能時進行合併。現在有在那裏我遇到一個問題,兩個方案:

  1. 開發人員創建一個拉入請求合併featurebranch1到sprintbranch
  2. 如果有合併衝突,開發商合併sprintbranch到featurebranch1並創建一個pull請求合併featurebranch1成sprintbranch。

兩次bitbucket都顯示整個文件已經改變。並沒有合併衝突。

發生這種情況時,我無法進行代碼審查,因爲我不知道開發人員修改了哪些特定行。此外,我在這一點上失去了歷史 - 回顧我無法弄清楚實施或合併到sprint分支中的內容。

我的猜測是問題是與行結束。與CRLF有關。但是,當我提交我的工作時,我確實看到相應的行結束符正在自動使用(通過git或SmartGit之類的工具)

如何解決此問題,以防止它繼續發生?

更新:

我剛剛發現我可以拉請求忽略CR LF差異的URL的末尾追加一個查詢字符串w=1

但是這些文件仍然存在於提交中,當我將它合併回來時,它會包含這些差異嗎?

回答

4

即使Bitbucket可以忽略差異中的空白(使用w=1查詢參數),這些更改仍將包含在合併中。

但您可以配置git將所有行結束符轉換爲LF或CRLF。你的團隊應該先決定它將是哪個選項,然後相應地設置在.gitattributes文件text財產,像這樣:

* text eol=lf 

This Github help page顯示更多的信息。 (該信息通常用於Git,不是專門Github。)

您還需要全局配置選項git config --global core.autocrlf input(Mac & Linux)或git config --global core.autocrlf true(Windows)。

# Make sure you won't loose your work in progress 
$ git add . -u 
$ git commit -m "Saving files before refreshing line endings" 

# Remove every file from the git index 
$ git rm --cached -r . 

# Rewrite the git index 
$ git reset --hard 

# Prepare all changed files for commit 
$ git add . 
# It is perfectly safe to see a lot of messages here that read 
# "warning: CRLF will be replaced by LF in file." 

# And commit. 
$ git commit -m "Normalize all the line endings" 

More information is available in the Github article.

+0

我加了一個.gitattributes用'*文本EOL = lf'(並提交它),預計將有大量的文件會自動進行修改和行尾固定。那沒有發生。行結束符的更改何時會反映在我的回購中? – shravanp

+1

我想你還需要設置(全局)配置選項'core.autocrlf',然後按照github幫助頁面上描述的步驟進行操作。 – Arjan

+0

根據我的理解,全局配置的問題是您必須確保每個開發人員都遵守它。爲了消除對開發人員的依賴,他們有.gitattributes。但他們的指南確實說過:「在設置core.autocrlf選項並提交.gitattributes文件後,您可能會發現Git希望提交未修改的文件」。 我試着添加ony的.gitattributes。我會試着用兩種方法來看看會發生什麼。 – shravanp