用JGit提交一个字符串
一个JGit初学者问题:
我使用JGit从存储库读取文件(BLOB)并操作其内容。 之后,我想用相同的文件名将新内容写回到存储库中作为新的提交。 但是,我如何使用JGit提交新内容?
我的伪代码:
String gitUrl = "path/to/repository/.git";
Repository repository = new FileRepository(gitUrl);
String filename = "test/seppl.txt";
blobId = getIdOf(filename);
ObjectLoader object = repository.open(blobId, Constants.OBJ_BLOB);
ObjectStream is = object.openStream();
String newContent = processStream(is);
// How to commit the newContent in filename?
是否必须将newContent
写入文件并使用AddCommand和CommitCommand提交此文件? 或者,我可以在同一文件名下将“即时”字符串写入存储库吗?
有没有在网络的任何地方举例说明如何使用JGit进行提交?
我认为除了使用CommitCommand之外,没有其他方式来提交任何数据(除非合并或非常具体的操作)。
所以,是的,你应该对你的文件做任何改变,然后添加它并提交它(使用API中的AddCommand和CommitCommand)。
你可能想看看在Git中使用Blob的。 此技术用于在签署标签时存储公共PGP密钥。 它看起来像你想要的内容仍然必须放入一个文件,但它可以是一个临时文件。 当有人进行拉动时,该文件不会存在于主目录中。 它将作为一个blob在树中的条目。
http://book.git-scm.com/7_raw_git.html
-w
通知它写入条目并返回散列。
git hash-object -w myfile.txt
6ff87c4664981e4397625791c8ea3bbb5f2279a3
更新
我在手机上浏览了这个条目,因此不太注意你提供的细节。 是的,你需要将字符串写入一个文件,但不需要像普通文件那样添加它。 我会怀疑JGit有能力做hash-object
。 看起来你已经有了一些代码来处理BLOB条目。 也许有更高级别的hash对象调用,其中你不直接处理BLOB。
考虑到Git中的所有内容都依赖于内容散列,所以我会说,即使您找到了直接编写字符串的方法,您也不应该这么做。 您应该使用相同的文件名重新提交对象,以便获得新的散列和更新的条目。
是的,当然你可以做你想做的事,但是不要使用添加/提交,因为它们是高级 Porcelein API的一部分,它只是一个建立在低级API 之上的便利API。 因此他们只是实现最常见的用例。
您需要做的是查看AddCommand和CommitCommand的实现,以了解如何使用较低级别的API来创建BLOB对象,然后创建树对象而不是提交对象。
我建议您彻底阅读Pro Git书籍的第9章,以便正确理解Git如何在低级别上工作。
链接地址: http://www.djcxy.com/p/45221.html