gitマージの競合を説明するために、同じ意味を持つ2つのgitベースではないテキストファイルをマージします。

gitマージの競合を説明するために、同じ意味を持つ2つのgitベースではないテキストファイルをマージします。

git「マージの競合」が説明されている方法と同様の意味を使用して、gitベースではなく2つのテキストファイルをマージしたいと思います。

file.1たとえば、名前が似ているが内容が同じではない2つのテキストファイルがあるとしますfile.2。これら2つのファイルを次のように3番目のファイルにマージしたいと思います。

hypothetical-merge-utility file.1 file.2 file.merged

file.merged次のような方法でファイルの内容と各相違点を一覧表示する作成が必要です。

common line 1 ...
common line 2 ...
common line 3 ...
<<<<<<< file.1
something unique from file.1
a second line of something unique from file.1
======= file.2
something unique from file.2
>>>>>>> end of diff
common line 4 ...
common line 5 ...
<<<<<<< file.1
something unique from file.1
======= file.2
something unique from file.2
a second line of something unique from file.2
>>>>>>> end of diff
common line 6 ...
common line 7 ...
... etc. ...

つまり、file.1との間のすべての違いがfile.2「マージの競合」の表現に似ていることを望みますgit

<<<<<<<<、、、および========その他の区切り記号を使用しても構いません。>>>>>>>>

Linuxには、テキストファイルをマージするために使用できるユーティリティがたくさんあることがわかっています。しかし、私はただgit「マージの競合」が説明されているのと同様の方法で、マージされたデータを具体的に表すコンテンツを見つけます。

そのようなユーティリティについて知っている人はいますか?

よろしくお願いします。

修正する:Ed Mortonの次の質問に基づいて、両方のテストファイルの内容は次のとおりです。

====ファイル。1 ====

common line 1 ...
common line 2 ...
common line 3 ...
something unique from file.1
a second line of something unique from file.1
common line 4 ...
common line 5 ...
something unique from file.1
common line 6 ...
common line 7 ...

====ファイル。2 ====

common line 1 ...
common line 2 ...
common line 3 ...
something unique from file.2
common line 4 ...
common line 5 ...
something unique from file.2
a second line of something unique from file.2
common line 6 ...
common line 7 ...

ベストアンサー1

ノート:これはやや合理的な「回答」だと思いますが、今はもう一つの「答え」を思いつきました。以下の他の「回答」を参照してください。

この「答え」の元のバージョンは...

ああ!ここに文を載せるには早すぎますね。-Dコマンドラインオプションを知らなかったdiffが、これができることに気づきました...

diff -D file.1 file.2 >file.merged

それは次のものを生成しますfile.merged...

common line 1 ...
common line 2 ...
common line 3 ...
#ifdef file.1
something unique from file.1
a second line of something unique from file.1
#else /* file.1 */
something unique from file.2
#endif /* file.1 */
common line 4 ...
common line 5 ...
#ifdef file.1
something unique from file.1
#else /* file.1 */
something unique from file.2
a second line of something unique from file.2
#endif /* file.1 */
common line 6 ...
common line 7 ...
... etc. ...

私が余裕があり#ifdef#elseOK、私が余裕がある#endifようにgit<<<<<<<<OK。========>>>>>>>>

修正する:...私はこれを見つけました: https://stackoverflow.com/questions/16902001/manually-merge-two-files-using-diff

統合diff形式を使用して同様の操作を実行する方法も示します。合計の最大行数よりも大きい引数を持つオプションをdiff提供します。たとえば...-Ufile.1file.2

diff -U 99999999 file.1 file.2 | tail -n +4 >file.merged

これにより、次のような結果が生成されます。

 common line 1 ...
 common line 2 ...
 common line 3 ...
+something unique from file.2
-something unique from file.1
-a second line of something unique from file.1
 common line 4 ...
 common line 5 ...
+something unique from file.2
+a second line of something unique from file.2
-something unique from file.1
 common line 6 ...
 common line 7 ...
 ... etc. ...

線は+の固有データを表しfile.2-線はの固有データを表しますfile.1

私はそれ+-行を扱うことができます。

おすすめ記事