标签: jgit

如何通过EGit/JGit插件为Git事件创建一个监听器?

我一直在使用Subclipse API为Eclipse创建一个插件,用于侦听通过Subclipse插件发生的Subversion事件.我基本上实现了一个侦听器接口,然后在运行时通知有关正在进行的事件.

我想做类似的事情,但对于Git.在使用其他插件时,似乎EGit(基于JGit构建)将是最佳选择.我对他们的API没有多少经验.我想知道是否有人知道EGit或底层JGit是否有类似的API接口用于监听Git事件(例如提交,推送,拉取等)?

谢谢!

eclipse-plugin listener egit jgit

5
推荐指数
2
解决办法
1455
查看次数

从JGit中的RevCommit对象获取提交信息

我调用了jgit log命令并找回了一些RevCommit对象.我可以从中获取一些基本信息,并使用以下代码获取更改的文件列表.我还需要做两件事:

1)如果提交没有父母,我如何获得以下信息?

2)如何获取每个文件中更改的内容的差异

RevCommit commit = null;

RevWalk rw = new RevWalk(repository);

RevCommit parent = null;
if (commit.getParent(0) != null) {
   parent = rw.parseCommit(commit.getParent(0).getId());
}

DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE);
df.setRepository(repository);
df.setDiffComparator(RawTextComparator.DEFAULT);
df.setDetectRenames(true);

List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree());
for (DiffEntry diff : diffs) {
   System.out.println(getCommitMessage());

   System.out.println("changeType=" + diff.getChangeType().name()
           + " newMode=" + diff.getNewMode().getBits()
           + " newPath=" + diff.getNewPath()
           + " id=" + getHash());
}
Run Code Online (Sandbox Code Playgroud)

git jgit

5
推荐指数
1
解决办法
3592
查看次数

如何通过JGit与两个文件进行比较而不创建回购?

当我将JGit用于diff两个文件时,必须首先创建一个存储库。但是在Git中,我只需要使用command git diff --no-index 1.txt 2.txt

有没有一种方法可以diff在JGit中使用而无需创建仓库?

diff jgit

5
推荐指数
1
解决办法
1819
查看次数

代码中的JGit代理配置

我能够在JGit中使用clone命令克隆repo

Repo是http,当然,当我落后于代理时,它无法克隆

您能帮我解决一下代码示例如何在java中使用代理配置JGit

谢谢!

java proxy jgit

5
推荐指数
1
解决办法
3934
查看次数

Git:压缩不是最近提交的连续提交,而不是从根开始

我已经回顾了几个关于压缩最新提交压缩根提交的相关问题,但这两个问题都不能帮助我压缩不是根本的非最近提交.

这是我的开始场景:

D---E---F---G---H---I---J master
Run Code Online (Sandbox Code Playgroud)

和我想要的结果:

D---E---Z---I---J master
Run Code Online (Sandbox Code Playgroud)

什么Z是壁球F---G---H,和F---G---H,D---E和,I---J可以是任意长的非分支提交序列.

第一种方法:

[lucas]/home/blah/$ git rebase -i D
rebase in progress; onto D
You are currently editing a commit while rebasing branch 'master' on 'D'.

No changes
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^". …
Run Code Online (Sandbox Code Playgroud)

git version-control squash jgit

5
推荐指数
1
解决办法
1689
查看次数

IAM配置访问S3上的jgit

我正在尝试创建IAM权限,因此jgit可以访问我的一个存储桶中的目录.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::<mybucket>/<mydir>/*"]   
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::<mybucket>/<mydir>"]
    }
  ]  
}
Run Code Online (Sandbox Code Playgroud)

不幸的是它会抛出一个错误.我不确定还有什么其他允许行动才能实现.(在IAM有点新).

Caused by: java.io.IOException: Reading of '<mydir>/packed-refs' failed: 403 Forbidden
    at org.eclipse.jgit.transport.AmazonS3.error(AmazonS3.java:519)
    at org.eclipse.jgit.transport.AmazonS3.get(AmazonS3.java:289)
    at org.eclipse.jgit.transport.TransportAmazonS3$DatabaseS3.open(TransportAmazonS3.java:284)
    at org.eclipse.jgit.transport.WalkRemoteObjectDatabase.openReader(WalkRemoteObjectDatabase.java:365)
    at org.eclipse.jgit.transport.WalkRemoteObjectDatabase.readPackedRefs(WalkRemoteObjectDatabase.java:423)
    ... 13 more
Caused by: java.io.IOException:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>...</RequestId><HostId>...</HostId></Error>
    at org.eclipse.jgit.transport.AmazonS3.error(AmazonS3.java:538)
    ... 17 more
Run Code Online (Sandbox Code Playgroud)

403 Forbidden显然是错误但不确定需要添加到IAM中的内容.有任何想法吗?

[本来应该补充说,我在政策模拟器中尝试了这个,它似乎在那里工作.]

amazon-s3 jgit

5
推荐指数
1
解决办法
273
查看次数

如何在JGit中计算插入/删除的行数

当我们这样做时,git log --shortstat我们得到插入,删除和更改的行数.就像是:

1 file changed, 9 insertions(+), 3 deletions(-)
Run Code Online (Sandbox Code Playgroud)

请帮助我获取插入,删除和更改的行数.

  1. 我正在做一个存储库克隆来获取本地机器上的git项目.这是相同的代码:

    RepoClone repoClone=new RepoClone();
    repoClone.repoCloner();
    repository =         builder.setGitDir(repoClone.repoDir).setMustExist(true).build();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我甚至能得到一个TreeWalk:

    TreeWalk treeWalk=getCommitsTreeWalk();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我能够检索文件名,每个文件的提交次数,LOC以及处理每个xml/java文件的开发人员数量.

    while (treeWalk.next()) {
      if (treeWalk.getPathString().endsWith(".xml") || treeWalk.getPathString().endsWith(".java")) {
        jsonDataset = new JSONObject();
        countDevelopers = new HashSet < String > ();
        count = 0;
        logs = new Git(repository).log().addPath(treeWalk.getPathString()).call();
        for (RevCommit rev: logs) {
          countDevelopers.add(rev.getAuthorIdent().getEmailAddress());
          count++;
        }
        jsonDataset.put("FileName", treeWalk.getPathString());
        jsonDataset.put("CountDevelopers", countDevelopers.size());
        jsonDataset.put("CountCommits", count);
        jsonDataset.put("LOC", countLines(treeWalk.getPathString()));
        commitDetails.put(jsonDataset);
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在,我想检索每个文件插入和删除的行数.

请帮忙.提前感谢.

java git jgit

5
推荐指数
1
解决办法
1393
查看次数

使用JGit将git存储库克隆到InMemoryRepository

我需要InMemoryRepository使用JGit 将现有的git存储库克隆到,更改文件的内容并将更改推回远程存储库。

我找不到将存储库克隆到内存中存储库的任何示例。

我尝试了这个:

InMemoryRepository.Builder builder = new InMemoryRepository.Builder();  
InMemoryRepository inm = builder.build(); 
Git.cloneRepository().setURI("git@[github_url].git").setDirectory(inm.getDirectory()).call();  
Run Code Online (Sandbox Code Playgroud)

导致错误

“目标路径“ .git”已存在,并且不是空目录”。

我检查了InMemoryRepository.BuilderRepository类的配置选项,但没有发现任何有用的东西。

怎么做到呢?然后,从内存中存储库更改文件的内容并将其推送到github是否存在任何问题?

git jgit

5
推荐指数
2
解决办法
2037
查看次数

JGit预接收挂钩

使用JGit时,请执行同一服务器上的远程推送.

1)如果遥控器配置为file:///path/to/git/remote,则不会执行预接收挂钩.

2)如果配置了遥控器ssh://,将执行预接收挂钩.

如果使用Git命令行执行相同的推送,将始终执行预接收挂钩.

我不明白为什么会这样.

git jgit

5
推荐指数
1
解决办法
593
查看次数

使用JGit怪时结果错误

当我运行以下示例代码时:

public static void main(String[] args) throws IOException, GitAPIException {
    Git git = new Git(new FileRepository(PATH_TO_REPO);
    BlameCommand blameCommand = git.blame();
    blameCommand.setStartCommit(git.getRepository().resolve("HEAD"));
    blameCommand.setFilePath(PATH_TO_FILE);
    BlameResult blameResult = blameCommand.call();

    Set<Integer> iterations = new HashSet<>();
    Set<Integer> gitSourceLines = new HashSet<>();

    RawText rawText = blameResult.getResultContents();
    for (int i = 0; i < rawText.size(); i++) {
        iterations.add(i);
        gitSourceLines.add(blameResult.getSourceLine(i));
        System.out.println("i = " + i + 
                ", getSourceLine(i) = " + blameResult.getSourceLine(i));
    }
    System.out.println("iterations size: " + iterations.size());
    System.out.println("sourceLines size: " + gitSourceLines.size());
}
Run Code Online (Sandbox Code Playgroud)

该文件的结果如下:

i = …
Run Code Online (Sandbox Code Playgroud)

java git blame jgit

5
推荐指数
0
解决办法
275
查看次数

标签 统计

jgit ×10

git ×6

java ×3

amazon-s3 ×1

blame ×1

diff ×1

eclipse-plugin ×1

egit ×1

listener ×1

proxy ×1

squash ×1

version-control ×1