2016-09-26 20 views
2

ファイルの内容を取得したい。入力はリビジョンです。 作業ディレクトリまたはステージ領域にあるファイルの内容を取得する方法 たとえば、ファイル 'Test'の値が '1'の場合 '2'に変更してファイル を変更した場合は、 '3'と同じファイル 今は2つのファイルが1つのステージにあり、1つはステージにありません。どのようにしてファイルの内容を取得できますか?私は唯一のステージング領域のエントリを超えるトラバースするためにIDやHEADJGit:TreeWalkを使用してファイルの内容を取得する

try (RevWalk revWalk = new RevWalk(getRepository())) { 
    RevCommit revCommit = revWalk.parseCommit(revision); 
    RevTree tree = revCommit.getTree(); 

    try (TreeWalk treeWalk = new TreeWalk(getRepository())) { 
     treeWalk.addTree(tree); 
     treeWalk.setRecursive(true); 
     treeWalk.setFilter(PathFilter.create(request.getFile())); 
     if (!treeWalk.next()) { 
      //error 
     } 
     ObjectId objectId = treeWalk.getObjectId(0); 
     ObjectLoader loader = repository.open(objectId); 
     content = new String(loader.getBytes()); 
    } 
} 

答えて

2

をコミットするための情報を得ることができたコードで

、リポジトリのDirCacheのホールドを取得する必要があります。このクラスはステージング領域を表します。例えば

DirCache index = repository.lockDirCache(); 
try { 
    // create treeWwalk 
    treeWalk.addTree(new DirCacheIterator(index)) 
    // iterate over treeWalk 
} finally { 
    index.unlock(); 
} 

あなたがロックされたディレクトリのキャッシュを取得したら、それは木の散歩に追加することができます。もう必要がなくなったらすぐにdirキャッシュのロックを解除することを忘れないでください。

コードスニペットと同じ方法で、treeWalk.getObjectId(0)を使用すると、現在のエントリのblob idを返すことができます。

+0

あなたは何を意味しましたか?もう必要がなくなったらすぐにdirキャッシュのロックを解除することを忘れないでください。 ? – user1365697

+0

getObjectIdとtreeWalkの違いは何ですか?何が良いですか?この場合のtreeWalkの操作方法は? – user1365697

+0

名前のように、 'lockDirCache()'は他人が使用するためにdirキャッシュをロックするので、できるだけ早くこのロックを解除する必要があります。 –

関連する問題