3

一貫性のない行末、および ascii と UTF-8 (BOM あり) のファイル エンコーディングを含む大規模な既存のリポジトリの場合...

重要なことは、現在のファイルのセットがかなり一貫していないということです。それらはエンコーディングが異なります。(UTF-16 もいくつか持っていますが、今のところは無視しましょう)。それらはファイルごとに行末が異なり、ファイル自体の行末も異なりますが、それらのほとんどは git に crlf 行末で保存されていると思われます。

ここには 2 つの主な問題があります。

1) 同じリポジトリを使用している別の人が変更を確認でき、異なるセットの変更が表示されます。行末が正規化されているため、「ファイル全体」が変更されることがあります。ファイルの一部のみが変更されている場合があります。これは、core.autocrlf が true または false に設定されているかどうかに大きく依存しているようで、.gitattributes ファイルの使用にも影響されているようです。

2) すべての人が、特定の git 構成が crlf 変換を行うように設定されているかどうか、またはテキスト エディター、IDE、または彼らが決定したツールに注意を払うことなく、ファイルを git リポジトリに送信できるようにしたいと考えています。使用する。(この動作は Windows では壊れている可能性がありますが、それを受け入れる必要があります...)


主な問題は次のとおりです。「gitk」、「git diff」、「git show」などによって表示される出力が、表示される変更に関して完全に一貫していることを確認するにはどうすればよいですか。ここでは行末についてはあまり気にしませんが、特定のコミットの「変更」がすべての開発者から見たものと同じ変更であることを確認することについては、より重要です。1 人の人が変更を見て、「すべての行が変更された」(つまり、行末が変更された) のを見て、別の人が同じ変更を見て、「3 行が変更された」と言うのは望ましくありません。

  • 注: github を使用して変更を表示する人もいます。

そうは言っても、行末がどのように関係しているかを知ることに自信を持ちたいので、最終的に行末がどうなるかを知る方法を求めています。たとえば、.gitattributes で特定のファイルに「eol=crlf」を指定した場合、そのファイルはその設定で git にコミットされるということですか? その .gitattributes ファイルを設定する前にコミットされたそのファイルの以前のバージョンをチェックアウトするとどうなりますか?

4

2 に答える 2

2

わかりました、ここで何が起こっているのですか:

最初: 差分は常に同じように見え、ローカルの git 構成に依存しません。あなたはそれを試すことができます:git diff HEAD^ HEADあなたのすべてのマシンで同じように見えます (それらが同じ HEAD を持っていると仮定します)。

しかし、なぜあなたのマシンで差分が異なって見えるのでしょうか? リポジトリに次のようなファイルがあるとします。

two \r\n lines

チェックアウトすると、すべてのマシンで次のようになります。ただし、チェックイン時には次の 2 つのオプションがあります。

  1. 行末の正規化がオンになっています。ファイルは次のようにチェックインされます。

    two \n lines
    

    そしてgit diff、変化があることを報告します

  2. 行末の正規化はオフです。ファイルは次のようにチェックインされます。

    two \r\n lines
    

    変更を報告しgit diffません。


では、全員が同じ変更を確認できるようにするにはどうすればよいでしょうか? すべての人に改行の正規化を有効にすることをお勧めします。これを行うには、.gitattributes次の内容でリポジトリのルートにを作成します。

*   text=auto

そして、このファイルをすべてのブランチにコミットします。全員がこのコミットをプルすると、差分はどこでも同じように見えます。


最終的な注意:core.eolこれには何の影響もありません。作業ディレクトリの行末のみを変更します。git diffインデックスに対して作業ディレクトリを比較しませんが、インデックスに対してコミットされる内容を比較します。

于 2013-02-15T17:35:27.767 に答える
1

基本的なレポのセットアップ方法を確認するには、「git 行末」をググると思います。

すでにコミットされているものに影響を与えることはできません。あなたができる唯一のことは、好きなように修正されたファイルの内容で新しいコミットを作成することです。

以下のコメントから、あなたが求めているのは、行末の違いを完全に無視できることです。私が見つけた以前のスタックオーバーフローの最良の回答については、こちらこちらを参照してください。

于 2013-02-11T03:43:19.517 に答える