2016-04-22 8 views
1

コンテキスト:私のマージが競合に走ったと私は、この例のようにファイルがあります:JGitはコミットする前にファイルを責めますか?

foo.txtの

1 
<<<<<< HEAD 
2-master 
====== 
2-side 
>>>>>> df803849788fde47965b3dc8f07f07d48320ea9c 
3 

(マージ)質問:人の開発者を得るためには実際にコミットする前に結果ファイル(上記)を非難する方法、競合する行を変更しましたか?私は次の操作を実行しようとしたが、非難は、ループ内nullである:それはgit blame Foo.txt

問題のために動作します。

MergeResult m = runMerge(aScenario); 
BlameCommand blamer = new BlameCommand(git.getRepository()); 
BufferedReader br = new BufferedReader(new FileReader(new File(mergedfilepath))); 
BlameResult blame = blamer.setFilePath(mergedfilepath).call(); 
for (int i = 0; (line= br.readLine())!=null ; i++) { 
    // the blame at this point is null. 
    PersonIdent person = blame.getSourceAuthor(i); 
    System.out.println(person.getName() + ": "+ line); 
} 

答えて

2

私はトラバーサルのソースが結果内容であるべきだと思います。

そこから始めると、変更されたリージョンをループして作者を尋ねることができます。たとえば:

BlameResult blameResult = git.blame().setFilePath(...).call(); 
int size = blameResult.getResultContents().size(); 
for(int i = 0; i < size; i++) { 
    System.out.println(blameResult.getSourceAuthor(i)); 
} 

は少なくともラインのファイルの作業ディレクトリのバージョンに追加され、しかしコミットしていない名前の作者が返されます。

ただし、getSourceAuthor()に対応するコードはnullに対応して作成する必要があります。 JavaDocは、戻り値はnullである可能性があると述べています。

+0

申し訳ありませんが、ラインコンテンツを保持する変数を作成した点を除いて、実際のソリューションとの実際の違いはわかりません。 '...'がファイルパスを意味する場合、これは私の 'mergedfilepath'が保持するものです。私はファイルのパスをチェックし、それが正しいです。あなたのコードを使用して、同じ「ヌル」値を得ました。 –

+0

どの行に 'null 'が返されますか? –

+0

'BlameCommand.call()'は 'null'を返します。 –

関連する問題