Ⅰ 利用gitrepo无缝迁移git项目
正所谓天下大事合久必分,分久必合。实际工作中的项目也类似,有的项目越来越大,或者有时候需要把没有前后端分离的项目代码拆分到两个仓库里,就涉及到对已有git项目的迁移操作。
如果只是简单地把代码拆开并不难,可以选择直接下载git项目源代码压缩包,拆分后push到新建的git仓库里就可以了。
但是现实世界往往没有那么简单,比如正在进行的开发分支还没有合并,或者我们想保留提交记录和分支关系。如此种种原因导致无法简单粗暴地把源代码扔到一个新建的git仓库里,还涉及对git记录进行必要的裁剪。
本文就介绍一个好用的工具来进行无损的git仓库迁移。
在实际工作中,我们有一个项目,其项目目录结构很简单,是一个既含有前端代码,也含有服务端代码的仓库,如下所示:
我们希望将前端和服务端代码拆分成两个独立的git仓库,但是因为开发同学还有正在开发的功能分支没有合并,因此我们希望能够同时迁移代码和git提交 历史 以及分支。最终希望得到的结果是:
git repo A: ./server/
git repo B: ./webapp/
通过查看git文档,首先考虑使用git filter-branch命令来进行迁移。简单来说该命令可以用来操作目录树,同时修改 历史 提交记录。
在我还没来得及完全理解这个命令之前,就看到文档中有这样一段warning
这里提到了filter-branch命令由于有可能产生杂乱的提交 历史 ,以及惨不忍睹的执行效率,所以最终推荐了一个第三方工具git filter-repo。接下来,就该今天的主角登场了。
在github首页上,关于git-filter-repo有这样的描述
接下来我们考虑如何利用这个强大的工具来进行git项目的迁移。
首先,需要定义成功迁移的标准:
查看git-filter-repo的文档可以看到有不少简单的示例,很幸运有一些例子正好可以解决我们的问题。
git-filter-repo的命令选项 (flag) 主要用来操作目录树,根据操作的目录树自动判断需要修改的git提交 历史 信息。
比如我们需要保留webapp目录,删除server目录,那么仅需执行:
这样仓库中的目录结构就会变为:
可以看到,已经没有server文件夹了。
再比如如果我们希望删除.DS_Store文件以及其提交 历史 :
当然通常我们需要删除根目录下所有.DS_Store文件及其 历史 ,那么可以加上--use-base-name选项,表示匹配文件名,而不是匹配完整路径:
其中 --path 选项后跟需要操作的路径或者文件名,--invert-paths选项字面意思是反向,因此该标记表示的是删除操作。
以上都是删除某些文件或者保留某些文件的操作,其目录结构仍然会保留原始仓库的结构,但我们需要的是仅保留webapp目录下的所有文件,并将其中的内容移动到根目录下。针对这种场景git-filter-repo提供了一个叫做--subdirectory-filter的选项,接下来就进行实际操作。
接下来再看一下老的仓库目录结构
仅保留webapp目录下的内容,并让其成为新的根目录,执行如下命令:
执行结果的目录结构如下所示:
至此,目录结构已经如愿完成,为了确认迁移的 历史 记录也是完整的,执行
如果确认本地仓库的迁移结果正确,再执行命令将当前本地仓库推向迁移的目的仓库即可:
至此我们的git项目迁移就完成了,不仅将代码迁移到新的仓库,也同时将提交 历史 带去了新的仓库。这样一来,对于开发同学来说迁移完全是无痛的,只是切换了新的git地址,而开发过程完全不会中断。
在git项目需要迁移的场景中,日常工作中也许第一反应就是让开发同学们放下手中的工作,全部推向一个指定用于迁移的分支,然后以这个分支为准,下载源代码,再将其推送到新的仓库中。
这种操作方式虽然简单,但是对于开发同学来说,却会造成很多麻烦。
比如新仓库的代码不仅含有自己未开发完成的代码,也含有其他人未完成的代码,很有可能在迁移完成之后项目都跑不起来。
而除此以外,如果新仓库的代码有一个需要很快就上线的功能,或者紧急修复,面对一个百废待兴的新仓库,如何整理出一个可以上线的代码版本,又是一件非常头大的事情。
git-filter-branch可以帮助我们修改目录树和提交 历史 ,但是执行效率和混乱的提交 历史 显得太过于繁琐。
git-filter-repo工具提供了强大的工具集,良好的用户使用界面,以及高效率的处理机制,在目前确实是处理仓库迁移的最优选择。
本文仅仅是讲解了git-filter-repo的一种应用场景,其官方文档上有更多的使用场景,可以根据更多的条件来过滤和操作文件和提交 历史 。
Ⅱ web前端常用的数据库有哪些
1、MySQL
2、Mongodb
3、SQL Server
4、Oracle
Ⅲ 前端如何将项目放到gitHub仓库的方法
1.准备好已经处理过的项目
Ⅳ 前端开发用什么数据库
数据库一般是后端开发负责,很多公司前端现在也在负责数据库等和后端结合,向全栈开发方向发展。
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。相比较于MySql,它省去了建表等繁琐的操作,可以实现类似于js的对象操作。
MySQL
MySQL的开放式的架构使得用户选择性很强,同时社区开发与维护人数众多,其功能比较稳定,性能卓越,且在遵守GPL协议的前提下,可以免费使用与修改,也为MySQL的推广与使用带来了更多利好。在MySQL成长与发展过程中,支持的功能逐渐增多,性能也不断提高,对平台支持也越来越多。
MySQL是一种关系型数据库管理系统关系型数据库的特点是将数据保存在不同的表中,在将这些表放入不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,灵活性可管理性也得到了很大提高。访问以及管理MySQL数据库的最常用标准化语言为SQL结构化查询语言。
绝大多数的使用Linux操作系统的大中小互联网网站都在使用MySQL作为其后端的数据库存储,从大型BAT门户,到电商平台,分类门户等无一例外都使用MySQL数据库。那么,MySQL数据库到底那些优势和特点,让大家义无反顾的选择它呢?
原因可能有以下几点:
1.MySQL性能卓越,服务稳定,很少出现异常宕机2.MySQL开放源代码且无版权制约,自主性及使用成本低3.MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助4.MySQL软件体积小,安装使用简单,并且易于维护,安装及维护成本低5.MySQL品牌口碑较应,使得企业无需考虑就直接用之,LAMP,LEMP流行架构。6.MySQL支持多种操作语言,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的支持。
Ⅳ 前端仓库是什么
前端仓库 就是一个仓库,能帮助前端开发人员节省时间的仓库!
初级前端与高级前端之间,很大原因就是投入学习前端的时间、经验的差别,其实就是信息差。
如果有一个地方能又快又好的获得这些优质的前端信息,那么将会大大缩短从初级到高级的时间。