专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

jGit常用使用介绍

  JGitProGitv2中文版UDN开源文档(yonyoucloud。com)
  地址:http:doc。yonyoucloud。comdocwikiprojectprogittwojgit。htmlJgit基础教程(Java调用git)前言
  最近公司需要做一个java调用git的工具,这里简单的介绍了一下基本操作方法以及一些衍生的信息获取,或有不对的地方请大家批评指正。转载请注明出处。一、Jgit依赖导入dependencygroupIdorg。eclipse。jgitgroupIdorg。eclipse。jgitartifactIdversion4。4。1。201607150455rversiondependencydependencygroupIdorg。eclipse。jgitgroupIdorg。eclipse。jgit。archiveartifactIdversion5。8。1。202007141445rversiondependency二、Jgit获取Git操作对象
  获取Git对象是一切git操作的基础,笔者写了一个方法封装了一下。importorg。eclipse。jgit。api。Git;importorg。eclipse。jgit。lib。Repository;publicclassJGitUtils{publicstaticGitopenRpo(Stringdir){Gitgitnull;try{RepositoryrepositorynewFileRepositoryBuilder()。setGitDir(Paths。get(dir,。git)。toFile())。build();gitnewGit(repository);}catch(IOExceptione){e。printStackTrace();}returngit;}}三、基础操作(Base)1。打开仓库(open)git命令:
  gitBashHereJgit代码:GitgitjGitUtils。openRpo(localPath);获取git对象System。out。println(git);参数:StringlocalPathC:Usersyang。yangDesktoptest;本地仓库位置结果:
  2。初始化(init)git命令:
  gitinitJgit代码:GitgitGit。init()。setDirectory(newFile(localPath))。call();System。out。println(git);参数:StringlocalPathC:Usersyang。yangDesktoptest1;本地仓库位置结果:
  3。添加到暂存区(Add)git命令:
  gitadd。
  gitaddDelete。txt
  gitaddModify。txt
  gitaddFolderInFolder。txtJgit代码:git。add()。addFilepattern(。)。call();添加全部文件git。add()。addFilepattern(New。txt)。call();git。add()。addFilepattern(Delete。txt)。call();git。add()。addFilepattern(Modify。txt)。call();git。add()。addFilepattern(FolderInFolder。txt)。call();git。rm()。addFilepattern(Delete。txt)。call();备注:
  删除和移动的文件不能使用git。add(),需要使用git。rm()的方式,就算参数是。也需要使用git。rm()方法结果:
  4。提交(Commit)git命令:
  gitcommitmfirstcommitJgit代码:git。commit()。setMessage(firstcommit)。call();结果:
  5。状态(status)git命令:
  gitstatusJgit代码:MapString,StringmapnewHashMapString,String();GitgitjGitUtils。openRpo(localPath);Statusstatusgit。status()。call();map。put(Added,status。getAdded()。toString());map。put(Changed,status。getChanged()。toString());map。put(Conflicting,status。getConflicting()。toString());map。put(ConflictingStageState,status。getConflictingStageState()。toString());map。put(IgnoredNotInIndex,status。getIgnoredNotInIndex()。toString());map。put(Missing,status。getMissing()。toString());map。put(Modified,status。getModified()。toString());map。put(Removed,status。getRemoved()。toString());map。put(UntrackedFiles,status。getUntracked()。toString());map。put(UntrackedFolders,status。getUntrackedFolders()。toString());System。out。println(map);备注:
  里面记录的我目前已经知道的属性,得到的结果是文件名,还有其他的属性可以自行研究。结果:
  四、分支操作(Branch)1。创建分支(CreateBranch)git命令:
  gitbranchdevJgit代码:git。branchCreate()。setName(dev)创建的分支名字。call();结果:
  2。删除分支(DeleteBranch)git命令:
  gitbranchddevJgit代码:git。branchDelete()。setBranchNames(dev)设置删除分支的名字。call();结果:
  3。切换分支(CheckoutBranch)git命令:
  gitcheckoutdevJgit代码:git。checkout()。setName(dev)设置分支名。call();结果:
  4。所有分支(BranchList)git命令:
  gitbranchJgit代码:ListRefcallgit。branchList()。call();得到所有分支信息for(Refref:call)System。out。println(ref);备注:
  得到的信息是所有内容,可以用函数处理,例如ref。getName()可得到名字相关内容结果:
  5。合并分支(MergeBranch)git命令:
  在master分支上使用gitmergedevJgit代码:Refrefdevgit。checkout()。setName(dev)。call();切换分支获取分支信息存入Ref对象里git。checkout()。setName(master)。call();切换回master分支MergeResultmergeResultgit。merge()。include(refdev)合并目标分支。setCommit(true)同时提交。setFastForward(MergeCommand。FastForwardMode。NOFF)分支合并策略NOFF代表普通合并。setMessage(masterMergedev)设置提交信息FF代表快速合并。call();备注:
  合并操作是一项危险的操作,我只是做了一个简单尝试,更多的功能还需要自行研究。结果:
  五、远端仓库操作(Repository)1。推送(Push)git命令:
  gitpushoriginmasterJgit代码:CredentialsProviderprovidernewUsernamePasswordCredentialsProvider(userName,password);生成身份信息git。push()。setRemote(origin)设置推送的URL名称。setRefSpecs(newRefSpec(branch))设置需要推送的分支,如果远端没有则创建。setCredentialsProvider(provider)身份验证。call();备注:
  这种推送需要在已经设置remote的情况下进行。结果
  之前提交的log
  push执行后
  2。拉取(Pull)git命令:
  gitpulloriginJgit代码:CredentialsProviderprovidernewUsernamePasswordCredentialsProvider(userName,password);生成身份信息git。pull()。setRemoteBranchName(master)设置需要pull的远端分支。setCredentialsProvider(provider)身份验证。call();结果:
  3。克隆(Clone)git命令:
  gitclonehttp:admin10。179。2。14:10101rTesttest01。gitJgit代码:克隆CredentialsProviderprovidernewUsernamePasswordCredentialsProvider(userName,password);生成身份信息FilelocalpathnewFile(localPath);GitgitGit。cloneRepository()。setURI(remotePath)设置git远端URL。setDirectory(localpath)设置本地仓库位置。setCredentialsProvider(provider)设置身份验证。setCloneSubmodules(true)设置是否克隆子仓库。setBranch(branch)设置克隆分支。call();启动命令git。getRepository()。close();git。close();关闭源,以释放本地仓库锁参数:StringlocalPathC:Usersyang。yangDesktoptest;本地仓库位置StringremotePathhttp:admin10。179。2。14:10101rTesttest01。git;远端仓库URLStringbranchmaster;克隆目标分支StringuserNameadmin;远端仓库用户名Stringpasswordadmin;远端仓库密码密码结果:
  4。设置远程连接(SetRemote)git命令:
  gitremotemasterhttp:admin10。179。2。14:10101rTesttest01。gitJgit代码:git。remoteAdd()。setName(master)设置remote名字。setUri(newURIish(http:admin10。179。2。14:10101rTesttest01。git))设置url。call();结果:
  5。删除远程连接(Removeremote)git命令:
  gitremotermmasterJgit代码:git。remoteRemove()。setRemoteName(master)。call();结果:
  6。获取所有远程连接(AllRemote)git命令:
  gitremotevJgit代码:MapString,StringurlMapnewHashMap();ListRemoteConfigremoteConfigListgit。remoteList()获取list。call();for(RemoteConfigx:remoteConfigList){urlMap。put(x。getName(),x。getURIs()。toString());获取名字,获取URL}System。out。println(urlMap);结果:
  六、标签(Tag)1。创建标签(CreateTag)git命令:
  gitaV1。0mtesttag9167dadd48bca196208a4687b5d4706e355c42b6Jgit代码:ObjectIdidgit。getRepository()。resolve(9167dadd48bca196208a4687b5d4706e355c42b6);获取提交的ObjectIDRevWalkwalknewRevWalk(git。getRepository());获取RevWalk对象RevCommitcommitwalk。parseCommit(id);获取该commitID的RevCommit对象git。tag()。setObjectId(commit)设置commit。setName(V1。0)设置tag名字。setMessage(testtag)设置tag注释。setAnnotated()是否为annotate。call();结果:
  2。所有标签(AllTag)git命令:
  gittagJgit代码:ListRefrefListgit。tagList()。call();获取所有tagRevWalkwalknewRevWalk(git。getRepository());for(Refref:refList){System。out。println(commitID:walk。parseCommit(ref。getObjectId())。getName());通过ref获取objectIDSystem。out。println(tagName:ref。getName());然后通过walk获取commit对象再获取commitId}结果:
  3。删除标签(DeleteTag)git命令:
  gittagdV1。0Jgit代码:git。tagDelete()。setTags(V1。0)设置tag名。call();结果:
  4。将标签推送至远程(PushTag)git命令:Jgit代码:CredentialsProviderprovidernewUsernamePasswordCredentialsProvider(userName,password);生成身份信息git。push()。setRemote(origin)设置remote。setPushTags()pushtag。setCredentialsProvider(provider)。call();备注:
  默认是推送当前仓库内所有tag,单个推送目前没找到方法,得自行研究。结果:
  七、差异对比(Diff)1。两个版本之间的对比(BetweentwoCommit)git命令:
  gitdiffHEADHEADJgit代码:ByteArrayOutputStreamoutputStreamnewByteArrayOutputStream();AbstractTreeIteratornewTreeIterprepareTreeParser(git。getRepository(),git。getRepository()。resolve(HEAD)。getName());AbstractTreeIteratoroldTreeIterprepareTreeParser(git。getRepository(),git。getRepository()。resolve(HEAD)。getName());git。diff()。setNewTree(newTreeIter)设置源,不设置则默认工作区和历史最新commit版本比较。setOldTree(oldTreeIter)。setPathFilter(PathFilter。create(。txt))设置过滤。setOutputStream(outputStream)输出流用outputStream,后面转成字符串。call();System。out。println(outputStream。toString());publicstaticAbstractTreeIteratorprepareTreeParser(Repositoryrepository,StringobjectId)throwsIOException{try(RevWalkwalknewRevWalk(repository)){RevCommitcommitwalk。parseCommit(ObjectId。fromString(objectId));RevTreetreewalk。parseTree(commit。getTree()。getId());CanonicalTreeParsertreeParsernewCanonicalTreeParser();try(ObjectReaderreaderrepository。newObjectReader()){treeParser。reset(reader,tree。getId());}walk。dispose();returntreeParser;}}备注:
  prepareTreeParser是一个把RevCommit对象转换成AbstractTreeIterator方法,Jgit中的Tree和Ref是存储git对象的类,具体作用请阅读文尾的官方文档。
  当diff()方法中不指定NewTree和OldTree时,默认比较工作区和当前分支最后一次commit的区别。结果:
  2。当前暂存区与最后一次提交之间的对比(Currentstagingareaandlastcommit)git命令:
  gitdiffJgit代码:git。diff()。setOutputStream(outputStream)输出流用outputStream,后面转成字符串。call();System。out。println(outputStream。toString());结果:
  八、回溯(ResetRevert)1。Resetgit命令:
  gitresetJgit代码:RevWalkwalknewRevWalk(git。getRepository());获取walk对象ObjectIdobjectIdgit。getRepository()。resolve(9167dadd48bca196208a4687b5d4706e355c42b6);ObjectId对象RevCommitrevCommitwalk。parseCommit(objectId);获取Revcommit对象StringperVisionrevCommit。getParent(0)。getName();获取commit的身份名git。reset()。setMode(ResetCommand。ResetType。HARD)。setRef(perVision)。call();设置参数结果:
  2。Revertgit命令:
  gitrevertJgit代码:RevWalkwalknewRevWalk(git。getRepository());RevCommitrevCommitwalk。parseCommit(ObjectId。fromString(commitid));git。revert()。include(revCommit)。call();结果:
  备注:
  Reset和Revert结果比较复杂,演示的只是一个可行的方法,具体应用请查看文尾的官方文档。九、参考链接
  参考文档:https:github。comcentic9jgitcookbook
  官方文档:http:archive。eclipse。orgjgitsite5。3。0。201903130848rapidocsindex。html

华熙生物科医人强强联合发布新品为求美者带来护理新体验3月6日,全球最大医疗激光提供商科医人(Lumenis)联合透明质酸领域龙头企业华熙生物发布新品M22医用创面敷料。据悉,此款新品基于科医人三分光电,七分养护的医美理念,应用华熙生山口百惠儿媳妇化对了妆挺仙气,脸型短小,不耽误美的有气场会化妆的女人就像手持法宝的仙女,她们对美了却于心,对时尚信手拈来,轻描淡抹之间就绘出了美貌,亮出了风采。是什么让她们在弄粉调朱时如此自信呢?是超前审美?是实战经验?还是卓绝天赋?其从奇想照进现实雅典Freak二十二年进化史腕表之家钟表文化硅,被称作钟表业最跨时代的革新,雅典作为最先将硅材质领入制表界的品牌,在2001年,以Freak奇想的诞生,开创了钟表领域的硅时代。前一阵,品牌正携多款珍稀时计登陆香港八达通功能新增,全球多地可方便支付,内地乘搭将更方便一加入全国一卡通香港八达通非执行主席杨美珍最近在接受大公报传媒访问时透露,八达通即将加入全国一卡通网络,除了可以在香港乘车,亦可在内地320个城市乘搭各种交通工具。预计今年第二季度智能电视如何留住用户网言近年来,更聪明的智能电视逐渐走进千家万户。然而,不少消费者发现,一些智能电视存在开关机广告无法消除观看视频平台内容需要购买会员等情况。有时即便开通了会员,想看平台上某些类别的节三大运营商哪家满意度最高?2022年度陕西电信服务质量用户满意度指数公布西部网讯(记者辛超)3月10日,陕西省通信管理局召开2022年度电信服务质量用户满意度发布会。会上公布了2022年度陕西电信服务质量用户满意度指数。测评结果显示,2022年度陕西省任天堂不出新机型,最着急的是微软微软在文件中声称,使命召唤战区的游戏引擎适配性很强,以至于连XboxOne这样2013年的老古董都可以运行,而NintendoSwitch发布于2017年,因此没理由做不到。微软对7行代码,彻底告别python第三方包import导入问题!最近有不少小伙伴咨询小叮当关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事。随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现安卓和苹果用户如何换机黄色iPhone14够骚气,性价比还得看一加近期,安卓党们将会引领一波新机热潮,有购置新机打算的估计会挑花眼的节奏。而苹果方面,在春季发布会之后也对iPhone14系列进行了更新,当然只是颜色的变动而已。所以,当下安卓和苹果云顶之弈美测服怎么汉化PBE美测服汉化最简单攻略云顶之弈美测服PBE近期即将开启S8。5赛季,在这个全新的版本里玩法也做了较大的更新改动,带给玩家更好的体验。相信各位玩家都想抢先体验一把美测服的新玩法,也有不少小伙伴已经下载了美还想打比赛!Uzi直播喊话官方能不能组织下未就业选手对抗赛?咱们LPL春季赛马上第8周的比赛就要结束了,按照赛程来看,春季赛常规赛阶段的比赛也仅剩下两周,很快就到常规赛的最后时刻了!最近很多战队都展开了抢分大战,强队和弱队打起来,相对明显的
那些冬天不涂防晒的人最后都黑成什么样了?进入冬季后,大家一边忙着维稳一边为缓解皮肤的干燥操碎了心,却忘记了另一个护肤重点!少有的艳阳天和寒冷的温度免不了给人一种错觉冬天感觉不到晒了,也就不用涂防晒了。一年四季都要对抗紫外绝了,毛衣半裙竟有这么多讲究,参考这些搭配,比想象好看秋冬季节,只要说到毛衣两个字,就仿佛已经能够感受到它的带来的暖意和安全感。所以,在这份暖意的包裹下,在冷冷的季节里,我们也能放心地穿上裙子。毛衣半裙,兼顾了温暖踏实与飘逸浪漫,其实文案你逢人就炫耀的玫瑰枯萎时要怎么收场在谷底也要开花,在海底也要望月现在天色暗了我也倦了要是你拉了别人的手,你就不是我的英雄了我步步回头却找不到停下的理由愿许秋风知我意,散我心中意难平,祝相逢的人不会走散。走散的人再也上头太快的那个人也只是我们的工具人friends我和现在玩的好的朋友,都不是当初一眼定情的,都是长期相处中,把不讨厌变成了有点好奇,有点好奇变成了有点理解,有点理解变成了一起玩好玩,一起玩的过程中再培育出什么理解默激励自己的一句话,送给大家。时间用来努力上,不管成败都比你空虚的耗日子强的多。。如果一个人仅仅正因你对他好才爱你,不如算了吧,这样的感情多累呀。没有人会因你的自我牺牲而感动一辈子,没有回报的爱,久了都会怨气善其一生所谓人心,关键是人心需要如何写。奥斯特洛夫斯基曾经说过,共同的事业,共同的斗争,可以使人们产生忍受一切的力量。这不禁令我深思。带着这句话,我们还要更加慎重的审视这个问题了解清楚人心不能试探的人性日本东野圭吾说过世上有两样东西不能直视,一是太阳二是人心。直视太阳会灼伤视网膜,直视人性会伤心。这句话告诉你,人性的弱点,经不起拆穿,永远不要去试探人性,结果会令你绝望。人是以群居层次越高的人,越不需要面子生活中,我们经常可以看到好面子的人,甚至为了所谓的面子,折了里子,一味地追求表面的富丽堂皇,却忘记提升内在的充盈,这本身是一件舍本逐末的事情。学会把面子放下,寻求内心的充实,才是生自己的独角戏是谁导演这场戏,在孤独的角色里,对白总是自言自语,对手都是回忆,看不出什么结局!独角戏听到这首歌独角戏,竟然泪眼朦胧。好似风中的雨,流淌自己的心事,叹息着谁会懂,心中有千言万语,就田螺时代我小时候,故乡汝阳县城南河滩一带的河里沟渠里都有田螺的影子。不过我们那儿的人家大都不吃田螺,觉着那东西只有穷人家才吃,也就是说谁家吃田螺就表明谁家穷,会被鄙视的。也有人家去河滩拾一红米K50至尊版使用体验,给双11前犹豫的你红米K50至尊版发布至今已有近3个月的时间,作为一名这款手机刚发布不久就入手的用户,这几个月的使用体验还是非常不错的,我是买的8256G的版本,颜色是银迹,颜值方面还是很耐看的,有
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网