5

この質問は、これを読んだ後に私に来ました: Gitは本当に1つのファイルから別のファイルへの単一の関数の動きを追跡できますか? もしそうなら、どのように?

ワークフローは次のとおりです。

「ずっと前に」、大きなファイルfolder/file.pyを多くのファイルに分割しました :folder1/file.pyなどfolder2/file.py

git blame -Cを見ると、そのコードの履歴が正しく表示されますfolder2/file.py。一部のコミットは、この分割の前に行われたことがわかります。

問題は、まだ残っている古いバージョンのコードを維持し続けfolder/file.py、修正を「現在の」バージョンにマージするときに、git がフォルダーを再作成し続け、行われた修正をマージする必要があることfolderを認識しないことです。または、このコードのチャンクが現在どこにあるかによって異なります。folder/file.pyfolder1/file.pyfolder2/file.py

私は急いで見ましgit help mergeたが、それについては何も見つかりませんでした。

4

1 に答える 1

0

マージは を利用できませんgit blame -Cが、git merge名前変更の検出は行います。マニュアルページから:

   rename-threshold=<n>
   Controls the similarity threshold used for rename detection. See also git-diff(1) -M.

Git の名前変更のしきい値が高すぎて、マージ中に名前変更を検出できない可能性があります。また、検出の計算負荷が高すぎる可能性もあります。rename-threshold を 75 などに下げて、テスト マージを実行してみてください。

git merge -X rename-threshold=75 <branch>

正しい数値を見つけるためにしばらく遊んでみる必要があるかもしれません。計算が難しすぎて git が終了する場合は、git config merge.renamelimit 0上記のスレッドで説明されている を設定してみてください。

この回答は、上記が失敗した場合にも役立つ場合があります。リンクされたスクリプトは試してい-X ignore-space-changeませんが、調査する価値があるかもしれません。

于 2012-06-15T13:32:29.697 に答える