調べるに至った理由
現在、参画しているプロジェクトの中盤でディレクターより「差分管理をしていく上でdiffをとる」とのことで、diffについて意味を知り理解したいと思い、下記まとめました。
diffとは
「difference」のことで、指定した二つのファイルを比較した時の違い(差分)のことを指している。
diffコマンドについて
二つのファイルを比較して差分を出力するコマンド
###基本的なコマンドの書き方
diff [オプション] ファイル1 ファイル2
- ファイル1とファイル2は比較したいファイル名
- オプションは表示方法や出力形式を制御するためのもので必須ではない
出力結果
###ファイル比較(基本)
$ diff file1.txt file2.txt
1c1
< test
---
> tests
出力内容
file1.txtとfile2.txtを比較する内容
「1c1」は「1行目が変更された」という意味で最初の「1」はfile1.txtの行番号、後ろの「1」はfile2.txtの行番号を表している。
つまり、file1.txtの1行目がfile2.txtの1行目に変更されたということ。
変更内容
「---」より上に表示されている「< test」はfile1.txtの1行目
「---」は変更が発生したことを示す
「> tests」はfile2.txtの1行目であることを表している
よく使われるオプション
- -uオプション(unified形式)
「---」は変更前のファイルを、「+++」は変更後のファイルを表している
変更後に存在しない行は「-」、変更後のみに存在する行は「+」が行頭についている。
見やすさはイマイチ、、、
# diff -u test1.txt test2.txt
--- test1.txt 2022-08-22 18:23:54.717925300 +0900
+++ test2.txt 2022-08-23 09:18:48.147925300 +0900
@@ -1,11 +1,11 @@
-あいうえお
-かきくけこ
+あいうゑお
+かきくケこ
さしすせそ
たちつてと
+ららららら
なにぬねの
はひふへほ
まみむめも
-やゆよ
+やゆよよよ
らりるれろ
わをん
-アイウエオ
#
- -cオプション(contex形式)
「***」は変更前のファイルを、「---」は変更後のファイルを表している
変更のあった行は「!」、変更後に存在しない行は「-」にのみ存在する行は「+」が行頭についている
こちらも見やすさはイマイチ、、、
# diff -c test1.txt test2.txt
*** test1.txt 2022-08-22 18:23:54.717925300 +0900
--- test2.txt 2022-08-23 09:18:48.147925300 +0900
***************
*** 1,11 ****
! あいうえお
! かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
! やゆよ
らりるれろ
わをん
- アイウエオ
--- 1,11 ----
! あいうゑお
! かきくケこ
さしすせそ
たちつてと
+ ららららら
なにぬねの
はひふへほ
まみむめも
! やゆよよよ
らりるれろ
わをん
#
- -yオプション(side by side形式)
エディタの左側に変更前、右側に変更後のファイルが表示されている
変更があった行には右側のファイルの左側に結果が表示される
変更のあった行は「|」、変更後に存在しない行は「<」、変更後にのみ存在する行は「>」が表示される
直感的に分かりやすい表示になっている
# diff -y test1.txt test2.txt
あいうえお | あいうゑお
かきくけこ | かきくケこ
さしすせそ さしすせそ
たちつてと たちつてと
> ららららら
なにぬねの なにぬねの
はひふへほ はひふへほ
まみむめも まみむめも
やゆよ | やゆよよよ
らりるれろ らりるれろ
わをん わをん
アイウエオ <
#
最後に
恥ずかしながらプロジェクト参画後に初めて知った言葉、コマンドでしたがこれを機に学ぶことができて良かったです。
今後、プロジェクトが進みテストも増えてくると、差分についての対応が増えると思うので使いこなせるようにしていきます。