これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド git-merge-changelog です。
プログラム:
NAME
git-merge-changelog - GNU ChangeLog ファイル用の git マージ ドライバー
DESCRIPTION
「git」のデフォルトのマージドライバー 常に パブリックをプルするときに競合が発生する
非公開で変更された ChangeLog ファイルへの変更。 これは、ChangeLog ファイルが原因です。
常に先頭で変更されます。 デフォルトのマージドライバーには対処方法がわかりません。
これ。 さらに、競合には、より多くの <<<< ==== >>>> マーカーが表示されます。
必要; これは、デフォルトのマージ ドライバーが、
ChangeLog エントリ内の個々の行が変更されます。
このプログラムは、これらの問題を回避する「git」マージ ドライバーとして機能します。
1. ChangeLog エントリが両方の先頭に挿入されている場合、競合は発生しません。
公開および非公開の変更。 非公開で追加されたエントリを上に置きます
公開されたエントリ。
2. ChangeLog ファイルの構造を尊重します。エントリは行に分割されません。
一緒に保管されています。
3. 過去の ChangeLog エントリの小さな変更や、
削除された ChangeLog エントリ: 予想どおりにマージされます。
4. 競合は、発生した場所ではなくファイルの先頭に表示されるため、
ユーザーがすぐにそれらを確認できるようにするためです。 (一部の言語で書かれたソースコードとは異なります)
プログラミング言語、数百行先にある競合マーカー
top は構文エラーを引き起こさないため、そのまま残る可能性があります。
気づかれずに。)
git ユーザー:
- チェックアウトの .git/config (または $HOME/.gitconfig) に次の行を追加します。
[マージ "マージ変更ログ"]
name = GNU スタイルの ChangeLog マージ ドライバー
ドライバー = /usr/bin/git-merge-changelog %O %A %B
- ChangeLog ファイルを含むすべてのディレクトリに、ファイル '.gitattributes' を追加します。
この行:
ChangeLog merge=merge-changelog
(詳細については、「man 5 gitattributes」を参照してください。)
bzr ユーザー:
- 次の場所にリストされている「extmerge」bzr プラグインをインストールします。
<http://doc.bazaar.canonical.com/plugins/en/index.html>
<http://wiki.bazaar.canonical.com/BzrPlugins>
- $HOME/.bazaar/bazaar.conf に次の行を追加します。
external_merge = git-merge-changelog %b %T %o
- 次に、ChangeLog ファイル内の競合をマージするには、次を使用します。
$ bzr extmerge 変更ログ
hg ユーザー:
- $HOME/.hgrc に次の行を追加します。
[マージパターン]
ChangeLog = git-merge-changelog
[マージツール]
git-merge-changelog.executable = /usr/bin/git-merge-changelog
git-merge-changelog.args = $base $local $other
見るhttp://www.selenic.com/mercurial/hgrc.5.html> セクション マージツール 参考のため。
as an 代替案 〜へ 「差分3」:
git-merge-changelog は、引数を並べ替えただけで、「diff3 -m」と同じ役割を実行します。
$ git-merge-changelog %O %A %B
に匹敵します
$ diff3 -m %A %O %B
呼び出し 大会:
マージ ドライバーは、次の XNUMX つのファイル名引数を使用して呼び出されます。
1. %O = %A と %B の共通の祖先。
2. %A = 「現在のブランチ」からのファイルの内容。
3. %B = 「他のブランチ」からのファイルの内容。 これはマージ中のコンテンツです
インチ
「git stash apply」またはアップストリーム プルの場合 (例: サブシステム メンテナから
中央のメンテナー)、または --rebase を使用したダウンストリーム プルの場合:
2. %A = ファイルの最新のプルされたコンテンツ。 他のコミッターによって変更されました。
3. %B = ユーザーのファイルの最新コピー。 ユーザーによって変更されました。
ダウンストリーム プル (例: 中央リポジトリからユーザーへ) または
--rebase を使用したアップストリーム プル:
2. %A = ユーザーのファイルの最新コピー。 ユーザーによって変更されました。
3. %B = ファイルの最新のプルされたコンテンツ。 他のコミッターによって変更されました。
マージされた出力をファイル %A に書き込む必要があります。 いくつかのコメントを標準出力にエコーすることもできます。
マージが正常に解決できた場合は戻りコード 0 で終了するか、ゼロ以外のコードで終了する必要があります。
競合があった場合のリターンコード。
認定条件 it 作品:
ChangeLog ファイルの構造: ChangeLog エントリで構成されます。 ChangeLog エントリ
空白行以外の文字で始まる空白行に続く行から始まります。
またはファイルの先頭にあります。 マージ ドライバーは次のように動作します。
ファイルをメモリに格納し、ChangeLog エントリに分割します。 次に、違いを見つけます
%O と %B の間。 それらは次のように分類されます。
- 削除 (一部の連続エントリが削除)、
- 変更 (いくつかの連続したエントリが削除され、いくつかの連続したエントリが追加されました)、
- 追加(いくつかの連続したエントリが追加されました)。
次に、ドライバーは変更を %A に適用しようとします。 この目的のために、最初に を計算します。
ファジー文字列を使用した、%O のエントリと %A のエントリ間の対応
変更されたエントリを引き続き識別するためのマッチング。
- 削除は XNUMX つずつ適用されます。 エントリが %A の任意の位置に存在する場合、それは
削除されました。 そうでない場合、削除は競合としてマークされます。
- %B の先頭にある加算は、%A の先頭に適用されます。
- %B 内のエントリ x とエントリ y (y はファイルの終端である可能性があります) 間の追加が適用されます。
%A のエントリ x とエントリ y の間 (それらがまだ存在し、%A でまだ連続している場合)
%A)、そうでない場合、追加は競合としてマークされます。
- 変更は「単純な変更」に分類されます。
エントリ 1 ... エントリ n は次のようにマップされます
added_entry ... added_entrymodified_entry1 ...modified_entryn、ここで
entry_i とmodified_entry_i の対応関係はまだ明らかです。 そして「大きな変化」:
残りはこれらすべてです。 %B の先頭にある単純な変更は、
%A の先頭にエントリを追加しました。 単純な変更の変更は XNUMX つずつ適用されます。
シングルエントリの競合が発生する可能性があります。 大きな変更は一括して適用される可能性があります
複数のエントリにわたる競合が発生します。
- 競合はファイルの先頭に出力され、終了ステータス 1 が発生します。
onworks.net サービスを使用してオンラインで git-merge-changelog を使用する