- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 jgit 和 gitolite 进行源代码控制,我有一个应用程序根据命令生成某些代码,我们希望将其提交给源代码控制。目标是快进 pull ,提交新代码,然后推送它。
我有以下方法:
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()
方法调用时失败,但出现以下异常:
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.<init>(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 org.eclipse.jgit.transport.Transport.fetch(Transport.java:1104)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128)
at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:245)
at net.intellidata.dpu.controller.schema.EntityMappingController.commitToGitRepository(EntityMappingController.java:149)
... (truncated where it meets my code)
按照我的阅读方式,它似乎没有在 user_home/.git
中找到我的 known_hosts 文件。但是,我已经搜索了一个小时,但没有找到一种方法来配置 JGit 来告诉 JSch 在哪里寻找 known_hosts 文件。
建议?我知道来源条目存在于我的 known_hosts 文件中
最佳答案
This answer提及:
jsch.setKnownHosts("C:\\Users\\aUsername\\known_hosts");
但是你使用的是 jgit,不是 jsch (the Java secure shell)直接,让我们看看:
C:\Users\VonC\prog\git>git clone https://github.com/eclipse/jgit
Cloning into 'jgit'...
remote: Counting objects: 37854, done.
remote: Compressing objects: 100% (7743/7743), done.
remote: Total 37854 (delta 22009), reused 34367 (delta 18831)
Receiving objects: 100% (37854/37854), 6.73 MiB | 1.37 MiB/s, done.
Resolving deltas: 100% (22009/22009), done.
C:\Users\VonC\prog\git>cd jgit
C:\Users\VonC\prog\git\jgit>grep -nrHI "setKnownHosts" *
org.eclipse.jgit/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java:262: sch.setKnownHosts(in);
找到了!
这来自JschConfigSessionFactory.java#knownHosts()
,看起来像:
new File(new File(home, ".ssh"), "known_hosts");
# with:
home = fs.userHome();
userHome
基于 System.getProperty("user.home") .
因此请确保您的 java session 有一个 user.home
defined ,并且您在其中有一个 %USERPROFILE%/.ssh/known_hosts
文件。
(对于 Windows,user.home
应该由 java 设置为 %USERPROFILE%
,也就是说,如果您使用的是 Windows:在某些情况下,this won't always work ) .
现在,如果您确实有一个%USERPROFILE%/.ssh/known_hosts
,那么,作为mentioned here
Just SSH to the client (using command-line
ssh
tool), this will add entry to your~/.ssh/known_hosts file
.
在这种情况下,StormeHawke在 the comments 中提到:
since I'm running this in Tomcat as a windows service, Jsch (and by extension JGit) was looking not in my user folder but in the
SYSTEM
account's home folder for the.ssh
folder.
In this case I went ahead and just copied the.ssh
folder into theSYSTEM
home folder since Tomcat only runs on my machine for development and testing purposes (Probably not the best security policy but the risk is minimal in this case).
来自 this question , this one , 该目录为 LocalSystem Account应该是:
C:\Documents and Settings\Default User
# or Wind7 / 2008
C:\Windows\System32\Config\systemprofile
OP 提到:
根据这个调用:
System.out.println(System.getProperty("user.home"));
Windows7(可能还有任何其他基于 NT 的 Windows 系统)的默认 SYSTEM
主目录只是 C:\
。
(所以不太理想,但为了快速修复,它是有效的)。
关于java - 在 jgit 中配置 known_hosts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843399/
使用 JGit,我想尽可能使用 git log --name-status 获取在提交时更改的文件列表。 这可能吗?如果是这样,你怎么做? 最佳答案 我使用了来自伟大的 GitBlit-Tool 的
我想使用 JGit 确定 HEAD 的远程跟踪分支。 在直接 git 中,我可以这样做: git rev-parse --abbrev-ref --symbolic-full-name @{upstr
在 GitHub 项目中,当我们转到任何分支页面时,我们可以看到描述分支 w.r.t 的提交前/后数量的图表。掌握。 我们如何使用 JGit 确定数字后面的那些人? 我用过 BranchTrackin
我想将文件夹中所做的所有修改添加到索引中: 文件修改 添加了 文件 文件已删除 File gitDir = new File("/home/franck/Repositories/Git/Sandbo
想出了: /** * Create a repo at the specified directory or open one if it already * exists. Return a {
如何使用 JGit 确定哪些分支已合并到 master? 我想做相当于普通的 git 命令: git branch -a --merged 这在 JGit 中可能吗? 最佳答案 RevWalk::is
我正在尝试通过 CloneCommand 克隆 Git 存储库. 用这段代码 `Git.cloneRepository().setDirectory(new File(path)).setURI(ur
当我对存储库中的第一个提交执行 git show commit 时,我看到了所有文件以及文件的差异(即添加的所有行) $ git show cb5d132 commit cb5d13286cf9d14
我在应用程序中使用 JGit。此应用有一个 SecurityManager,它只允许特定的白名单类和方法产生新进程。 JGit 内部正在发现是否安装了本地 git 并尝试在 org.eclipse.j
我需要从上次 Jenkins 构建中提取的日期的提交列表,并获取自该日期以来的 merge 提交列表。到目前为止我已经编码以获得 merge 提交列表。只需要一个解决方案来提取指定日期之间的这些提交。
我使用 JGit 在我的本地磁盘上克隆了一个裸仓库。现在,我需要读取任何给定提交 ID (SHA1) 的文件内容。我该怎么做? 最佳答案 comment of Rüdiger Herrmann in
我正在尝试从托管在 bitbucket 上的远程存储库中提取数据。为此,我正在使用 JGit。我的代码如下; Git git = Git.open( new File( localPa
我正在尝试使用 JGit 将本地存储库推送到 github 存储库: String remote = "https://token@github.com/me/foo"; Repository rep
我找到了类似的 question并以此为基础,但出现错误 Cannot invoke method getAuthorIdent() on null object。我尝试获取最后一次提交,检查它是否等
是否可以使用 JGit 解析第一次提交某个文件的日期和时间? Git 等效项将列出第一个提交,例如: git log --format=%aD | tail -1 最佳答案 可以按如下方式使用 Re
我找到了类似的 question并以此为基础,但出现错误 Cannot invoke method getAuthorIdent() on null object。我尝试获取最后一次提交,检查它是否等
我想读取某个分支中某个提交处的文件内容:我目前正在使用此代码来读取某个提交处的文件内容,忽略该分支。 public static String readContentOfFileAtCommi
我想使用 jgit 创建一个 git 存储库浏览器。但我不知道如何获取文件的最后修改日期和最后提交消息。这是我当前的浏览器代码: File directory = new File("/Users/s
我想克隆远程存储库,添加文件并将文件推回,但出现异常: org.eclipse.jgit.api.errors.TransportException: git://192.168.1.1/abc: C
我们正在使用 git 来维护我们的源代码。像 git@xx.xx.xx.xx:XYZ.git 这样的 URL。我正在使用 JGit 提取更改。 UsernamePasswordCredentialsP
我是一名优秀的程序员,十分优秀!