6

コンテックス

作業コピーで、最後のコミット後に発生した可能性のあるファイルの名前変更を検出しようとしています。私の例では、クリーンな作業コピーがあり、それを行います。

git mv old.txt new.txt

実行$ git statusすると、期待される結果が表示されます。

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    old.txt -> new.txt

私は試した

を使用すると、削除されたリストにold.txtStatusCommandが表示され、追加されたリストにnew.txtが表示されます。しかし、それらをリンクする方法が見つかりません。

の存在は認識してRenameDetectorいますが、 を使用して動作し、 HEADWorking CopyDiffEntryの間で DiffEntries を取得する方法がわかりません。

4

2 に答える 2

8

気にしないで、答えを見つけました。JGit の API は非常に複雑です。

TreeWalk tw = new TreeWalk(repository);
tw.setRecursive(true);
tw.addTree(CommitUtils.getHead(repository).getTree());
tw.addTree(new FileTreeIterator(repository));

RenameDetector rd = new RenameDetector(repository);
rd.addAll(DiffEntry.scan(tw));

List<DiffEntry> lde = rd.compute(tw.getObjectReader(), null);
for (DiffEntry de : lde) {
    if (de.getScore() >= rd.getRenameScore()) {
        System.out.println("file: " + de.getOldPath() + " copied/moved to: " + de.getNewPath());
    }
}

(このスニペットも Gitective ライブラリを使用しています)

于 2013-06-25T15:59:05.030 に答える