当前位置: 首页 > 知识库问答 >
问题:

JGit裸提交/树构造

赫连飞沉
2023-03-14

我正在尝试使用jgit将单个blob直接提交到存储库中。我知道如何插入blob并获得它的sha1,但是我很难为这个场景构建一个树。我似乎不知道如何正确地使用jgit的树抽象(TreeWalk之类的)来递归地构造一个树,几乎与以前的提交相同,只是blob的父树不同。

在JGit中执行此操作的惯用方法是什么?

我之所以这么问,是因为我正在编写一个程序,它类似于git存储库中文档的编辑器。在我的例子中,使用git的全部意义在于能够同时拥有文档的多个版本(也就是分支)。因为它是一个编辑器,我必须能够提交更改,但是因为我想同时看到文档的多个版本,所以使用JGit瓷瓶API签出、修改文件和提交是不可能的,它必须直接与Git对象一起工作。

共有1个答案

姬宝
2023-03-14

您可以为此使用的底层API是TreeFormatter和CommitBuilder。

这里可以看到一个使用它的示例。在这种情况下,它构造了一个具有多个子树的新树对象。

在您的情况下,您可能需要递归地遍历树,并在更改文件的路径上创建新的树对象,然后将它们从下往上插入。对于树的其余部分,您可以使用现有的树ID,而不必深入其中。我建议研究<code>TreeWalk#setRecursive。

另一种选择是创建一个核心DirCache,用提交和更新条目中的DirCacheEntry填充它,然后调用DirCache#WriteTree

 类似资料:
  • 问题内容: 在连接到仓库以及添加,提交甚至循环提交文件的消息方面,我已经设法掌握了jGit文件的基础知识。 我接下来要做的是能够获取单个文件的所有提交消息,然后能够将单个文件还原回特定的参考/时间点。 问题答案: 这是基于所有父提交查找提交更改的方法 (标量代码) 请注意,TreeFilter.ANY_DIFF适用于单个树遍历器,并将返回根提交中可用的所有元素。 然后,您将不得不遍历树以查看您的文

  • JGit初学者问题: 我使用JGit从存储库读取文件(BLOB)并操作其内容。之后,我想将具有相同文件名的新内容作为新提交写回存储库。但是如何使用JGit提交新内容? 我的伪代码: 我是否必须将 写入一个文件,并使用 AddCommand 和 CommitCommand 提交此文件?或者,我可以将 String“即时”写入具有相同文件名的存储库吗? 网络上有没有一个示例如何使用JGit进行提交?

  • 我需要将提交的内容存储在字符串中,这将是从例如master到最新提交的差异。 如何使用JGit显示提交之间的更改底部答案与我想要的非常相似 这是链接中的代码 格式()方法是无效的,似乎没有办法返回字符串或某种输出流。 我希望会有一些类似于 我知道这在库中不存在,但是必须有一些东西可以将提交的内容放入可以转换为字符串的内容中。

  • 我有一个新克隆的存储库的SHA-1。我要这个SHA-1的作者缩进。 所以我需要使用RevWalk并迭代整个存储库?或者是否有 方法或其他代码可用于获取 或其他具有 PersonIdent 的对象? 我尝试了什么:

  • 我需要使用JGit获取与特定提交关联的分支的名称。我使用JGit获取存储库的提交SHA的完整列表,现在我需要知道它所属的分支的名称。 如果有人能让我知道我如何做到这一点,我将不胜感激。

  • 提交到Google Play 在经历了想Apple App store提交签名应用的噩梦之后,那么现在可以治疗一下了。相比之下,向Google Play提交应用就超级简单了。在开始之前,麻烦先注册Google Play Developer。 记住,提交应用之前需要用一个keystore文件对应用进行签名。 重点:如果你用了Crosswalk插件,那么在构建的时候会生成两个.apk。提交流程基本还是