前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jgit初始化本地仓库,与远程Git库建立连接

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

作者头像
jiankang666
发布2022-05-12 21:01:58
7830
发布2022-05-12 21:01:58
举报
文章被收录于专栏:java基础笔记java基础笔记

一、问题背景

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

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

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

代码语言:javascript
复制
[core]
    symlinks = false
    repositoryformatversion = 0
    filemode = false
    bare = true
    logallrefupdates = false
[remote "origin"]
    url = https://github.com/eclipse/jgit.git
    fetch = +refs/heads/*:refs/heads/*

二、解决方案

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

注意:

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

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

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

代码语言:javascript
复制
File repDirectory = new File(getFullDirname(IRepositorable));
repDirectory.mkdirs();
Git.cloneRepository().setURI(url).setDirectory(repDirectory).setCloneAllBranches(true).call();

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

代码语言:javascript
复制
Git git = Git.cloneRepository()
  .setURI( "https://github.com/eclipse/jgit.git" )
  .setDirectory( "/path/to/repo" )
  .call();

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

代码语言:javascript
复制
Git git = Git.init().setDirectory(new File("D:/git/aaa/")).call();

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

代码语言:javascript
复制
    Git.cloneRepository()
            .setBare( true )
            .setURI( "https://github.com/eclipse/jgit.git" )
            .setGitDir(new File( "D:/git/aaa/.git") )
            .call();

三、总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java基础笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档