JGit:BundleWriter包含Refs时出错

时间:2014-10-10 11:14:31

标签: git jgit

我正在尝试使用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引用默认分支。

任何人都可以提供任何建议或解决方法,以便克隆捆绑时设置默认分支吗?

由于

2 个答案:

答案 0 :(得分:0)

该错误已在bug 446813中报告给JGit(由我假设的OP)。它已经修复,将在下一个JGit版本(3.6)中发布。

答案 1 :(得分:0)

注意:现在在Git 2.11修复中解释了错误的来源:

commit eb39879查看commit 63b747cJonathan 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^{}参考,但由于它从未进行过提取,因此客户并不需要处理此案例。
  处理它。