最近将Jgit升级到5.10.0.202012080955-r。在此之后,我们将在克隆一个裸git存储库后获得IOException
。到目前为止,它似乎没有造成任何可见的功能影响,但它是一个令人担忧的原因。此问题仅在Kubernetes部署中出现,而不是在Junit测试中出现。这是一个已知的问题吗?如果是,是否有任何变通方法或缺少任何内容?
谢谢
[36morg.eclipse.jgit.util.FS [0;39m [2m:[0;39m Cannot save config file 'FileBasedConfig[/.config/jgit/config]'
java.io.IOException: Creating directories for /.config/jgit failed
at org.eclipse.jgit.util.FileUtils.mkdirs(FileUtils.java:411) ~[org.eclipse.jgit-5.10.0.202012080955-r.jar!/:5.10.0.202012080955-r]
at org.eclipse.jgit.internal.storage.file.LockFile.lock(LockFile.java:130) ~[org.eclipse.jgit-5.10.0.202012080955-r.jar!/:5.10.0.202012080955-r]
at org.eclipse.jgit.storage.file.FileBasedConfig.save(FileBasedConfig.java:219) ~[org.eclipse.jgit-5.10.0.202012080955-r.jar!/:5.10.0.202012080955-r]
at org.eclipse.jgit.util.FS$FileStoreAttributes.saveToConfig(FS.java:735) ~[org.eclipse.jgit-5.10.0.202012080955-r.jar!/:5.10.0.202012080955-r]
at org.eclipse.jgit.util.FS$FileStoreAttributes.lambda$4(FS.java:424) ~[org.eclipse.jgit-5.10.0.202012080955-r.jar!/:5.10.0.202012080955-r]
at org.eclipse.jgit.util.FS$FileStoreAttributes$$Lambda$1660/0x00000000f4008230.run(Unknown Source) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:836) ~[na:na]
3条答案
按热度按时间vql8enpb1#
在本例中,Jgit试图在基于
XDG_CONFIG_HOME
的路径上创建一个配置文件。如果未设置
XDG_CONFIG_HOME
,则它将具有默认值$HOME/.config
。在我的Kubernetes环境中无法访问此特定路径。更改
XDG_CONFIG_HOME
以指向适当的路径。因此Jgit将能够创建配置文件。kognpnkq2#
JGit不需要创建一个配置文件来运行。
但很明显,它确实存在:
$HOME/.config/jgit/config
,过去曾导致问题(对于IntelliJ或最近的2023年4月的Eclipse)而不需要使用环境变量?
这似乎是有问题的,除非,也许,如果你在JGit中实现了一个自定义的
FS
(文件系统)。其中包括在JGit中子类化
FS
类来创建自己的自定义文件系统。当您通过
FileRepositoryBuilder
创建Repository
时使用上述CustomFS
,您可以在其中指定您的自定义FS
:这样,存储库将使用您的自定义
FS
,这可以防止在无法访问的目录中创建配置文件。但这只有在不需要受限API的情况下才有效。
不过,可以使用环境变量更改
HOME
或XDG_CONFIG_HOME
,以便测试.config/jgit/config
的替代位置。在Eclipse JGit issue 582064中,Thomas Wolf补充道:
Git中的正常方式确实是环境变量。
在JGit中通过编程解决这个问题的常用方法是安装一个自定义的
SystemReader
,它覆盖一些变量,或者提供自定义的系统或全局配置。目前,JGit有一些不一致的地方,这可能会使主目录很难做到这一点。我们正在慢慢地努力。
其中一部分应该在我为bug 436127推送的更改中得到修复;这应该可以让你有一个自定义的
SystemReader
,它返回getProperty("user.home")
和getenv("HOME")
的自定义值,以便为JGit重新定义它。(或getenv("XDG_CONFIG_HOME")
的自定义值。)还有bug 581875,它是关于
$XDG_CONFIG_HOME
中的全局(用户)git config
。对于在既没有定义
$HOME
也没有定义$XDG_CONFIG_HOME
的容器中运行,并且没有主目录:在容器设置中,定义任一变量指向JGit具有写权限现有目录并不困难azpvetkf3#
设置XDG_CONFIG_HOME对我不起作用。我用的是windows机器,下面的东西对我有用。
在程序中传递下面的环境变量