通过jgit初始化本地仓库,与远程库建立连接

简介: 通过jgit初始化本地仓库,与远程库建立连接

一、问题背景    


       无论您计划对现有存储库做什么,首先必须创建一个克隆。无论您是计划贡献还是只是想查看它的历史,都需要存储库的本地副本。这说明所有通过jgit进行提交远程仓库的操作,都建立在本地有一个仓库与·远程仓库建立连接。


      公司之前对租户后端配置修改,每次修改保存,都将保存的版本提交一次commit到git,对每次保存进行版本控制,做到可以随时还原之前的配置版本,原来有三四个客户,通过为每个客户系统建立一个git远程仓库,然后将这几个git仓库手动clone到服务器上,使用的是jgit进行操作提交,增加等操作。现在客户越来越多,手动在服务器上clone远程仓库比较复杂,想通过jgit实现如果服务器上没有新客户的git克隆仓库时,自动初始化一个git仓库,同时可以通过jgit将该git仓库提交到远程对应的git仓库上。


        我原来想的是服务器上自动初始化git仓库后,通过jgit库提交到远程git仓库自动在远程一个目录下生成仓库,没想到这个想法无法实现,因为jgit要想提交上去,必须在初始化的.git文件夹里有对应的远程仓库信息。如下:,改内容是.git文件夹里面config文件的内容,保存了与远程库的连接信息。如下:

image.png

二、解决方案


方案一:目前想到的最佳方案,将所有的租户的保存配置信息的远程git仓库建立起来。如果服务器上有与远程git仓库对应的本地clone仓库,那就直接进行相关业务操作,如果不存在先在服务器上创建一个与远程项目同名的目录,通过jgit拿到ssh地址,执行下面代码,生成与远程git仓库有联系的.git文件夹。然后执行相关业务操作,下次在需要执行,已经有仓库了,这些初始化仓库操作也不需要了。


注意:


(1)通过ssh方式需要本地有id_rsa公钥。


(2)url参数为远程ssh地址。


(3)repDirectory参数为保存本地仓库的地址,文件夹名字与远程仓库名一致,本地没有需要先创建再克隆。

File repDirectory = new File(getFullDirname(IRepositorable));
repDirectory.mkdirs();
Git.cloneRepository().setURI(url).setDirectory(repDirectory).setCloneAllBranches(true).call();

方案二:通过https的方式建立连接,这种方法公司不常用,可能是仓库私有吧

Git git = Git.cloneRepository()
  .setURI( "https://github.com/eclipse/jgit.git" )
  .setDirectory( "/path/to/repo" )
  .call();

方案三:先在本地初始化一个跟远程同名的仓库

Git git = Git.init().setDirectory(new File("D:/git/aaa/")).call();

然后把.git文件里面的文件清空,执行下面的代码就能生成新的.git文件夹,这个.git文件与远程是建立连接的。该仓库就与远程仓库建立了连接,后面就可以进行其他的操作。

        Git.cloneRepository()
                .setBare( true )
                .setURI( "https://github.com/eclipse/jgit.git" )
                .setGitDir(new File( "D:/git/aaa/.git") )
                .call();

三、总结

上面三种方案,第一种是最简单,也安全的,比较常用,当本地没有克隆远程的git仓库时,第一次需要进行提交代码,可以通过这些方式进行克隆到本地仓库,下一次操作时本地有了,就不需要这些操作了,直接进行业务操作就可以了,欢迎关注java基础笔记,这些思路对你有帮助可以点个赞。

目录
相关文章
|
4天前
|
开发工具 git
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
87 0
|
4天前
|
存储 网络安全 数据处理
git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理
git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理
|
10月前
|
开发工具 数据安全/隐私保护 git
从一个git仓库内迁移分支代码到另一个git仓库,保存之前仓库的提交记录
有时候拉取开源仓库到自己的仓库,再拉取时又想保留开源之前的提交路径,并且自己的仓库不想展示分支名称为开源仓库名称,想改为master,可以看下面的几种方式
|
开发工具 git
本地项目关联到远程git仓库
本地项目关联到远程git仓库
255 1
|
开发工具 git
关于github默认分支名改为main后可能的处理【git推送到远程不同的分支、github修改默认分支名】
git如何删除本地分支、删除远程分支,由分支的删除可以实现推送到远程不同的分支。 git不允许推送到远程与本地分支名不同的分支上。
815 1
|
开发工具 git
Git:推送到新的远程地址;更改本地和远程分支的名称
Git:推送到新的远程地址;更改本地和远程分支的名称
475 0
|
关系型数据库 开发工具 git
通过命令初始化Git管理
通过命令初始化Git管理
105 0
|
开发工具 git
Git 更改远程地址
Git 更改远程地址
|
开发工具 git
git项目代码一次push,同时上传到多个git仓库地址,并保证多个仓库代码同步一致
git项目代码一次push,同时上传到多个git仓库地址,并保证多个仓库代码同步一致
git项目代码一次push,同时上传到多个git仓库地址,并保证多个仓库代码同步一致
|
开发工具 git
一个项目关联多个远程Git仓库
一个项目关联多个远程Git仓库
130 0