【问题标题】:Bitbucket CRLF issue?Bitbucket CRLF 问题?
【发布时间】:2016-04-19 19:16:32
【问题描述】:

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

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

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

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

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

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

如何解决这个问题,让它不再发生?

更新:

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

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

【问题讨论】:

    标签: git merge bitbucket pull-request


    【解决方案1】:

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

    【讨论】:

    • 我添加了一个带有* text eol=lf 的 .gitattributes(并提交了它),并预计会自动修改很多文件并修复行尾。那没有发生。对行尾的更改何时会反映在我的仓库中?
    • 我猜你还需要设置(全局)配置选项core.autocrlf,然后按照github帮助页面中描述的步骤进行操作。
    • 据我了解,全局配置的问题在于您必须确保每个开发人员都遵守它。为了消除对开发人员的依赖,他们拥有 .git 属性。但是他们的指南确实说“在您设置了 core.autocrlf 选项并提交了一个 .gitattributes 文件后,您可能会发现 Git 想要提交您尚未修改的文件”。我尝试添加任何.gitattributes。我会尝试两者,看看会发生什么。
    • 是的,我错过了git config --global core.autocrlf true。一旦我包含它,所有现有文件都被修改,它们的行尾被更改为我设置的内容。谢谢阿扬!
    • @Arjan - 你能回答一个相关的问题吗?谢谢stackoverflow.com/questions/58442791/…
    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    相关资源
    最近更新 更多