最近,我被问及如何用 JGit 来初始化一个新的 Git 库,比如实现初始化一个库 /path/to/repodoes。 当我用 JGit 来创建库时其实并不难,这里有些细节值得提一提。因为在网上几乎少有关于这个主题的资料,而且有些还是错误的,因此本文就总结了如何使用 JGit API 来初始化一个 Git 库的方法。 本地库为了用 JGit 来初始化一个库,那就要使用初始化命令。factoryGit 命令拥有一个静态方法 init() 来创建初始化命令。
在上述代码执行后,一个新的Git库就已经创建完成了。这个库的存储位置是通过setDirectory()来给定的,这个库构成了工作目录,它包含了已签出的文件及文件夹。若这个目录并不存在,那么通过上述方法会一直创建这个工作目录。 一个名为 .git 的子目录在整个工作目录中处于最顶层。这里面包含了本地库的历史日志,配置参数,分支指针,索引(又名中转区)等等。 上面的截图中展示了.git 目录的内部结构。refs 目录维护了分支和标签信息。其实际内容将会存储在对象目录中。在 logs 目录中,有关对分区的修改都会被记录。举个例子,一个提交和签出操作都将创建一个日志记录,这个记录可以用 gitreflog 命令来查看。多年前我写的这个帖子 Explore Git Internals with the JGit API 里面详细的写明了如何使用 Git 来管理这个库里内容。 为了确保命令事实上成功执行,状态命令常用于查询库的状态,很像git status做的一样。但不幸的是JGit的status实现不同于原生Git,因为如果没有库,它不会报错。这使得检查一个已存在HEAD ref变得更为必要,它表示事实上有一个库。 assertNotNull( git.getRepository().getRef( Constants.HEAD ) ); |