集中式的版本控制和分布式版本控制介绍

电子说

1.3w人已加入

描述

       我们知道,数字IC的开发是一群研发工程师围绕着RTL代码干活的过程,代码的迭代动辄成千上万个版本。

RTL

       对于没接触过项目的新手,不知道是否想过这个问题:如何保证大家修改过的代码实时同步更新到每一个人手里呢?

       版本控制系统就是一种用于多人协同开发的技术,可以管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,还可以恢复以前的版本。

目前常用的版本控制系统有两种,集中式的版本控制和分布式版本控制

1. 集中式的版本控制系统:SVN

       版本库集中存放在中央repository,这个repository像一个文件服务器,它会记住每一次用户提交的文件改动,所以用过可以查看文件的变动历史,也可以将文件恢复到之前的版本。新人开始干活了,用的都是个人电脑,所以要先从中央repository获取最新的版本,然后开始干活,干完活了,再把自己的文件修改上传给中央repository,生成新的版本。集中式版本控制系统必须联网才能工作,局域网中速度还行,但是在互联网环境下,网速通常比较慢。

RTL

repository(源代码库):源代码统一存放的地方,用户提取、提交、更新代码的地方

checkout(提取):刚开始工作时,你需要从repository checkout一份

commit(提交):工作对代码进行了修改,你需要将修改的文件Commit到repository

update (更新):别人也会提交新代码到repository, Update一下你就可以和repository上的源代码同步了

开发流程:刚接入项目,svn co xxx,checkout源代码库,就可以开始和同事协同开发了;第二天,同事昨天做了一些文件修改,为了保持同步,svnup xxx,update获取最新的代码;工作了几天,你发现了一些bug,对相关文件做修改并调试成功了,这时候svn ci xxx,将修改的文件提交至repository中,同事就可以看到你的修改了。

如果你想在版本库添加新的文件用于更新迭代,svn add xxx,将新文件加到repository中。当你和同事同时对一个文件进行了修改,SVN会自动合并两种修改,但是如果修改的是同一行,就会报conflict冲突提示,这时候就需要你们double check文件了。

常用命令

svnadd 添加文件、目录或符号链

svn co从版本库取出一个工作拷贝

svn ci将修改从工作拷贝发送到版本库

svndel 从工作拷贝或版本库删除一个项目

svndiff 比较两条路径的区别

svnhelp 帮助

svninfo 打印路径的信息

svnlog 显示提交日志信息

svnmerge 应用两组源文件的差别到工作拷贝路径

svnresolved 删除工作拷贝文件或目录的“冲突”状态

svnrevert 取消所有的本地编辑

svn up更新本地的工作拷贝

2. 分布式的版本控制系统:Git

      没有中央repository,因为在每一个使用者电脑上,就有一个完整的数据repository,就算没有网络依然可以使用Git,离线在本地提交,在连网时推送到相应的服务器或者其他用户本地,除此之外Git还具有强大的分支管理功能。

RTL

working directory(工作区):在本地电脑里的工作目录

staging area(暂存区):index文件中,缓冲提交操作

repository(版本库):管理所有版本文件的仓库

工作流程:克隆Git资源作为工作目录;在本地的资源上修改或添加文件;如果他人提交了修改,你可以更新资源;调试通过后提交修改的文件;发现还是有错误,可以撤回提交再次修改后提交。git add从工作区提交到暂存区,git commit从暂存区提交到本地仓库,git push从本地仓库提交到远程仓库。

常用命令

git clone 拷贝一份远程仓库,即下载一个项目

git add 添加文件到暂存区

git commit 将暂存区内容添加到仓库中

git checkout 切换分支或恢复工作树文件

git pull 下载远程代码并合并

git push 上传远程代码并合并

git status 查看仓库当前状态,显示有变更的文件

git diff 比较文件的不同

git reset 回退版本

git rm删除工作区文件

git mv 移动或重命名工作区文件

git init 初始化仓库

git log 查看历史提交记录

git fetch 从远程获取代码库

两者对比

RTL

小结

       Git和SVN都是目前主流的版本控制系统。Git可能更难压缩和存储二进制文件,但它可以离线使用。分支和合并支持也被认为是Git的优势所在。SVN具有全局的版本号,而Git则没有。在磁盘空间存储方面,SVN和Git存储库之间几乎相等。但不管怎样,用哪个还不得是取决于你的公司?





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分