6

ファイルを 3 ウェイ マージ ツールにフィードする前に、競合を解決しようとする git の試みを完全にオフにする方法はありますか?

私はそれらの行を意味します:

<<<<<<< Temporary merge branch 1
...
=======
...
>>>>>>> Temporary merge branch 2

それらとブランチの変更をベースファイルに追加してからkdiff3にフィードしますが、後者は完全に狂って奇妙な競合を示します。

基本リビジョンをそのままにしておきたいだけです。

これまでのところ、オプションしか見つかりませんでした

merge.conflictstyle

しかし、これらの行をオフにするオプションはないようです。

行を削除するプリプロセッサを書く以外に方法はありますか?

アップデート

ここで嫌いなことを説明します。

問題は、git が kdiff3 を起動すると、BASE リビジョンに次のような行が含まれることです。

X1
<<<<<<< Temporary merge branch 1
A
=======
B
>>>>>>> Temporary merge branch 2
X2

LOCAL リビジョンには以下が含まれます。

X1
A
X2

REMOTE リビジョンには以下が含まれます。

X1
B
X2

ここでX1、 とX2は、3 つのファイル間で共通のコード行です。

ここで、kdiff3 は競合を通知します。

ファイルを取得して別のフォルダーにコピーし、 と の間のすべてを削除する<>、kdiff3 はファイルをより適切に (場合によっては自動的に) マージします。

http://www.gitguys.com/topics/merging-with-a-gui/で確認できることから、実際には BASE リビジョンの行を表示すべきではないようです。しかし、そうです。どうすれば修正できますか?

Git 構成

git config -lこれを与える:

core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Pavel Gatilov
user.email=********
merge.tool=kdiff3
mergetool.kdiff3.path=C:/Program Files (x86)/KDiff3/kdiff3.exe
diff.guitool=kdiff3
difftool.kdiff3.path=C:/Program Files (x86)/KDiff3/kdiff3.exe
difftool.kdiff3.cmd="C:/Program Files (x86)/KDiff3/kdiff3.exe" "$LOCAL" "$REMOTE"
core.editor="C:/Program Files (x86)/GitExtensions/GitExtensions.exe" fileeditor
core.autocrlf=false
credential.helper=!"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore/git-credential-winstore.exe"
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
core.safecrlf=true
remote.origin.url=********
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.develop.remote=origin
branch.develop.merge=refs/heads/develop
gui.wmstate=normal
gui.geometry=887x427+175+175 171 192
branch.8480-il.remote=origin
branch.8480-il.merge=refs/heads/8480-il
branch.branch-9354.remote=origin
branch.branch-9354.merge=refs/heads/branch-9354

バージョン

私が使う:

ツールのバージョン
------------------------
msysgit 1.8.1.msysgit.1
Git 拡張機能 2.44
kdiff3 0.9.97

この問題は、Git 拡張機能を介してマージを実行するときと、git mergetool

更新 2

ファイルの不要な部分を削除するために kdiff3 プリプロセッサ コマンドを構成しようとしましたが、行ごとに動作するように見えるため、問題を解決できません。

プリプロセッサ ラッパーを作成することもできますが、まだやりたくありません。

4

2 に答える 2

7

.gitattributesにフラグを設定して、git の動作を構成し、git の競合解決を無効にすることができますmerge=union。フラグを使用してこれを行うことができます。

例 .gitattributes

* merge=union

すべてのファイルにマージ オプションがないことを指定する代わりに、選択した量のファイルに対してこれを行うこともできます。次に例を示します。

*.java merge=union
src/generated/* merge=union

これらの行は、Java ファイルと src/generated フォルダー内のすべてのファイルのマージ オプションを調整します。

于 2016-01-15T09:49:17.940 に答える
1

mergetool.<tool>.cmd初期/デフォルトのマージがまったくないという構成変数を設定する場合ではありませんか。

は、マージが発生したgit merge-toolに使用されます(マニュアルにはそう書かれています)

于 2013-03-25T14:44:07.473 に答える