代码之家  ›  专栏  ›  技术社区  ›  Tomasz Stępnik

bitbucket中的Git显示了文件之间的巨大差异

  •  0
  • Tomasz Stępnik  · 技术社区  · 2 年前

    我有一个网站有git回购协议。我克隆了repo,这样我就可以在一个目录中开发,然后推送到repo,然后拉入live/prod目录(如果有更好的方法,我会有兴趣提出建议,但这超出了这个问题的范围)。

    我在live directory中执行了以下操作,以推送我的所有最新更改:

    git add .
    git commit -a // added a message
    git push
    

    然后,我在dev目录中执行了以下操作:

    git clone git@bitbucket.org:user/repo.git
    

    然后我打开了两个文件,prod/root/test。php和dev/root/test。php,它们看起来一模一样。但是,当我执行以下diff命令时,它输出了整个文件:

    diff prod/root/test.php dev/root/test.php
    

    我很困惑,如果它们是相同的,为什么diff会输出整个文件。。。我也试过用谷歌搜索这个问题,但找不到其他有这个问题的人。可能是行尾问题或字符编码问题,它们看起来一样,但实际上不同,当你推到它们的repo时,git/bitbucket会转换它们吗?这是我唯一能想到的。。。要么就是我错过了一些非常明显的东西。

    以下是输出:

    1,3c1,3
    < <?
    < echo '<p>Hello world!</p>';
    < ?>
    ---
    > <?
    > echo '<p>Hello world!</p>';
    > ?>
    
    0 回复  |  直到 12 年前
        1
  •  47
  •   Simon Boudrias    6 年前

    这似乎是一个空白问题,为了避免将来出现这些问题,可以设置Git来规范它们。

    Windows和UNIX系统不使用相同的行尾,为了防止基于这些行尾的冲突发生,您应该通过以下方式设置git config:

    • 窗户 : git config --global core.autocrlf true
    • Unix : git config --global core.autocrlf input

    接下来,为了确保我们只使用理想的空白规则进行提交,您可以设置 config option :

    git config --global core.whitespace trailing-space,space-before-tab,indent-with-non-tab
    
        2
  •  19
  •   Michael Krelin - hacker    12 年前

    很可能是线路终止。尝试 git diff --ignore-space-at-eol .而对于普通(非 git )不一样 diff -b .

        3
  •  2
  •   Patrick    12 年前

    这通常意味着行尾不同。大多数diffin程序允许您忽略行尾的差异。你的允许你这么做吗?

        4
  •  0
  •   Dharman Aman Gojariya    4 年前

    不是解决方案,会对你有所帮助。

    git diff --no-ext-diff --ignore-space-change -- <path> ->您只能在git bash中查看代码更改。

        5
  •  0
  •   AlainD    3 年前

    扩展@SimonBoudrias的优秀答案, git config --global core.autocrlf true 要求git在结账时将行尾从LF转换为CRLF。对于在Windows上工作的开发人员非常有用。此命令将添加以下内容到 %HOMEPATH%\.gitconfig :

    [core]
        autocrlf = true
    

    从运行命令 Git Bash 是最好的,但上面的行可以手动添加到 .gitconfig 如果你觉得容易的话。