我正在尝试使用JGit的BundleWriter创建一个存储库的git包。我试图在我的包中包含所有Refs,如下所示:
Repository repo; // valid repo from elsewhere
BundleWriter bundleWriter = new BundleWriter(repo);
Map<String, Ref> refMap = repo.getAllRefs();
for (Ref ref:refMap.values()) {
bundleWriter.include(ref);
}
JGit抛出符号HEAD引用的异常,引用默认分支(refs / head / master)
java.lang.IllegalArgumentException: Invalid ref name: HEAD
at org.eclipse.jgit.transport.BundleWriter.include(BundleWriter.java:132)
如果我排除了HEAD符号引用,那么捆绑包就可以了,但是当克隆包时,丢失的HEAD引用会导致以下git错误:
warning: remote HEAD refers to nonexistent ref, unable to checkout.
我可以手动检查master以使事情恢复正常但它不是理想的行为,因为捆绑包被发送给其他人,他们希望它像任何其他git存储库一样工作并包含指向的HEAD引用默认分支。
任何人都可以提供任何建议或解决方法,以便克隆捆绑时设置默认分支吗?
由于
答案 0 :(得分:0)
该错误已在bug 446813中报告给JGit(由我假设的OP)。它已经修复,将在下一个JGit版本(3.6)中发布。
答案 1 :(得分:0)
注意:现在在Git 2.11修复中解释了错误的来源:
请commit eb39879查看commit 63b747c,Jonathan Tan (jhowtan
)(2016年9月9日)
帮助:Jonathan Nieder (artagnon
)。
请commit 55e4f93查看Jonathan Nieder (artagnon
)(2016年9月9日)
帮助:Jonathan Nieder (artagnon
)。
(由Junio C Hamano -- gitster
--合并于commit 07d8724,2016年9月21日)
connect:广告功能不是参考
自[JGit] v3.1.0.201309270735-rc1~22(广告功能 在上传服务中没有参考。,2013-08-08,commit ae1f469),JGit的ref广告包括一个名为
capabilities^{}
的引用来宣传其功能,而git的参考在这种情况下,广告是空的 这允许客户端了解服务器的功能,并且需要,例如,当没有广告参考时,shaetch-by-sha1可以工作。
此处,这也会影响git bundle
如上所述[{3}},它是above。
从克隆束时,丢失的HEAD引用会导致以下git错误:
warning: remote HEAD refers to nonexistent ref, unable to checkout.
这就是现在(Git 2.11,Q4 2016)的不同之处:
Git在其针对推送的ref广告中宣传相同的
capabilities^{}
参考,但由于它从未进行过提取,因此客户并不需要处理此案例。
处理它。