标签: jgit

过滤 (git) diff 输出以仅包含与模式匹配的行

是否可以使用 diff/git (或其他常见实用程序)生成 包含与模式匹配的更改的差异?

例如,我有一个文件有两个不同的版本:

a/文件.txt

alpha
marker 100
omega
Run Code Online (Sandbox Code Playgroud)

b/文件.txt

start
marker 200
end
Run Code Online (Sandbox Code Playgroud)

我想生成仅包含对包含字符串marker(或其他正则表达式模式)的行的更改的补丁:

diff --git a/file.txt b/file.txt
index eb27e64..fcc1676 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
 alpha
-marker 100
+marker 200
 omega
Run Code Online (Sandbox Code Playgroud)

(应用此类补丁后,只有 alpha->start、omega->end 更改仍处于待处理状态。)

现在我有一个带有 JGit 的自定义基于行的处理器,但是我对我的实现非常不满意,因为我必须手动解析/拆分/重新组合块,并通过复制/破解 JGit 内部来生成差异)。

由于这似乎是一个常见的用例,我希望有一些工具可以提供开箱即用的功能,但到目前为止我还没有找到任何东西。

请注意,使用类似git diff -G'marker'或任何类型的块过滤是不够的,因为块本身可以任意大(例如,这里只有一个块包含整个文件更改)。

git diff git-diff jgit

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

使用JGit获取存储库的所有标记

我想获得一个存储库的所有标签列表以及tagger和带有JGit的commit-IDs.

首先,我尝试了Git.tagList().call()命令并解析标签:

objectIdOfTag = oneResultOfTheTagList.getObjectId(); 
// or should I call getPeeledObjectId() here?

RevWalk walk = new RevWalk(repository);
RevTag tag = walk.parseTag(objectIdOfTag);
Run Code Online (Sandbox Code Playgroud)

这适用于我的存储库,但我不确定这是否正确:呼叫是正确Ref.getObjectId()还是应该呼叫Ref.getPeeledObjectId()?(什么是" 去皮的 ObjectId"?)

使用JGit检索标记列表时,轻量级和带注释的标记之间是否存在差异?

java tags jgit

4
推荐指数
1
解决办法
2578
查看次数

Jenkins git-client:如何在windows上移动到jgit

自Jenkins git-client插件开始使用jgit以来,配置问题已经出现很多问题,我所看到的所有解决方案都只是转而使用旧的git命令行,因为现在大多数安装都有大量的hack来制作它大部分时间都有效.

我们在同一条船上,但是在Windows下git命令行仍然非常不可靠.我们喜欢jgit在新版本中使用引擎的想法git-client,并希望看看它是否真的让事情变得更好.但我找不到一个关于如何迁移的文件jgit.

仅供参考我已经知道了 -Dorg.jenkinsci.plugins.gitclient.Git.useCLI=false , -Dorg.jenkinsci.plugins.gitclient.Git.useJGit=true 我正在寻找的是如何为ssh,电子邮件/用户信息等配置jgit.

git jgit jenkins

4
推荐指数
1
解决办法
2812
查看次数

使用JGit Eclipse提交特定日期

我已经研究过从Java控制Git的可能性.我发现的是:

我尝试使用Runtime和ProcessBuilder为git编写自己的Java包装器,但是我遇到了进程线程的问题,等待线程完成一些时间.

然后,我研究了其他API解决方案.首先我尝试了JavaGit API,但我根本无法工作.

其次,我测试了JGit API,看起来很棒.但我很快就发现我无法像使用Java包装器那样设置提交日期:

ProcessBuilder pb = new ProcessBuilder("git", "commit", "--date=" + "\"" + customDateString + "\"", "-m \"" + comment + "\"");
Run Code Online (Sandbox Code Playgroud)

我下载了JGit源代码,看看我是否可以实现它,但它读得太多了,我无法在Github上找到任何问题跟踪器,以便JGit提出建议.

有人可以帮我这样做吗?
或者告诉我在哪里可以写信给开发人员提出建议?

java eclipse git jgit

4
推荐指数
1
解决办法
639
查看次数

JGit:如何压缩提交

关于如何使用任何建议RebaseCommand,MergeCommand或JGit到壁球提交任何其他命令?我找不到很多例子,文档也没什么帮助.

一个简单的例子

我想压制下面的树:

A-----B------C------D------E------F------G------H
Run Code Online (Sandbox Code Playgroud)

进入这一个:

A----Z-----H
Run Code Online (Sandbox Code Playgroud)

Z被压扁提交的B,C,D,E,F,和G.

任何建议和有用的资源表示赞赏.

java git squash jgit

4
推荐指数
1
解决办法
1028
查看次数

使用JGit对最后一次提交的文件差异

我正在尝试使用JGit来获取上次提交的文件与最近未提交的更改之间的差异.我怎么能用JGit做到这一点?(使用命令行将输出git diff HEAD)

经过几次讨论(link1,link2)后,我带来了一段代码,能够找到未提交的文件,但是我无法区分文件

Repository db = new FileRepository("/path/to/git");
Git git = new Git(db);

AbstractTreeIterator oldTreeParser = this.prepareTreeParser(db, Constants.HEAD);

List<DiffEntry> diff = git.diff().setOldTree(oldTreeParser).call();

for (DiffEntry entry : diff) {
    System.out.println("Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId());
    DiffFormatter formatter = new DiffFormatter(System.out);
    formatter.setRepository(db);
    formatter.format(entry);

}
Run Code Online (Sandbox Code Playgroud)

UPDATE

这个问题很久以前了.我现有的用于显示未提交的代码.prepareTreeParser在显示差异的上下文中,我正在使用的当前代码是:

public void gitDiff() throws Exception {
    Repository db = new FileRepository("/path/to/git" + DEFAULT_GIT);
    Git git = new …
Run Code Online (Sandbox Code Playgroud)

java git jgit

4
推荐指数
1
解决办法
3051
查看次数

如果在JGit中不存在,如何打开创建它的存储库?

想出了:

/**
 * Create a repo at the specified directory or open one if it already
 * exists. Return a {@link Git} object...
 *
 * @param p
 *            Path to the repo root (the dir that contains the .git folder)
 * @return a "Git" object to run porcelain commands on...
 * @throws GitterException
 *             if the specified path cannot be resolved to a directory, or
 *             the repository failed to be build (...) or created
 */
public static Git open(Path …
Run Code Online (Sandbox Code Playgroud)

jgit

4
推荐指数
1
解决办法
1714
查看次数

JGit检查分支是否已签出

我正在使用JGit开发一个项目.我设法删除了一个分支,但我也想检查该分支是否已检出.我发现了一个变量,CheckoutCommand但它是私有的:

private boolean isCheckoutIndex() {
    return startCommit == null && startPoint == null;
}
Run Code Online (Sandbox Code Playgroud)

没有公共方法返回我想要的东西.当我在签出的分支上使用下面的命令时,它返回一个错误,分支无法删除,所以我想先检查是否签出.

git.branchDelete().setForce(true).setBranchNames(branchName).call();
Run Code Online (Sandbox Code Playgroud)

java jgit

4
推荐指数
1
解决办法
2113
查看次数

jgit - 删除.git目录(或获取没有它的文件)

我需要在java中克隆一个git repo.我正在使用jGit.

我正在使用的代码行是:

Git clone = Git.cloneRepository().setURI(URIofRepo).setDirectory(localPath).call();
Run Code Online (Sandbox Code Playgroud)

其中URIofRepo是:我的repo的github链接和localPath的位置:我希望克隆发生的目录.

这非常有效.但是,由于我正在使用的项目不需要克隆来继续工作,我只是希望克隆具有github repo的内容而没有.git目录.

我也试过使用以下内容:

    File dirToDelete = new File (path   + "/.git");
    FileUtils.deleteDirectory(dirToDelete);
Run Code Online (Sandbox Code Playgroud)

但是我得到一个IO异常,说我无法删除该文件,如下所示:

线程"main"中的异常java.io.IOException:无法删除文件:C:\ testing\testRepo1.git\objects\pack\pack-7ca7f11688adda065d62f3394d0e055346beff22.pack

java git jgit

4
推荐指数
2
解决办法
2955
查看次数

JGit创建新的本地分支并推送到远程(远程上不存在分支)

我正在研究一个ANT任务,该任务调用一些使用JGit在git存储库上创建新分支并将其推送到远程的java.我正在使用JGit 2.1.0.

这是代码:

CreateBranchCommand bcc;
CheckoutCommand checkout;
Git git;

try {
    Repository repo = new FileRepositoryBuilder().readEnvironment().findGitDir(src).build();
    git = new Git(repo);

    bcc = git.branchCreate();
    checkout = git.checkout();
} catch (IOException e) {
    throw new BuildException("Could not access repository " + src, e);
}

try {
        bcc.setName(branch)
            .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
            .setStartPoint("origin/" + branch)
            .setForce(force)
            .call();

        checkout.setName(branch);
        checkout.call();
}
} catch (Exception e) {
    throw new BuildException("Could not checkout repository " + src, e);
}
Run Code Online (Sandbox Code Playgroud)

SRC变量被设置为git仓库的路径(其已经被克隆).该分支变量设置为:release_2_0_2变量设置为:真 …

java git git-checkout jgit git-branch

4
推荐指数
1
解决办法
6724
查看次数

标签 统计

jgit ×10

git ×7

java ×7

diff ×1

eclipse ×1

git-branch ×1

git-checkout ×1

git-diff ×1

jenkins ×1

squash ×1

tags ×1