Tag: jgit

什么是“git merge-base –fork-point branchA branchB”的jgit等价物

什么是“git merge-base –fork-point branchA branchB”的jgit等效代码? 我尝试了下面的代码,但我没有得到正确的答案。 我正在用它来寻找分支起源。 foreach.branch(git merge-base –fork-point mybranch theirbranch)将仅为起始点生成null提交ID。 所以,我需要做的就是弄清楚如何在jgit中执行此操作,并且我有一个计算分支原点的方法,当我还不知道它时。 private String getMergeBase(Repository repository, ObjectId commitIdA, ObjectId commitIdB) { RevWalk walk = new RevWalk(repository) try { RevCommit revA = walk.lookupCommit(commitIdA) RevCommit revB = walk.lookupCommit(commitIdB) walk.setRevFilter(RevFilter.MERGE_BASE) walk.markStart([revA,revB]) RevCommit mergeBase = walk.next() if (! mergeBase) { return null } return mergeBase.name } catch(Exception e) […]

当我使用RevFilter时,我的RevWalk没有选择任何提交

我正在使用jGit遍历存储库中的提交。 当我RevWalk使用RevWalk类时,我会收回存储库中的所有提交。 但是,当我使用revWalk.setFilter()添加filter时,我不再获得任何提交,即使我确定存在符合我的filter条件的提交。 这是我的代码: RevWalk walk = new RevWalk(repo); // These two lines give me trouble: // RevFilter filter = CommitTimeRevFilter.between(sinceDate, untilDate); // walk.setRevFilter(filter); Ref head = repo.getRef(“refs/heads/master”); RevCommit headCommit = walk.parseCommit(head.getObjectId()); // omitting some exception handling for conciseness walk.markStart(headCommit); List commits = new LinkedList(); for(RevCommit commit : walk) { MyCommitPOCO processedCommit = processRevCommit(commit); commits.add(processedCommit); […]

Ref Object的getPeeledObjectId()和getObjectId()有什么区别?

我正在使用jgit api来实现我的项目的构建,部署function( 在本地机器中 )。 我通过命令提示符通过以下命令提交了整个源代码(java项目) git add . git commit -a -m “Initial_Source” 这里我得到的提交ID为cb96c685a5a4338f852a782631df8d1cf5dca21d git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d [cb96c685a5a4338f852a782631df8d1cf5dca21d是commitid] git push git push –tags 但是当我试图通过getPeeledObjectId()获取提交id时,它返回null 我的代码是 Ref tag = git.getRepository().getRef(“Initial_Source”); Ref peeledRef = git.getRepository().peel(tag); return peeledRef.getPeeledObjectId(); — this is returning null 但我尝试使用getObjectId()而不是getPeeledObjectId() getObjectId() 。 它给出了commitId。 但我想知道何时使用getPeelObjectId()和getObjectId() 。 那些方法是什么?

无法使用File delete()方法删除git repo中的.pack文件

对于我写的这个方法,我正在使用jgit库克隆一个git repo,然后用这些文件做一些事情,最后我想删除repo。 我遇到的问题是当我在.pack文件(位于.git \ objects \ pack)上调用delete()方法时,它无法删除。 但是可以删除所有其他文件。 为什么会这样?

使用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 diff = git.diff().setOldTree(oldTreeParser).call(); for (DiffEntry entry : diff) { System.out.println(“Entry: ” + entry + “, from: ” + entry.getOldId() + “, to: ” + entry.getNewId()); DiffFormatter formatter = new […]

使用JGit从Git检索提交消息日志

我只想从Git存储库中检索commitlog,该存储库包含您在特定repopsitory上完成的所有提交的消息。 我找到了一些用于实现此目的的代码片段,并以exception结束。 try { FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repo = builder.setGitDir(new File(“https://github.com/name/repository.git”)).readEnvironment().findGitDir().build(); RevWalk walk =new RevWalk(repo); ObjectId head = repo.resolve(Constants.HEAD); RevCommit commit =walk.parseCommit(head); Git git =new Git(repo); Iterable gitLog = git.log().call(); Iterator it = gitLog.iterator(); while(it.hasNext()) { RevCommit logMessage = it.next(); System.out.println(logMessage.getFullMessage()); } } catch(Exception e) { e.printStackTrace(); } 但它给了我: org.eclipse.jgit.api.errors.NoHeadException: No HEAD […]

列出一个git远程仓库的分支而不克隆它

我想知道怎么可能用jgit列出远程Git仓库的所有分支但没有克隆它。 在浏览jgit的javadoc时,我发现了ListBranchCommand,但它似乎只适用于已经打开的Repository对象。 但我无法找到如何通过HTTP创建Repository对象而不在本地克隆它。 可能吗 ? 谢谢

在jgit中配置known_hosts

使用带有gitolite的jgit进行源代码控制,我有一个应用程序可以在命令中生成某些代码,我们希望将其提交给源代码控制。 目标是快速前进,提交新代码,然后推送它。 我有以下方法: private void commitToGitRepository(String updateComment, Config config) throws IOException, NoFilepatternException, GitAPIException { if(git == null) { git = Git.open(new File(config.getDpuCheckoutDir())); } PullCommand pull = git.pull(); pull.call(); } 此方法在pull.call()方法调用上失败,但有以下exception: com.jcraft.jsch.JSchException: UnknownHostKey: www.somehost.com. RSA key fingerprint is 9d:92:a9:c5:5d:cb:5f:dc:57:ff:38:7e:34:31:fe:75 at com.jcraft.jsch.Session.checkHost(Session.java:748) at com.jcraft.jsch.Session.connect(Session.java:319) at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116) at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121) at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.(TransportGitSsh.java:248) at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147) at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136) at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122) at […]

使用Java用户名和密码在ssh上克隆git存储库

我试图用ssh克隆一个带Java的git项目。 我有git-shell用户的用户名和密码作为凭据。 我可以使用以下命令在终端中克隆项目,没有问题。 (当然,它首先要求输入密码) git clone user@HOST:/path/Example.git 但是当我使用JGIT api尝试以下代码时 File localPath = new File(“TempProject”); Git.cloneRepository() .setURI(“ssh://HOST/path/example.git”) .setDirectory(localPath) .setCredentialsProvider(new UsernamePasswordCredentialsProvider(“***”, “***”)) .call(); 我有 Exception in thread “main” org.eclipse.jgit.api.errors.TransportException: ssh://HOST/path/example.git: Auth fail 我该怎么办? 有任何想法吗? (我使用的是OSX 10.9.4和JDK 1.8)

如何为jgit设置jschconfigsessionfactory的配置,以便拉动和推送工作?

我正在尝试使用jgit的api使用以下代码执行git pull / push org.eclipse.jgit.api.Git.open(theRepoFile).pull().call() 但我得到例外 JSchException Auth fail com.jcraft.jsch.Session.connect (Session.java:461) org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116) org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121) org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection. (TransportGitSsh.java:306) org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152) org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130) org.eclipse.jgit.transport.Transport.push (Transport.java:1127) org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153) 即使使用cgit pull and push工作。 我尝试检查SO以获取示例代码 使用jgit的Java git客户端 但上面的问题没有提供一个完整的编码示例,说明使用通常通过ssh密钥进行身份validation的远程仓库进行git pull所需的操作。 应该有办法从~/.ssh/或等效的Windows获取凭证信息。