| (同じ利用者による、間の17版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
一般的なテキストファイルやソースコードファイルにおいて、ライタや開発者が2つのファイルや同じファイルの2つのバージョンの違いを知りたい場合がある。<br> | |||
2つのファイルを比較する時、その内容の差はdiffと呼ばれる。<br> | |||
<br><br> | <br><br> | ||
| 15行目: | 16行目: | ||
<br> | <br> | ||
KDiff3のビルドに必要なライブラリをインストールする。<br> | KDiff3のビルドに必要なライブラリをインストールする。<br> | ||
* Qt 5. | * Qt 5.15.5以降 (Qt 5を使用する場合) / Qt 6.5以降 (Qt 6を使用する場合) | ||
* KDE Framework 5. | * KDE Framework 5.86以降 | ||
* GCC | * GCC 9.0以降またはClang 10以降 (ただし、GCCを使用する場合は9.2以降が推奨される) | ||
* CMake 3. | * CMake 3.18以降 | ||
* ECM | * ECM 5.86以降 | ||
* Boost 1. | * Boost 1.71以降 | ||
sudo zypper install cmake | <br> | ||
ki18n-devel kcoreaddons-devel kiconthemes-devel kparts-devel kdoctools-devel kcrash-devel | # SUSE 16 (KDiff3 1.11.5以降) | ||
sudo zypper install cmake extra-cmake-modules gcc-c++ gettext-runtime gettext-tools \ | |||
kf6-ki18n-devel kf6-kcoreaddons-devel kf6-kiconthemes-devel kf6-kparts-devel kf6-kdoctools-devel kf6-kcrash-devel | |||
# SUSE 15.6 (KDiff3 1.11.4以前) | |||
sudo zypper install cmake extra-cmake-modules gcc11 gettext-runtime gettext-tools \ | |||
ki18n-devel kcoreaddons-devel kiconthemes-devel kparts-devel kdoctools-devel kcrash-devel | |||
# パッケージ管理システムからBoostをインストールする場合 | |||
sudo zypper install libboost_system1_75_0-devel libboost_headers1_75_0-devel | |||
# Qt 5を使用する場合 | |||
sudo zypper install libqt5-qtbase-devel | |||
# Qt 6を使用する場合 | |||
sudo zypper install qt6-base-devel | |||
<br> | <br> | ||
KDiff3のビルドディレクトリを作成する。<br> | KDiff3のビルドディレクトリを作成する。<br> | ||
| 29行目: | 45行目: | ||
<br> | <br> | ||
KDiff3をビルドおよびインストールする。<br> | KDiff3をビルドおよびインストールする。<br> | ||
cmake -DCMAKE_INSTALL_PREFIX=<KDiff3のインストールディレクトリ> -DCMAKE_BUILD_TYPE=Release | cmake -DCMAKE_C_COMPILER=<GCC 9.0以降のgccのパス> \ | ||
-DCMAKE_CXX_COMPILER=<GCC 9.0以降のg++のパス> \ | |||
-DCMAKE_INSTALL_PREFIX=<KDiff3のインストールディレクトリ> \ | |||
- | -DCMAKE_BUILD_TYPE=Release \ | ||
-DBOOST_ROOT=<Boostのインストールディレクトリ> \ # Boostのインストールディレクトリを指定する場合 | |||
-DBoost_INCLUDE_DIRS=/<Boostのインストールディレクトリ>/include \ # Boostのインストールディレクトリを指定する場合 | |||
-DBUILD_WITH_QT6=ON \ # Qt 6を使用する場合 | |||
.. | |||
make -j $(nproc) | make -j $(nproc) | ||
| 39行目: | 59行目: | ||
== Meld == | == Meld == | ||
Meld 3.23.1以降、Python 3.8以降が必要となることに注意する。<br> | |||
<br> | |||
==== パッケージ管理システムからインストール ==== | ==== パッケージ管理システムからインストール ==== | ||
sudo zypper install meld | sudo zypper install meld | ||
<br> | <br> | ||
==== インストールせずにソースコードから直接実行 ==== | ==== インストールせずにソースコードから直接実行 ==== | ||
[https://github.com/GNOME/meld/tags MeldのGithub]にアクセスして、Meldのソースコードをダウンロードする。<br> | [https://meldmerge.org Meldの公式Webサイト]または[https://github.com/GNOME/meld/tags MeldのGithub]にアクセスして、Meldのソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
tar xf meld-<バージョン>.tar.gz | tar xf meld-<バージョン>.tar.gz | ||
| 52行目: | 74行目: | ||
vi ~/.profile | vi ~/.profile | ||
<br> | <br> | ||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | # ~/.profileファイル | ||
export PATH="/<Meldのインストールディレクトリ>/bin:$PATH" | export PATH="/<Meldのインストールディレクトリ>/bin:$PATH" | ||
</syntaxhighlight> | |||
<br> | <br> | ||
デスクトップエントリファイルを作成する。<br> | デスクトップエントリファイルを作成する。<br> | ||
vi ~/.local/share/applications/Meld.desktop | vi ~/.local/share/applications/Meld.desktop | ||
<br> | <br> | ||
<syntaxhighlight lang="ini"> | |||
# ~/.local/share/applications/Meld.desktopファイル | # ~/.local/share/applications/Meld.desktopファイル | ||
| 73行目: | 98行目: | ||
Keywords=diff;merge; | Keywords=diff;merge; | ||
StartupNotify=true | StartupNotify=true | ||
</syntaxhighlight> | |||
<br> | <br> | ||
==== ソースコードからインストール ==== | ==== ソースコードからインストール ==== | ||
Meldのビルドに必要な依存関係のライブラリをインストールする。<br> | Meldのビルドに必要な依存関係のライブラリをインストールする。<br> | ||
| 80行目: | 107行目: | ||
meson ninja gettext itstool libpango-1_0-0 wayland-devel wayland-protocols-devel | meson ninja gettext itstool libpango-1_0-0 wayland-devel wayland-protocols-devel | ||
<br> | <br> | ||
[https://github.com/GNOME/meld/tags MeldのGithub]にアクセスして、Meldのソースコードをダウンロードする。<br> | [https://meldmerge.org Meldの公式Webサイト]または[https://github.com/GNOME/meld/tags MeldのGithub]にアクセスして、Meldのソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
tar xf meld-<バージョン>.tar.gz | tar xf meld-<バージョン>.tar.gz | ||
| 113行目: | 140行目: | ||
# Initialize interpreter path | # Initialize interpreter path | ||
export PYTHONPATH="$dirname/../lib/ | export PYTHONPATH="$dirname/../lib/python<Pythonのバージョン>/site-packages" | ||
export XDG_DATA_DIRS="$dirname/../share:$XDG_DATA_DIRS" | export XDG_DATA_DIRS="$dirname/../share:$XDG_DATA_DIRS" | ||
| 134行目: | 161行目: | ||
vi ~/.local/share/applications/Meld.desktop | vi ~/.local/share/applications/Meld.desktop | ||
<br> | <br> | ||
<syntaxhighlight lang="ini"> | |||
# ~/.local/share/applications/Meld.desktopファイル | # ~/.local/share/applications/Meld.desktopファイル | ||
| 141行目: | 169行目: | ||
GenericName=Diff Viewer | GenericName=Diff Viewer | ||
Comment=Compare and merge your files | Comment=Compare and merge your files | ||
Exec=/<Meldのインストールディレクトリ>/bin/meld.sh %F | |||
Exec=/<Meldのインストールディレクトリ>/bin/meld.sh %F | |||
Icon=org.gnome.Meld | Icon=org.gnome.Meld | ||
Terminal=false | Terminal=false | ||
| 149行目: | 176行目: | ||
Keywords=diff;merge; | Keywords=diff;merge; | ||
StartupNotify=true | StartupNotify=true | ||
</syntaxhighlight> | |||
<br> | <br> | ||
| 155行目: | 183行目: | ||
vi ~/.local/share/kservices5/CompareMeld.desktop | vi ~/.local/share/kservices5/CompareMeld.desktop | ||
<br> | <br> | ||
<syntaxhighlight lang="ini"> | |||
# ~/.local/share/kservices5/CompareMeld.desktopファイル | # ~/.local/share/kservices5/CompareMeld.desktopファイル | ||
| 196行目: | 225行目: | ||
xhost -si:localuser:root; else pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true /<Meldのインストールディレクトリ>/meld %U; fi; | xhost -si:localuser:root; else pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true /<Meldのインストールディレクトリ>/meld %U; fi; | ||
Name=Compare selected (highlighted) files/folders as root | Name=Compare selected (highlighted) files/folders as root | ||
</syntaxhighlight> | |||
<br><br> | |||
== patchコマンドとdiffコマンド == | |||
==== patchコマンドとdiffコマンドとは ==== | |||
<code>patch</code>コマンドは、テキストファイルに差分を適用するコマンドである。<br> | |||
古いファイルと差分ファイルを基に、新しいファイルを作成する。<br> | |||
<br> | |||
差分ファイルは、<code>diff</code>コマンドを実行して作成する。<br> | |||
<br> | |||
==== patchコマンドの書式 ==== | |||
patch <オプション> <元のファイル> <差分ファイル> | |||
# または | |||
patch -p<数字> < <差分ファイル> | |||
<br> | |||
例えば、<code>patch -p1 < <差分ファイル></code>コマンドにおいて、<br> | |||
<code>-p1</code>オプションは、パッチ内のファイルパスから1つのディレクトリ要素を削除することを指定する。<br> | |||
これは、パッチファイルがソースツリーのルートディレクトリに対して相対的に作成されるためである。<br> | |||
<br> | |||
==== patchコマンドの主なオプション ==== | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ 差分ファイル関連のオプション | |||
|- | |||
! style="background-color:#66CCFF;" | オプション | |||
! style="background-color:#66CCFF;" | 説明 | |||
|- | |||
| -i <ファイル名><br>--input=<ファイル名> || 差分を指定したファイルから読み取る。(デフォルトは標準入力) | |||
|- | |||
| -n<br>--normal || 差分をdiffのデフォルト出力による差分として解釈する。 | |||
|- | |||
| -c<br>--context || 差分を<code>diff -c</code>コマンドで出力した差分として解釈する。 | |||
|- | |||
| -u<br>--unified || 差分を<code>diff -u</code>コマンドで出力した差分として解釈する。 | |||
|- | |||
| -F <行数><br>--fuzz=<行数> || <code>diff -c</code>コマンドに対し、適用する位置を探す際に無視できる行数を指定する。(デフォルトは2)<br><code>diff -c</code>コマンドで出力した際の行数(デフォルトは3)より大きな数を指定しないよう注意する。<br>数字が大きい場合、間違った箇所に適用される場合が多くなる。 | |||
|- | |||
| --binary || 全てのファイルをバイナリモードで読み書きする。<br>(<code>diff -a --binary</code>コマンドで作成した差分を対象とする) | |||
|- | |||
| -e<br>--ed || 差分をedスクリプトとして解釈する。 | |||
|- | |||
| -D <プリプロセッサ名><br>--ifdef=<プリプロセッサ名> || 差分を<code>#ifdef "<プリプロセッサ名>" #endif</code>形式で適用する。 | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ 差分適用時の処理に関連するオプション | |||
|- | |||
! style="background-color:#66CCFF;" | オプション | |||
! style="background-color:#66CCFF;" | 説明 | |||
|- | |||
| -d <ディレクトリのパス> --directory=<ディレクトリのパス> || 指定したディレクトリへ移動した後に他の処理を行う。 | |||
|- | |||
| -p <個数><br>--strip=<個数> || 差分に記載されたファイル名から指定した個数分のパス指定を取り除く。 | |||
|- | |||
| -R<br>--reverse || 新旧のファイルが反転していると見なす。 | |||
|- | |||
| -N<br>--forward || 反転していると思われる差分や適用済みと思われる差分を無視する。 | |||
|- | |||
| -l<br>--ignore-whitespace || 空白の個数の違いや行末の空白の有無による違いを無視する。 | |||
|- | |||
| -E<br>--remove-empty-files || 差分を適用した結果が空になったファイルを削除する。 | |||
|- | |||
| -o <ファイル名><br>--output=<ファイル名> || 指定した名前のファイルに出力する(デフォルトは同名のファイルで置き換える。 | |||
|- | |||
| -r <ファイル名><br>--reject-file=<ファイル名> || 適用できなかった差分(リジェクト)を出力するファイル名を指定する。<br>未指定の場合は、<u>元のファイル名.rej</u>ファイルに出力する。 | |||
|- | |||
| -Z<br>--set-utc || 差分の適用で内容が書き換わった場合、<br>適用後のファイルの変更日時とアクセス日時を<br>コンテキスト差分ファイルのヘッダに書かれているタイムスタンプに設定する。<br>(時刻はUTCであるものと見なす) | |||
|- | |||
| -T<br>--set-time || 差分の適用で内容が書き換わった場合、<br>適用後のファイルの変更日時とアクセス日時を<br>コンテキスト差分ファイルのヘッダに書かれているタイムスタンプに設定する。<br>(ヘッダはローカルの時刻を使っていると見なすため、非推奨) | |||
|- | |||
| --quoting-style=<スタイル> || ファイル名を出力するスタイルを以下から指定する。<br>デフォルトは、環境変数<code>QUOTING_STYLE</code>で指定可能である。<br>未指定の場合は<code>shell</code>となる。<br><br><code>literal</code> : ファイル名をそのまま出力する。<br><code>shell</code> : 必要に応じて、シェル用の引用符を付けて出力する。<br><code>shell-always</code> : 常にシェル用の引用符を付けて出力する。<br><code>c</code> : C言語文字列と同様な引用符を付けて出力する。<br><code>escape</code> : <code>c</code>と同様に引用符を付ける。ただし、最初と最後の二重引用符は省略する。 | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ バックアップに関連するオプション | |||
|- | |||
! style="background-color:#66CCFF;" | オプション | |||
! style="background-color:#66CCFF;" | 説明 | |||
|- | |||
| -b<br>--backup || バックアップファイルを作成する。<br>(バックアップファイル名を決める場合は、<code>-V</code>オプションで指定する) | |||
|- | |||
| --backup-if-mismatch || 適用できない差分があり、かつ、バックアップが指定されていない場合、ファイルをバックアップする。<br>(POSIXに準拠していない場合のデフォルト) | |||
|- | |||
| --no-backup-if-mismatch || 適用できない差分があり、かつ、バックアップが指定されていないファイルは、バックアップしない。<br>(POSIX準拠時のデフォルト) | |||
|- | |||
| -V <命名法><br>--version-control=<命名法> || バックアップファイル名を決定する方法を以下から指定する。<br>デフォルトは環境変数<code>PATCH_VERSION_CONTROL</code>または<code>VERSION_CONTROL</code>で指定できる。<br>未指定の場合は、<code>existing</code>となる。<br><br><code>existing</code> または <code>nil</code><br>番号付きのバックアップがある場合はバックアップに番号を付加するが、無い場合は簡易バックアップを作成する。<br><br><code>numbered</code> または <code>t</code><br>バックアップに番号を付加する。(例 : <u>file.txt</u>の場合、<u>file.txt.~1~</u>のようになる)<br><br><code>simple</code> または <code>never</code><br>簡易バックアップ(ファイル名は、<code>-B</code>、<code>-Y</code>、<code>-z</code>のいずれかで指定する。<br>未指定の場合は、環境変数<code>SIMPLE_BACKUP_SUFFIX</code>を指定する。<br>いずれも指定していない場合は、ファイル名の末尾に.origを付ける) | |||
|- | |||
| -B <文字列><br>--prefix=<文字列> || 簡易バックアップファイル名で、元のファイル名の前に文字列を付ける。<br><br>例 : <code>-B /junk/</code>と指定する場合、<u>src/file.c</u>ファイルのバックアップは<u>/junk/src/file.c</u>となる。 | |||
|- | |||
| -Y <文字列><br>--basename-prefix=<文字列> || 簡易バックアップファイル名で、ファイル名のベース名に文字列を付ける。<br><br>例 : <code>-Y .del/</code>と指定する場合、<u>src/file.c</u>ファイルのバックアップは<u>src/.del/file.c</u>となる。 | |||
|- | |||
| -z <文字列><br>--suffix=<文字列> || 簡易バックアップファイル名で、元のファイルの末尾に文字列を付ける。<br><br>例 :<br><code>-z ~</code>と指定する場合、<u>src/file.c</u>のバックアップは<u>src/file.c~</u>となる。<br>これは、環境変数<code>SIMPLE_BACKUP_SUFFIX</code>でも指定可能である。 | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ 全体的な動作に関連するオプション | |||
|- | |||
! style="background-color:#66CCFF;" | オプション | |||
! style="background-color:#66CCFF;" | 説明 | |||
|- | |||
| --dry-run || 差分を当てた場合の結果を表示する。(実際には、ファイルの変更を行わない) | |||
|- | |||
| -s<br>--silent<br>--quiet || エラーメッセージ以外は出力しない。 | |||
|- | |||
| --verbose || 処理中の情報を出力する。 | |||
|- | |||
| -t<br>--batch || ユーザに問い合わせずに処理を行う。<br><br> | |||
* ヘッダにファイル名を含まない差分ファイルはスキップする。(<code>-f</code>オプションと同様) | |||
* ファイルのバージョンが差分中の<u>Prereq:</u>の行に記述されたバージョンと異なる場合でも差分を適用して、差分が反転しているように見える場合は反転していると見なす。 | |||
|- | |||
| -f<br>--force || ユーザに問い合わせずに処理を行う。<br><br> | |||
* ヘッダにファイル名を含まない差分ファイルはスキップする。(<code>-t</code>オプションと同様) | |||
* ファイルのバージョンが差分中の<u>Prereq:</u>の行に記述されたバージョンと異なる場合でも差分を適用して、差分が反転しているように見えても反転していないと見なす。 | |||
* <code>-T</code>オプション、<code>-Z</code>オプション指定時において、ファイルの内容が書き換わらない場合もタイムスタンプを強制的に変更する。 | |||
|- | |||
| --posix || POSIX標準に従う。<br><br>例 :<br>差分を適用した結果空になったファイルを削除しない。<br>適用できなかった差分があった場合もファイルをバックアップしない。 | |||
|} | |||
</center> | |||
<br> | |||
==== 差分の適用 ==== | |||
元のファイルに差分を適用する。<br> | |||
patch <元のファイル> <差分ファイル> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] | ||