2017-01-12 4 views
0

DiffEntryが届いたツリー(古いものか新しいもの)を迅速かつ簡単に判別する方法が見つからないようです。私の場合は、欠陥/作業ツリーの "発信"(言い換えれば)変更だけに興味があります。他の/マスターブランチからの新しい "着信"変更は関心がありません。JGitのDiffCommandでどのブランチが変更されたかを知るには?

IOW、ファイルのパス名、バージョン、変更の種類のみが必要はまだ他の/ masterブランチにはありません...私は確かに必要ないファイル内容の変更を解析します。マスターブランチの変更は最終的には興味深いものになるでしょうが、私が持っているプログラムによるユースケースを混乱させています。

コードスニペットは:

AbstractTreeIterator oldTreeParser = prepareTreeParser(repository, oldBranchName); 
AbstractTreeIterator newTreeParser = prepareTreeParser(repository, newBranchName); 
gitInstance = new Git(repository); 
List<DiffEntry> diff = gitInstance.diff().setOldTree(oldTreeParser).setNewTree(newTreeParser).setShowNameAndStatusOnly(true).call(); 
for (DiffEntry entry : diff) 
{ 
    // is entry from oldTree or newTree or both? 
} 

答えて

0

あなたはファイルを追加、変更、または削除されたかどうかを判断するためにDiffEntry::getChangeType()メソッドを使用することができます。例えば

switch(diffEntry.getChangeType()) { 
    case ADD: 
    // file does not exist in oldBranch, file is new in newBranch 
    break; 
    case DELETE: 
    // file did exist in oldBranch, file was deleted in newBranch 
    break; 
    case MODIFY: 
    // file exists in oldBranch and newBranch, content was changed 
    break; 
    case COPY: 
    case RENAME: 
    // file was copied or moved to a new location 
    break; 
} 

は、これはあなたが探していたものですか?

+0

私は、MODIFYがファイルを変更したブランチを判断するのにgetChangeType()で十分ではないと思います。またADDとDELETEの場合は、もともとブランチのどちらにもパートAがないと言うので、誤解を招きます。その場合、チームの他の人がパートAをマスターブランチに追加します。私の作業ブランチとマスターを比較すると、私の支店は部分Aを削除したと思っています。「削除」アクションは真実ではないだけでなく、そのケースを私が実際に行っているケースと区別する方法もないようです。私の枝の中の部分Aを削除しました。 –

+0

私が本当に後にしているのは、DiffEntryが古いブランチ、新しいブランチ、またはその両方から来た場所です。あるいは、何らかの理由でDiffCommandがそれを判断できない場合は、別のAPIアプローチが可能でしょうか?大きなパフォーマンスのヒットではないものがあります。これは、diff出力を解析すると(数十、数百、または数千のファイルを扱うことがあるかもしれません)場合があります。 –

+0

私には、Gitの概念のいくつか(例えばブランチとは何か、diffとは何か)の理解には不一致があるようです。私の知る限り、変更タイプADDは実際の加算を示し、DELETEは実際の削除を示します。疑問がある場合は、あなたの前提を立証したり否定したりするためのテストケースに戻ってください。 –

関連する問題