位桶 CRLF 问题?

Bitbucket CRLF issue?

问题: Bitbucket 显示整个文件已更改,即使我没有看到任何差异。并且这些文件中没有合并冲突。

详情: 我创建了一个 sprint 分支(名为 "sprintbranch"),开发人员从 sprint 分支创建了一个功能分支(名为 "featurebranchX")。当功能实现时,我开始将功能分支合并回 sprint 分支。现在有两种情况我会遇到问题:

  1. 开发人员创建拉取请求以将 featurebranch1 合并到 sprintbranch
  2. 如果存在合并冲突,开发人员将 sprintbranch 合并到 featurebranch1 并创建拉取请求以将 featurebranch1 合并到 sprintbranch。

两次 bitbucket 都显示整个文件已更改。并且没有合并冲突。

发生这种情况时,我无法进行代码审查,因为我不知道开发人员修改了哪些具体行。我在这一点上也失去了历史——回头看我将无法弄清楚什么被实现或合并到 sprint 分支中。

我猜问题出在行尾。与CRLF有关。但是当我提交我的工作时,我确实看到自动使用了适当的行尾(通过 git 或通过像 SmartGit 这样的工具)

如何解决此问题,使其不再发生?

更新:

我刚刚发现我可以在拉取请求的 url 末尾附加查询字符串 w=1 以忽略 crlf 差异。

但是这些文件仍然存在于提交中,当我将其合并回来时,它会包含这些差异吗?

即使 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 lose 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.