我有一个位于 的裸仓库main.git,我试图foo在另一个仓库中获取一个分支(比如说)test,它刚刚被git init'd:
fetchtest/
|- main.git/
|- test/
|- .git/
Run Code Online (Sandbox Code Playgroud)
定期使用Git命令,我可以做一个git fetch ../main.git foo:foo,这将创建一个新的分支foo中test/,并获取了分支所需要的对象。然后我想做同样的事情,但使用 JGit 以编程方式,即不使用 git CLI 而只使用 Java 代码。我无法使用 git CLI:
Git git = Git.init().setDirectory(new File("fetchtest/test/")).call();
git.fetch().setRemote(new File("../main.git"))
.setRefSpecs(new RefSpec("foo:foo"))
.call();
Run Code Online (Sandbox Code Playgroud)
但它只是错误:
org.eclipse.jgit.api.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137)
// ......
Caused by: org.eclipse.jgit.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.transport.FetchProcess.expandSingle(FetchProcess.java:349)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:139)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:113)
at …Run Code Online (Sandbox Code Playgroud) jgit 中有一个 org.eclipse.jgit.transport.OperationResult#getAdvertisedRefs。该术语似乎不是 jgit 特有的,但我找不到对广告参考的任何精确描述。
最好的问候,尤金。
我正在使用eclipse Juno,昨天我注意到我的电脑变得非常热.我检查了CPU使用率,看它是100%.Eclipse是罪魁祸首,忙于"重新索引存储库工作区".半小时后它没有完成,我的机器几乎融化了,我搜索并发现了类似的问题:
Eclipse挂起"重新索引(完全)存储库{username}"
事情是我没有使用git.通过我不想要的东西的声音,因为它会占用我所有的CPU.我删除了〜/ git,删除了一个使用git的项目,检查了〜/ .git下的任何文件,从eclipse插件中删除了egit和jgit,它仍然在发生.
我可以每次都停止进程,但现在似乎无法构建工作区.
所以我决定升级到开普勒,现在我遇到了一个类似的问题:
"计算存储库工作空间的Git状态"
它再次占据了我100%的CPU,并威胁要放火烧我的桌子.
我甚至没有任何开放的git项目.
我该如何阻止这个愚蠢的事情?每次我停止进程,但如果我然后尝试清理重建或打开一个项目,它会再次启动.
背景:
我们目前正在使用 git 在我正在开发的 Web 应用程序中进行源代码管理。有一个编辑器,因此还有一个 git 的 Web 界面。
我们的用例之一是人们还可以从命令行管理他们的 git 存储库,因此 Web 界面需要能够以某种方式处理它发现存储库的任何奇怪状态。
题:
为了进行测试,获得一个包含所有可能状态的文件的 git 存储库会很棒,这样我就可以验证是否处理了所有可能的条件。阅读“man git-status(1)”时,我计算了一个文件可能存在的 24 个状态(不包括被忽略)。
我只知道如何创建这些状态中的 17 个。
这是我不知道如何重现的状态的 XY 代码(请参阅git-status)。
D M deleted from index
C [ MD] copied in index
D D unmerged, both deleted
A U unmerged, added by us
U A unmerged, added by them
Run Code Online (Sandbox Code Playgroud)
我想使用 JGit 确定 HEAD 的远程跟踪分支。
在直接 git 中,我可以这样做:
git rev-parse --abbrev-ref --symbolic-full-name @{upstream}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 JGit 中做到这一点?
我正在Windows项目的行尾设置为LF的计算机上工作。jgitflow:release-start运行命令后,将使用新版本更新poms,但poms中的行尾也将更改为CRLF。仅提及*.xml text eol=lf.gitattributes中有一行。
有谁知道如何防止这种情况?
我正在将 JGit 用于我的一个涉及 git 深入使用的项目。
我的目标是使用 aRevWalk能够按时间顺序迭代存储库中的提交,从特定提交开始。我设法分别实现了这两个目标:
RevSort.REVERSERevWalk.markStart(RevCommit c) 我的问题是,当我尝试将两者结合起来时,似乎 RevSort 覆盖了 markStart,而 RevWalk 总是在我指定的提交的提交开始处开始。
这个片段显示了我所拥有的:
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevSort;
import java.io.IOException;
import org.eclipse.jgit.errors.AmbiguousObjectException;
import org.eclipse.jgit.errors.MissingObjectException;
public class Main {
public static void main(String[] args) throws IOException, AmbiguousObjectException, MissingObjectException {
final String repositoryPath = args[0];
final String commitID = args[1];
final Repository repository = new FileRepository(repositoryPath + "/.git");
final RevWalk walk = new RevWalk(repository);
walk.sort(RevSort.REVERSE);
walk.markStart(walk.parseCommit(repository.resolve(commitID)));
for (final RevCommit …Run Code Online (Sandbox Code Playgroud) 我需要从master中获取不属于merge类型的提交,而不是来自其他分支(它们直接放在master上).git命令是
git log --no-merges --first-parent
我怎么能用JGit做到这一点?我设法获得了不使用类型合并的提交
RevFilter.NO_MERGES
Run Code Online (Sandbox Code Playgroud)
但是如何才能获得直接提交到master分支的提交?
我有以下git命令:
git log --stat=1000 --all > gitstat.log
Run Code Online (Sandbox Code Playgroud)
有可能在JGit中实现吗?
如果是,用JGit编写的等效方法是什么?