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

一、问题背景     

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

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

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

二、解决方案

方案一:目前想到的最佳方案,将所有的租户的保存配置信息的远程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基础笔记,这些思路对你有帮助可以点个赞。

猜你喜欢

转载自blog.csdn.net/jiankang66/article/details/105843212