一个Git库仓在 JGit里面表现为Repository类,该类可以看作是这个库的句柄。通过Repository类实例,你可以创建JGit命令以及可以控制配置、参数等。

获取Git库仓的引用有很多种方法,看到很多人在这方面有困难,本文总结了如何通过JGit来访问Git库仓来帮助大家。

存储库和建造者

Repository类是抽象的,允许实现不同的存储后端。 举例来说,有一个InMemoryRepository类作为测试和实验。当然,最常用的是FileRepository,它表示的是一个本地文件系统。因为实际的实现被考虑为内置的,每一个Repository的实现都有一个相应的存储库建造者,他们应该被用于在内部创建实例。

因此FileRepositoryBuilder是一种被推荐的方式,用这种方式创建了一个FileRepository。由于历史原因,另外还有一个RepositoryBuilder,它是完全一样的,但是在下一个大版本升级之后将会被移除。

为了你的需要,一旦你已经配置了一个存储库构建器,调用它的build()方法来创建一个存储库。

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();

repositoryBuilder.setMustExist( true );

repositoryBuilder.setGitDir( ... );

Repository repository = repositoryBuilder.build();

布局的原因,我在每行放置了一个方法调用,但是FileRepositoryBuilder还是一个流接口的实现,所以这个方法调用能够被链接。

这里讨论的所有方法只能应用于本地存储库。Git是一个分布式的版本控制系统,因此不是为了直接操作远程库设计。

为了操作远程库,首先你不得不克隆它。现在你可以在本地副本做些修改,例如提交新的或修改的文件,创建分支或标签等等。为了向远程库同步你的变更,你首先不得不从远程库集成(即获取)变更(如果有的话),然后最终推送你本地的变更。

推荐 setGitDir()

在JGit中,一个基于文件的存储库是通过一个目录被识别的。然而,识别一个存储库的两个目录在合适条件下可能出现:当前检出的版本属于工作目录并且git目录保存着对象数据库和元数据(如分支,标签等等)。

尽管FileRepositoryBuilder有setGitDir()方法和setWorkTree()方法,我推荐始终使用setGitDir()方法,因为:默认情况下,git目录是工作目录的一个直接子目录,但是这个可以通过一个环境变量或一个配置设置被覆盖。

并且裸存储库根本就没有工作目录。

这是一个存储库吗?

FileRepositoryBuilder的build()方法不论一个存储库是否存在都会返回一个Repository。即使所给的目录不存在,一个实例也被返回了。

我发现有两种方式测试是否所给的目录真实的指向一个存在的存储库。通过调研setMustExist(true)方法,FileRepositoryBuilder 能被配置,只用来构建存在的存储库。一旦must-exist标记被打开,如果没有找到存储库,build()方法将抛出一个RepositoryNotFoundException 异常。值得一提的是,这种行为没有正式文档说明。这可能是JavaDoc中的一个失误,我怀疑这种行为会改变,但仍不能保证是否是API的一部分。

或者,你可以测试返回的存储库的对象数据库是否真实的存在。

Repository repository = repositoryBuilder.build();

if( repository.getObjectDatabase().exists() ) {

...

}

顾名思义, 如果有一个对象数据库,ObjectDatabase.exists()返回true,否则返回false。

小技巧:findGitDir()

仓库生成器提供了一个findGitDir()方法用于从指定的路径开始搜索仓库并且回退到上级目录。

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();

repositoryBuilder.addCeilingDirectory( new F‌ile( "/home/user" ) );

repositoryBuilder.findGitDir( new F‌ile( "/home/user/git/foo/bar" ) );

如果仓库路径被找到或者已到达根目录则搜索结束。getGitDir()可以用于获取搜索结果和返回找到的git路径,如果没找到则返回null。

通过添加一个或多个目录可以限制搜索。只要目录的其中一个被搜索到,则搜索结束。

另一种选择:Git.open()

如果你觉得FileRepositoryBuilder不方便使用,可以用等效的简写形式:Git.open()。

Git git = Git.open( new F‌ile( "/path/to/repo/.git" ) );

这个方法要求一个位于仓库中的表示路径的文件作为参数。路径可以是工作路径或者git路径。我建议在这里使用git路径。

如果给定的路径不存在或者不包含git仓库,将会抛出RepositoryNotFoundException异常。成功会返回Git类的实例,然后可以用它访问仓库(git.getRepository())和创建git命令。

JGit访问Git仓库的多种方式

Git.open()函数很简短,而FileRepositoryBuilder给了你更多的控制和可靠的方式来判断仓库是否存在。你喜欢前者还是后者完全取决于你的使用情况。记住,不要直接使用FileRepositoryBuilder构造函数或者在没有提前通知的情况下改变其行为。

我希望这篇文章有助于澄清怎样使用JGit访问仓库。如果你有进一步的问题,请在评论中回复。

英文原文:How to Access a Git Repository with JGit

Linux git命令参数及用法详解

Fedora通过Http Proxy下载Git

在Ubuntu Server上安装Git

服务器端Git仓库的创建(Ubuntu)

Linux下Git简单使用教程(以Android为例)

Git权威指南 PDF高清中文版

Git 的详细介绍:请点这里

Git 的下载地址:请点这里

本文永久更新链接地址:

jgit查询远程仓库_通过 JGit 访问 Git 仓库相关推荐

  1. Git中如何利用生成SSH个人公钥访问git仓库

    Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...

  2. svn的代码提交到git服务器_svn服务器代码仓库,数据迁移到git仓库

    svn服务器代码仓库,数据迁移到git仓库 1.安装svn [root@tomcat01 ~]# yum install subversion -y 2.初始化仓库 [root@tomcat02 ~] ...

  3. 从一个git仓库迁移到另外一个git仓库

    从一个git仓库迁移到另外一个git仓库 摘要  git仓库迁移 git 声明:相关内容是根据网络资料整理所得,仅供参考. 1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub. git c ...

  4. Git使用(Git安装、建立Git仓库、克隆Git仓库、提交代码至Git仓库)

    目录 1 Git安装 2 建立Git仓库 3 克隆Git仓库 3.1 新建Spring Boot项目 ​3.2 克隆Git仓库 4 提交代码至Git仓库 4.1 Pull ​4.2 Commit 4. ...

  5. jgit查询远程仓库_JAVA 使用jgit管理git仓库

    JAVA 使用jgit管理git仓库 最近设计基于gitops新的CICD方案,需要通过java读写git仓库,这里简单记录下. JGit是一款pure java的软件包,可以读写git仓库,下面介绍 ...

  6. [原创]SSH密钥访问Git仓库配置

    SSH密钥并非为了解决拉取git仓库代码时,需要频繁输入密码的问题. SSH是一种比较安全的协议,可以用来免去远程登录Linux等服务器时需要输入密码的繁琐过程. 命令: ssh user@serve ...

  7. git clone 一部分_别再往 Git 仓库中放敏感信息了,不安全!

    点击▲关注 "IT168企业级"给公众号置顶更多精彩 第一时间直达 为什么要避免将敏感信息存储在git中? 不要在git仓库中存储任何敏感信息,并且要不惜一切代价这样做,即使仓库是 ...

  8. git 怎么备份本地分支_同步管理本地git仓库和github仓库上的分支

    参考文章 分支管理策略 在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活 那在哪里干活呢?干活都在 dev分支上 ...

  9. 搭建自己的git仓库之简单搭建本地git仓库和远程git仓库~

    一.安裝git 1.在https://git-scm.com/downloads下载安装git: 2.安装成功后在开始菜单中或任意一个文件夹中点击鼠标右键打开git bash: 3.在命令行輸入:  ...

最新文章

  1. java url map_java url转map ,map转string
  2. GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(一)
  3. C++继承中的同名成员变量处理方法
  4. 电力企业信息化建设方案之调度信息报送系统
  5. Sharepoint学习笔记---Debug--使用ULS Log跟踪Solution错误信息
  6. JFinal Web开发学习(一)开启HelloWorld
  7. 总结 图(有向图、无向图、权、度、存储结构、邻接矩阵、领接表 概念)
  8. C#中的overload,overwrite,override的语义区别
  9. 电商后台设计:基本功能架构
  10. 树型选择器/Browsing HDFS筛选文件类型
  11. odom协方差初始化
  12. “百度杯”CTF比赛 十一月场Look
  13. 【避坑 超详细】Ubuntu使用python的selenium以及chrome模拟真实浏览器访问网页
  14. 关于最新版mumu模拟器(2.2.16)安装xposed框架
  15. 独家专访李林 | 回归火币后的一年
  16. 尤雨溪的5KB petite-vue源码解析
  17. Docker层和虚悬镜像(dangling image)介绍
  18. 人工智能对职业的影响:哪些职业可能被取代,哪些职业将会兴起?
  19. 如何把Excel中的文本数字转换成数字
  20. php java python c语言_两分钟速览Java、PHP、C语言、Python四大编程

热门文章

  1. ArcGIS安装问题及解决办法
  2. 如何利用多层循环找出对称的3位数数字?
  3. 苹果税遭重击!法院判决:App Store必须90天内开放第三方支付,苹果市值一夜蒸发5477亿...
  4. 从LFS到BLFS轻松上手
  5. u盘安装完linux系统没镜像,U盘刻录kali linux启动盘提示找不到镜像解决方案
  6. 背包问题之01背包、完全背包和多重背包
  7. 两年车间技术员转型大数据开发,说说转型这点事儿
  8. 昨天吃饭见一女汉纸一个人吃3大碗拉面
  9. 微信小程序设置背景图片在手机端不显示的问题
  10. Virtualbox 使用 Bridged Adapter(网桥模式)连接网络 (Windows操作系统)