開発環境 - マージ

  • 機能のマージ
  • ソースのマージ

こではソースのマージについて扱う

差分

2つあるいはそれ以上のテキストファイル間の違いを差分という。

A,Bという2つのファイルがありAにたいし次のような操作をしたときに Bと内容が一致するような操作を検出し表示するプログラム の出力は差分と呼ばれる。

  • Aのある個所に行を追加
  • Aのある行の一部あるいは全部を修正
  • Aのある行を削除

差分の不確定性

A + p1 = B
A + p2 = B
p1 ≠ p2

となる p1,p2 が存在することがある。

(無意味に例えば1行削除して同じ内容の行を足すようなことをすればいくらでもあるけれど)

diff

Unix系では以前からdiffコマンドが標準的に使われていた。

パッチ

  • 差分つーつの出力結果
  • 差分ツールの出力結果を元にファイルの修正を行うこと。〜を当てる。

パッチ作業、差分ツールの出力をもとに自動的に行うプログラムもある。

そのようなプログラムは

  • もとのファイルA
  • もとのファイルAとBの差分p

のA,pを入力としてAを編集しBの内容を生成する。

パッチのあいまい性というか柔軟性というか賢さ

入力としてAの類似ファイルA'に対しパッチpを当てることもできる。 この場合結果としてB'が結果として得られる。

  • A+p=B
  • A'+p=B'

この操作は必ずしも成功するわけでない。AとA'の差によってはプログラムが判断できない場合もあるし人間が判断できないばあいもある。

賢くないパッチ当て

 orig.  new
1:a      a
2:b      b
3:c      c 
4:d   → d
5:e      e
6:X      Y
7:f      f
 orig.   BAD 
1:A      A
2:a      a
3:b      b  
4:c   → c
5:d      d
6:e      Y
7:X      X
8:f      f
 orig.  BAD
1:a      a
2:b      b
3:X      Y
4:d   → d
5:e      e
6:X      Y
7:f      f
 orig.  expected
1:a      a
2:b      b
3:X      X 
4:d   → d
5:e      e
6:X      Y
7:f      f

patch

diffの出力を入力としてファイルの編集を行うコマンドとしてpatchというプログラムが ある。

マージ

3wayマージ

マージツール

比較オプションの注意

  • 除外ファイル
  • 空白の差異を無視する
  • 改行の種類の問題

WinMerge?

patch

k3diff

p4merge

VCSツールのマージ

StartTeam?

マージに失敗

copy(上書きコピー)

なぜマージするか

マージ上の注意

ツールは意味を考慮しない

バイナリファイルのマージ

Microsoft Office文書のマージ

Word

Excel

TortoiseHg

TortoiseHg


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-05-13 (金) 07:25:59 (2913d)