7

私は枝を持っていfeature1ますmaster
次にfeature1、ファイルの名前dir/file.txtdir2/file2.txt.
その後、ファイルを変更しmaster、1 週間後にファイルfeature1も変更しました。

プロジェクト全体でそのように変更された40個のファイルがあります。
にマージしようとするとmasterfeature1名前変更のしきい値が低くなります。ほとんどのファイルは正しく自動マージされます。一部のファイルは、手動で競合を解決するために提供されています。

ただし、一部の具体的なファイルは、merge応答に自動マージされていないか、
適切にマージされていません
1.名前の変更を検出せず、別のブランチ
に追加するだけです。 2. 名前の変更を検出し、競合を手動で解決するように提案します。dir/file.txtfeature1

で見ると多くの変化があります
git difftool master:dir/file.txt feature1:dir2/file2.txt

したがって、git は名前の変更を認識し、何が起こっているのかを通知せずにバージョンを保持することを決定したと思います。どうすれば解決/デバッグできますか?

これは私が使用するコマンドです

git config merge.renameLimit 9999999999
git merge --no-ff -Xrename-threshold=20 -Xignore-space-change master

アップ1

ブランチで作業しているfeature1ときに、 を削除しdir/file.txtました。
おそらく、git はこのファイルを削除する必要があると想定しているため、master.
ファイルの類似性は保たれますが、名前変更の検出は失敗します (レーベンシュタイン距離はコンテンツの長さの 2% 未満です) 。
別の議論では、ブランチからブランチにファイルをコピーする「手動マージ」が提案されています。

Upd2

他のいくつかのファイルは正しく解決され
CONFLICT (rename/delete): images/ab.gif deleted in master and renamed in HEAD. Version HEAD of cdn/img/ab.gif left in tree.
ます で削除されmaster、マージされたファイルは正しく解決feature1されます。削除 (または移動) されたファイルはfeature1 、マージ時に認識されません。
推測?

Upd3

現時点では、逆にマージしようとしています。マージfeature1してmaster、どのファイルが追加および削除されているかを確認します。このようにして、git が名前変更として認識できず、手動マージに頼ることができないファイルのリストを作成します。

4

2 に答える 2

1

リポジトリからファイルを削除する場合-gitはこの削除を追跡し、マージは何をすべきかを決定するときにこれを考慮します。

これはおそらくあなたが行っていることのすべてではありませんが、それはその一部です。もう一度gitadd'ingを試すことができます。

于 2012-11-15T01:53:27.287 に答える