游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

利用gitrepo无缝迁移git项目

  背景
  正所谓天下大事合久必分,分久必合。实际工作中的项目也类似,有的项目越来越大,或者有时候需要把没有前后端分离的项目代码拆分到两个仓库里,就涉及到对已有git项目的迁移操作。
  如果只是简单地把代码拆开并不难,可以选择直接下载git项目源代码压缩包,拆分后push到新建的git仓库里就可以了。
  但是现实世界往往没有那么简单,比如正在进行的开发分支还没有合并,或者我们想保留提交记录和分支关系。如此种种原因导致无法简单粗暴地把源代码扔到一个新建的git仓库里,还涉及对git记录进行必要的裁剪。
  本文就介绍一个好用的工具来进行无损的git仓库迁移。真实案例
  在实际工作中,我们有一个项目,其项目目录结构很简单,是一个既含有前端代码,也含有服务端代码的仓库,如下所示:serverfoo。cbar。cwebappapp。tsxcomponentsindex。tsxzebra。jpg
  我们希望将前端和服务端代码拆分成两个独立的git仓库,但是因为开发同学还有正在开发的功能分支没有合并,因此我们希望能够同时迁移代码和git提交历史以及分支。最终希望得到的结果是:
  gitrepoA:。server
  gitrepoB:。webappgitfilterbranch命令
  通过查看git文档,首先考虑使用gitfilterbranch命令来进行迁移。简单来说该命令可以用来操作目录树,同时修改历史提交记录。
  在我还没来得及完全理解这个命令之前,就看到文档中有这样一段warning
  gitfilterbranchhasaplethoraofpitfallsthatcanproducenonobviousmanglingsoftheintendedhistoryrewrite(andcanleaveyouwithlittletimetoinvestigatesuchproblemssinceithassuchabysmalperformance)。Thesesafetyandperformanceissuescannotbebackwardcompatiblyfixedandassuch,itsuseisnotrecommended。Pleaseuseanalternativehistoryfilteringtoolsuchasgitfilterrepo。Ifyoustillneedtousegitfilterbranch,pleasecarefullyreadSAFETY(andPERFORMANCE)tolearnaboutthelandminesoffilterbranch,andthenvigilantlyavoidasmanyofthehazardslistedthereasreasonablypossible。
  这里提到了filterbranch命令由于有可能产生杂乱的提交历史,以及惨不忍睹的执行效率,所以最终推荐了一个第三方工具gitfilterrepo。接下来,就该今天的主角登场了。gitfilterrepo
  在github首页上,关于gitfilterrepo有这样的描述gitfilterrepo可以胜任很多需要修改提交历史的场景,虽然它与gitfilterbranch命令功能有些许重合,但摒弃了gitfilterbranch那令人抓狂的执行效率。
  在功能方面,gitfilterrepo的人机交互设计让其面对简单的修改更加游刃有余,同时仍然可以像复杂的gitfilterbranch命令一样完成庞杂的任务。
  接下来我们考虑如何利用这个强大的工具来进行git项目的迁移。
  首先,需要定义成功迁移的标准:删减server目录,仅保留webapp目录,并让webapp成为新的根目录推向新的git仓库确认在新的git仓库中仍然保留所有与webapp相关的分支确认迁移之后保留的分支历史记录应该与老仓库的历史记录一致相关命令简介
  查看gitfilterrepo的文档可以看到有不少简单的示例,很幸运有一些例子正好可以解决我们的问题。
  gitfilterrepo的命令选项(flag)主要用来操作目录树,根据操作的目录树自动判断需要修改的git提交历史信息。
  比如我们需要保留webapp目录,删除server目录,那么仅需执行:gitfilterrepopathwebapp
  这样仓库中的目录结构就会变为:webappapp。tsxcomponentsindex。tsx
  可以看到,已经没有server文件夹了。
  再比如如果我们希望删除。DSStore文件以及其提交历史:gitfilterrepoinvertpathspath。DSStore
  当然通常我们需要删除根目录下所有。DSStore文件及其历史,那么可以加上usebasename选项,表示匹配文件名,而不是匹配完整路径:gitfilterrepoinvertpathspath。DSStoreusebasename
  其中path选项后跟需要操作的路径或者文件名,invertpaths选项字面意思是反向,因此该标记表示的是删除操作。
  以上都是删除某些文件或者保留某些文件的操作,其目录结构仍然会保留原始仓库的结构,但我们需要的是仅保留webapp目录下的所有文件,并将其中的内容移动到根目录下。针对这种场景gitfilterrepo提供了一个叫做subdirectoryfilter的选项,接下来就进行实际操作。实际操作
  gitfilterrepo需要在一个干净的,刚刚clone下来的仓库中进行操作,否则会提示操作并停止操作
  接下来再看一下老的仓库目录结构serverfoo。cbar。cwebappapp。tsxcomponentsindex。tsxzebra。jpg
  仅保留webapp目录下的内容,并让其成为新的根目录,执行如下命令:gitfilterreposubdirectoryfilterwebapp
  执行结果的目录结构如下所示:app。tsxcomponentsindex。tsx
  至此,目录结构已经如愿完成,为了确认迁移的历史记录也是完整的,执行gitbranch观察是否所有需要保留的分支仍然存在gitlog观察分支的提交记录是否正确
  如果确认本地仓库的迁移结果正确,再执行命令将当前本地仓库推向迁移的目的仓库即可:gitremoteaddneworigingit:somehostsomeproject。git添加新的远程仓库gitpushneworiginall向新的仓库推送本地所有分支
  至此我们的git项目迁移就完成了,不仅将代码迁移到新的仓库,也同时将提交历史带去了新的仓库。这样一来,对于开发同学来说迁移完全是无痛的,只是切换了新的git地址,而开发过程完全不会中断。结语
  在git项目需要迁移的场景中,日常工作中也许第一反应就是让开发同学们放下手中的工作,全部推向一个指定用于迁移的分支,然后以这个分支为准,下载源代码,再将其推送到新的仓库中。
  这种操作方式虽然简单,但是对于开发同学来说,却会造成很多麻烦。
  比如新仓库的代码不仅含有自己未开发完成的代码,也含有其他人未完成的代码,很有可能在迁移完成之后项目都跑不起来。
  而除此以外,如果新仓库的代码有一个需要很快就上线的功能,或者紧急修复,面对一个百废待兴的新仓库,如何整理出一个可以上线的代码版本,又是一件非常头大的事情。
  gitfilterbranch可以帮助我们修改目录树和提交历史,但是执行效率和混乱的提交历史显得太过于繁琐。
  gitfilterrepo工具提供了强大的工具集,良好的用户使用界面,以及高效率的处理机制,在目前确实是处理仓库迁移的最优选择。
  本文仅仅是讲解了gitfilterrepo的一种应用场景,其官方文档上有更多的使用场景,可以根据更多的条件来过滤和操作文件和提交历史。

诺基亚再出新品,T20会给你不一样的惊喜?诺基亚再出新品,是否会让你吃惊呢?是的,没错。在手机市场竞争不断白热化的当下,诺基亚也在不断的突破自我,从雄霸一时的手机霸主到默默无闻的手机品牌,其中心酸自知,但诺基亚从来没有……联想太强!小米卖3千块的手机它卖1千多,网友厂长是你表哥?摩托罗拉曾经在国内手机也曾叱咤风云,但随着小米以性价比这一利器崛起,加上其他手机厂商的成长,摩托罗拉的手机业务不断萎缩。后来甚至还把手机业务卖给了联想,近几年也是风声全无。……安静一点,能不能安静一点,我想要的安静哈氪TIMEPRO嘈杂的声音,繁忙的工作,日复一日,此时此刻能安静一点嘛?能不能安静一点,我想要的安静,感受片刻属于自己沉浸式的听觉体验呢?够静才够劲,带上哈氪TIMEPRO的那一刻,随着……ampampquot官车ampampquot也能很动感,解析在2021成都车展上,2022款大众帕萨特正式上市,作为国内中型车的标杆之一,帕萨特一直以来都有着非常浓厚的商务气质,是很多人口中的官车,作为中期改款车型,2022款帕萨特最大……起步卖17。18万,详解广汽丰田威兰达,哪款最值得入手?为了抢占市场份额,丰田、本田乃至其它合资品牌,都会选择使用双车战略。而这样的方式对国内的消费者来说,似乎也很适用,因为基本上这些合资品牌旗下的双车,都能够获得不错的销量表现。今……中国恒大,太难了请点击输入图片描述(最多18字)截至2021。9。29下午收盘,港股中国恒大收盘价收盘于3。070港元,已经接近于前期上市价格,市值也刚过400多亿港元。请点……为什么雅阁会是B级车的王者?因为它会告诉你这就是生活说起B级车阵容中,你可能会想到很多车型可以选择,显然这个问题不会难到大家。但要是再细问,站在B级车的顶端,一直享受着王者光环的车型是哪款?我相信在座不一定会回答,不夸张地说,以……车载智慧屏如何快捷导照片?HiCar小知识,有趣有用!今天小仙女来分享:车载智慧屏如何快捷导照片车载智慧屏应用华为鸿蒙分布式特性:车载智慧屏独立使用时,是一部行车记录仪。然而行车记录仪……处处实用的新房装修小妙招,提高你的生活品质处处实用的新房入住小妙招,提高你的生活品质!通过自己的奋斗在陌生的城市拥有了一套属于自己的房子,是一件非常幸福的事情,当我们拿到钥匙的那一刻,心情也变的无比激动起来!想要……小米接棒华为,高端价位销量第一,成功抗衡苹果由于被制裁的原因,华为麒麟高端芯片暂时无法继续生产出货,所以华为旗舰机的销量无奈迎来大幅下跌。若不是漂亮国的制裁,相信华为在全球市场跟苹果展开大决战指日可待,实在是可惜。……长安全新轿跑亮相,大溜背堪比奥迪A7,还搭电动尾翼,命名UN因为前几年国产SUV在市场极受认可,所以包括长城、长安、吉利、奇瑞在内的国产车企都全力布局SUV车型,以致于当下市场中的SUV车型基本饱和了,哪怕是同品牌下的同级别SUV也有好……一加8Pro入手8个月,聊聊我的心里话这是我用了很久的一款手机的体验,说实话一般的手机体验都是一个月测评最长的也就是半年测评,这次我用了8个月的时间对我这段时间或者说这大半年使用的手机进行一次回顾。我想8个月足以让……
余生请多指教定档日期,余生请多指教多少集余生请多指教说出来很多人清楚,可余生请多指教电视剧定档日期,很多网友就想去了解一下有关的故事,看余生请多指教被很多网友期待,果真没有多久后就给公布出定档的日期,但有的网友就不清……RedmiK40pro配置曝光,相机异常吸睛,售价更感人Redmi生产的手机具有出色的性价比。在今年的5G市场中,Redmi可以说是一个巨大的成功。其中,RedmiK30pro已成为市场上最受欢迎的5G手机,但Redmi随后发布了R……韩国r级限制十大电影2019女主角漂亮香艳剧照精选韩国有很多好看的电影,其中r级限制电影更是他们的一大特色,而且很多限制片中的女主角都十分漂亮,身材也好,来看看,2019年韩国r级限制推荐高颜值电影,女主角漂亮香艳剧照精选。……回顾韩国电影TOP102016年口碑不错的韩国十大电影回顾韩国电影TOP10:2016年口碑不错的韩国十大电影。2016年,韩国电影市场依旧硝烟弥漫,佳篇纷纷扎堆上映,总票房达到了14。4亿美元,跟2015年的14。1亿美元相比,……支付宝新功能安全守护上线像打击酒驾一样打击诈骗随着中国互联网的快速发展,借助于手机、网络等通信工具等的电信诈骗迅速发展蔓延,给人民群众造成了巨大的损失。强力的打击防范态势虽在一定程度上震慑、遏制了犯罪高发,然而电信诈……固话正在慢慢消失台式机的明天会是怎样万里长城上的烽火狼烟,是中国通讯史上的奇迹。马拉松长跑将捷报传到雅典,是希腊通讯史上的传奇。从千里鸿雁到无线电台,从固话到寻呼机,从手提电话到智能手机,通讯行业发展日新月异,科……三千鸦杀覃川阿满是一个人吗揭露二者关系及扮演者资料三千鸦杀覃川阿满是一个人吗揭露二者关系及扮演者资料近日,电视剧《三千鸦杀》未播先火,其中剧中覃川的身份很多人都比较好奇,那么,《三千鸦杀》中覃川和阿满是一个人吗?两者是什么关系……保时捷911TurboS越野版官图全球限量销售40台日前,保时捷911TurboS越野定制版官图正式发布,新车由MarcPhilippGemballa打造。新车基于全新保时捷911TurboS打造而来,拥有不错的越野性能。其被定……三千鸦杀男女主角曝光男主角竟然是他!近几日,电视剧《三千鸦杀》官宣了阵容,男女主角曝光了,男主角竟然是他!男主演技颜值均在线,女主被称为ldquo;男神收割机rdquo;是真的吗?一起来看一下具体的情况。三……择天记结局是什么意思,择天记小说讲了什么玄幻剧《择天记》给观众带来剧情不多么圆满,主要想追求比较美好的情况,不过后期陈长生来阻止战争,使得他没有跟陈有容在一起,却陈长生在原著小说中收获到甜蜜的爱情。1择天记结局是什么……一闪一闪亮星星麦子结局及扮演者穿越剧《一闪一闪亮星星》给表现麦子为街头混混的模样,不过他本质善良,还去给朋友两肋插刀,可他看见林北星惊吓样子跟林大海打起来,使得他入狱,直达最后蒋昀霖扮演麦子刑满出狱来修车厂……千古玦尘清穆什么时候恢复记忆清穆和柏玄是什么关系目前热播剧中《千古玦尘》中的剧情有点虐了,清穆和白玦以及柏玄三个人的关系很是微妙,好奇千古玦尘清穆第几集恢复记忆呢?清穆赶紧恢复记忆和后池一起甜甜蜜蜜的吧。那么,千古玦尘清穆和……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网