38

gitリポジトリがあるWebサイトがあります。リポジトリのクローンを作成して、1つのディレクトリで開発し、リポジトリにプッシュしてから、live / prodディレクトリをプルします(これを行うためのより良い方法の提案に興味がありますが、それはこの質問の範囲)。

最新の変更をすべてプッシュするために、ライブディレクトリで次のことを行いました。

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の2つのファイルを開きましたが、それらは同じように見えました。ただし、次のdiffコマンドを実行すると、ファイル全体が出力されました。

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

同一である場合にdiffがファイル全体を出力する理由について私は非常に混乱しています...私もこれをグーグルで検索しようとしましたが、この問題を抱えている他の人を見つけることができません。おそらく、行末の問題または文字エンコードの問題で、同じように見えますが、実際には異なり、リポジトリにプッシュするとgit / bitbucketがそれを変換しますか?それは私が考えることができる唯一のことです...それか私は本当に明白な何かを逃しています。

出力は次のとおりです。

1,3c1,3
< <?
< echo '<p>Hello world!</p>';
< ?>
---
> <?
> echo '<p>Hello world!</p>';
> ?>
4

5 に答える 5

46

これは空白の問題のようです。将来それらを回避するために、Gitを設定してそれらを正規化することができます。

WindowsとUNIXシステムは同じ行末を使用しません。これらに基づいて競合が発生するのを防ぐために、次のようにgitconfigを設定する必要があります。

  • Windowsgit config --global core.autocrlf true
  • Unixgit config --global core.autocrlf input

次に、理想的な空白ルールのみでコミットするようにするには、次の構成オプションを設定できます。

git config --global core.whitespace trailing-space,space-before-tab,indent-with-non-tab
于 2012-10-13T19:46:24.907 に答える
19

ほとんどの場合、回線の終了です。試してみてくださいgit diff --ignore-space-at-eol。そして、プレーンな(ではないgit)diffの場合はdiff -b

于 2012-10-13T19:45:04.603 に答える
2

これは通常、行末が異なることを意味します。ほとんどのdiffinプログラムでは、行末の違いを無視できます。あなたはそうすることを許可していますか?

于 2012-10-13T19:43:42.677 に答える
0

解決策ではありません、これはあなたに役立ちます。

git diff --no-ext-diff --ignore-space-change -- <path>->gitbashで表示できるのはコードの変更のみです。

于 2020-09-24T19:18:28.550 に答える
0

@SimonBoudriasの優れた回答を拡張してgit config --global core.autocrlf true、チェックアウト時に行末をLFからCRLFに変換するようにgitに依頼します。Windowsで作業している開発者にとって非常に便利です。このコマンドは、以下を追加します%HOMEPATH%\.gitconfig

[core]
    autocrlf = true

からコマンドを実行するのが最善ですが、それが簡単な場合Git Bashは、上記の行を手動で追加できます。.gitconfig

于 2021-07-28T23:03:22.607 に答える