1

私は過去 2 年間 Git を使用しており、そのマージはこれまで使用した中で最も優れたマージの 1 つですが、最近は動作が悪いだけです。私のgitでは何も変わっていませんが、マージを行うたびに、それはただ動いています.

例:次のようなものを見始めました

<<<<<<< 頭

また ->>>>>>> 隠し変更

<<<<<<< アップストリームを更新

これは、自動マージが終了した後のコード内に表示されるものです。奇妙なことに、以前のようにしばらくの間、競合を手動で解決するよう求められなくなりました。以前はそんなことはありませんでした。以前にこの動作を見た人はいますか?

4

1 に答える 1

4

これは、空白の問題によく似ています。2つの可能性(そしておそらくあなたの説明に基づいて両方):

行末の空白

多くのテキスト エディターは、コードを自動的にインデントします。これは、関数の途中に空白行を残すと、実際にはスペースやタブが含まれている可能性があることを意味します。

たとえば、次のコードを想像してください。

    function somethingFunky() {
        setupFunkyProcess();
        prepareTheFunk();

        goFunky();
    }

特別なコード ビュー (またはエディターで呼び出しているもの) をオンにすると、次のように表示される場合があります。

»   function somethingFunky() {¶
»   »   setupFunkyProcess();¶
»   »   prepareTheFunk();¶
»   »   ¶
»   »   goFunky();¶
»   }¶

または、次のように表示される場合があります。

»   function somethingFunky() {¶
»   »   setupFunkyProcess();¶
»   »   prepareTheFunk();¶
¶
»   »   goFunky();¶
»   }¶

空行の違いがわかりますか?ほとんどのプログラミング言語では、まったく違いはありません。このままだと、Git にとっても違いはありません。

しかし、将来の編集中に、ある形式から別の形式に変化することを想像してみてください。手動で空白を削除するか、保存時に空白を削除するテキスト エディターに切り替えることができます。2 つのバージョンの間には技術的な違いがありますが、空白のみです。差分は次のようになります。

<<<<<<< HEAD

=======

>>>>>>> BranchToMergeFrom

見覚えがあります?特別なコードを有効にすると、実際には次のようになります。

<<<<<<< HEAD¶
»   »   ¶
=======¶
¶
>>>>>>> BranchToMergeFrom¶

行末文字

あなたのコメントの警告を説明する他の可能性:

warning: LF will be replaced by CRLF

行末文字の変更です。

テキスト ファイルを保存すると、各行の終わりを示すために特別なコードが使用されます。残念ながら、オペレーティング システムによって使用するコードが異なります。ウィキペディア ( http://en.wikipedia.org/wiki/Newline )にはたくさんの情報がありますが、知っておく必要があるのは、Windows PC と、Mac または Linux システムが異なる EOL コードを使用することだけです。

2 人の開発者が共同作業を行っていても、異なるオペレーティング システムを使用している場合、共通の標準に同意しない限り、異なる EOL コードが原因で多くの競合が発生します。

Git ユーザーがこれを管理する通常の方法は、すべてのコミットが Linux EOL コードを使用することに同意することです (Git はもともと Linux カーネルの開発を支援するために作成されました)。コミット時に行末を自動的に変換するように Git を設定できます。Github にはいくつかの便利な手順があります: https://help.github.com/articles/dealing-with-line-endings

あなた (または別の開発者) がこれを正しく管理するようにシステムを構成しないとどうなりますか? ファイルは技術的には異なりますが、空白のみであるため、差分メッセージはそれほど役に立たない場合があります。

<<<<<<< WindowsEOL
This is my test file.
The contents are irrelevant; they are
simply here for the purpose of EOL comparison.

In this file, the line endings are Windows format.
In other words, CRLF
=======
This is my test file.
The contents are irrelevant; they are
simply here for the purpose of EOL comparison.

In this file, the line endings are Unix format.
In other words, LF
>>>>>>> UnixEOL

これを解決するために何ができますか?

これらの空白の変更の一部が既にリポジトリにコミットされていると仮定すると、将来の編集中に何が起こっているかを認識する以外にできることはあまりありません。

これがあなたのリポジトリである場合は、いくつかの標準 (Windows または Linux の EOL、空白を削除するかどうか) を定義し、共同作業者に伝えます。他の人のレポに貢献している場合は、彼らの標準が何であるかを調べて、自分でそれらに固執するようにしてください.

問題の程度 (ファイル数、不一致の数など) によっては、リポジトリのクリーンアップを実行し、他の変更を加えずにコミットすることをお勧めします。

于 2013-06-23T08:56:54.697 に答える