位桶 CRLF 问题?
Bitbucket CRLF issue?
问题:
Bitbucket 显示整个文件已更改,即使我没有看到任何差异。并且这些文件中没有合并冲突。
详情:
我创建了一个 sprint 分支(名为 "sprintbranch"),开发人员从 sprint 分支创建了一个功能分支(名为 "featurebranchX")。当功能实现时,我开始将功能分支合并回 sprint 分支。现在有两种情况我会遇到问题:
- 开发人员创建拉取请求以将 featurebranch1 合并到 sprintbranch
- 如果存在合并冲突,开发人员将 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"
问题: Bitbucket 显示整个文件已更改,即使我没有看到任何差异。并且这些文件中没有合并冲突。
详情: 我创建了一个 sprint 分支(名为 "sprintbranch"),开发人员从 sprint 分支创建了一个功能分支(名为 "featurebranchX")。当功能实现时,我开始将功能分支合并回 sprint 分支。现在有两种情况我会遇到问题:
- 开发人员创建拉取请求以将 featurebranch1 合并到 sprintbranch
- 如果存在合并冲突,开发人员将 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"