java—如何使用jgit将大块添加到临时区域(索引)

jgwigjjp  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(186)

你好,stackoverflow社区,
我正在使用java和jgit创建一个工具,它可以浏览所有本地git更改并决定代码级别(而不是文件级别!)哪些更改应添加到暂存区,然后提交。最后,一种形式的自动化“git add--patch”。
我设法得到了所有本地更改的列表(aka hunks,type hunkheader)。有了这个,我可以决定,哪些单独的大块头(类型编辑)将被添加到暂存区。
在jgit中,通过命令“git.add()”添加更改,但这只允许添加整个文件;不是代码部分。
我的问题是:
有了jgit,我怎样才能把特定的大块头(类型编辑)添加到暂存区?
我当前的示例实现:

// treeIterator of workspace
AbstractTreeIterator treeIteratorWorkspace = new FileTreeIterator( git.getRepository() );
// treeIterator of staging area
AbstractTreeIterator treeIteratorStagingArea = new DirCacheIterator( git.getRepository().readDirCache() );

DiffFormatter diffFormatter = new DiffFormatter( DisabledOutputStream.INSTANCE );
diffFormatter.setRepository( git.getRepository() );
diffFormatter.setContext( 0 );
List<DiffEntry> entries = diffFormatter.scan( treeIteratorStagingArea, treeIteratorWorkspace );

// Iterate changed files
for( DiffEntry entry : entries ) {
   System.out.println( "DiffEntry: " +entry );

   FileHeader fileHeader = diffFormatter.toFileHeader( entry );
   List<? extends HunkHeader> hunks = fileHeader.getHunks();
   for( HunkHeader hunk : hunks ) {
      System.out.println("HunkHeader: " +hunk);
      EditList editList = hunk.toEditList();

      for (Edit edit : editList) {
         /**
          * PICK HUNK AND ADD TO STAGING AREA
          */
      }
   }
}

使用的jgit版本:

<!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
<dependency>
   <groupId>org.eclipse.jgit</groupId>
   <artifactId>org.eclipse.jgit</artifactId>
   <version>5.9.0.202009080501-r</version>
</dependency>

谢谢你的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题