我需要使用git管道命令(例如chapter 9 of the git book中使用的命令),例如git hash-object
,git write-tree
,git commit-tree
以及其他所有命令。有没有一个很好的API在JGit中做这些(我似乎找不到一个)或者你将如何做一些基本的事情,比如从输出流或文件写入blob /你用什么而不是git命令? / p>
答案 0 :(得分:2)
欢迎来到JGit API。除了org.eclipse.jgit.api
包中的高级瓷器API之外,低级API并不与本机git的管道命令紧密相关。这是因为JGit是一个Java库而不是命令行界面。
如果您需要示例,请先查看> 2000 JGit测试用例。接下来看看EGit如何使用JGit。如果这没有帮助回来并提出更具体的问题。
答案 1 :(得分:1)
如果有,则应该在 JGit 。
例如,DirCache
对象(即Git索引)有一个WriteTree function:
/**
* Write all index trees to the object store, returning the root tree.
*
* @param ow
* the writer to use when serializing to the store. The caller is
* responsible for flushing the inserter before trying to use the
* returned tree identity.
* @return identity for the root tree.
* @throws UnmergedPathException
* one or more paths contain higher-order stages (stage > 0),
* which cannot be stored in a tree object.
* @throws IllegalStateException
* one or more paths contain an invalid mode which should never
* appear in a tree object.
* @throws IOException
* an unexpected error occurred writing to the object store.
*/
public ObjectId writeTree(final ObjectInserter ow)
答案 2 :(得分:1)
git hash-object< file>
import java.io.*;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectInserter.Formatter;
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
public class GitHashObject {
public static void main(String[] args) throws IOException {
File file = File.createTempFile("foobar", ".txt");
FileOutputStream out = new FileOutputStream(file);
out.write("foobar\n".getBytes());
out.close();
System.out.println(gitHashObject(file));
}
public static String gitHashObject(File file) throws IOException {
FileInputStream in = new FileInputStream(file);
Formatter formatter = new ObjectInserter.Formatter();
ObjectId objectId = formatter.idFor(OBJ_BLOB, file.length(), in);
in.close();
return objectId.getName(); // or objectId.name()
}
}
预期产量:323fae03f4606ea9991df8befbb2fca795e648fa
正如Assigning Git SHA1's without Git
答案 3 :(得分:0)
我正在寻找和你一样的东西。 我使用 git 作为 k-v 数据库来描述我们的数据结构。 所以我想将 git 风格的 Plumbing API 或 Jgit 风格的 Plumbing API 包装为 CRUD API。 然后我找到了 org.eclipse.jgit.lib.ObjectInserter。
https://download.eclipse.org/jgit/site/5.10.0.202012080955-r/apidocs/index.html
我认为 CRUD 的大部分 C 要求都可以通过包装 ObjectInserter 来实现。