GitHub和Subversion的使用以及优缺点

版权声明:个人见解,希望可以帮助大家,共同进步. https://blog.csdn.net/weixin_40783315/article/details/84981875

SVN:

      简介:       

          SVN是一个开放源代码的版本控制系统,也就是说 Subversion管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。 

     概念:

     repository(源代码库):    源代码统一存放的地方

     Checkout(提取):手上没有源代码的时候,需要从源代码库提取一份

     Commit(提交):已经修改了代码,就需要提交到源代码库

     Update (更新):已经提取了一份源代码,更新一下就可以和中央资料档案库上的源代码同步,你手上的代码就会有最新的变更
 

日常开发过程中就是这样:Update(获得最新的代码) –>作出自己的修改并调试成功 –> Commit(大家就可以看到你的修改了) 。

ps:如果两个人同时修改了同一个文件,SVN可以合并这两个人的改动,SVN管理源代码是以行为单位的,也就是说只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行的话,SVN就会提示文件Confict冲突,就需要我们去手动确认。

    安装:

      windows系统下:

Windows系统安装比较简单,下面给出链接,可以自己看。

     Windows系统安装SVN的过程以及汉化:                 安装SVN与汉化

      Linux系统下: 

                         使用 apt-get 命令进行安装:             sudo apt-get install subversion

                         查询版本,验证是否安装成功。         svn --version

创建版本库:

           在服务器上创建一个属于我们自己控制版本的文件夹,设置好权限。 

            搭建服务器:    Ubnutu搭建服务器

检出:

                svn checkout http://192.168.1.1:53301/svn/vslam

上传:

 将要上传的文件,比如  my-slam,移动到  vslam 文件夹下。 
上传  my-slam  文件夹下的所有文件:

         svn add my-slam/

当然,还可以上传单个文件或多个文件。 
可通过以下命令查询文件状态,表示未上传,A 表示已上传。

         svn status

提交:

             svn commit -m “注释信息”

版本回退:

   当我们想放弃对文件的修改,可以使用 svn revert 命令。

回退文件版本                                      svn revert file-name

回退目录版本                                      svn revert -R directory-name

恢复一个已经提交的版本                  svn merge -r    A:B    file-name

ps:找到当前仓库的版本,比如是 A ,我们要撤回的版本是 B

SVN 查看历史信息:

通过svn命令可以根据时间或修订号去除过去的版本,或者某一版本所做的具体的修改。以下四个命令可以用来查看svn 的历史:

svn log:用来展示svn 的版本作者、日期、路径等。

svn diff: 用来显示特定修改的行级详细信息。

svn cat:取得在特定版本的某文件显示在当前屏幕。

svn list:  显示一个目录或某一版本存在的文件。

GitHub:

简介:  

    GitHub是目前世界上最先进的分布式版本控制系统(没有之一)。

安装:

     Windows系统下安装:

                                                        Windows安装比较简单:      链接

     Linux系统下安装:

在 Ubuntu 上安装Git            sudo apt-get install git

创建版本库                           mkdir learngit                      cd learngit

通过git init命令把这个目录变成Git可以管理的仓库:                git init

把文件添加到版本库            首先编写一个  readme.txt 文件                git add readme.txt

用 git commit 命令告诉Git,把文件提交到仓库                  git commit -m "注释信息"

commit 可以一次提交很多文件:          git add file1.txt       git add file2.txt      file3.txt git commit -m "add 3 files."

版本回退           git log 命令显示从最近到最远的提交日志。              git log

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 

使用git reset命令,把当前版本回退到上一个版本:

创建一个新的源码库:

git clone http://***/***/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

现有文件夹:

cd existing_folder
git init
git remote add origin http://***/***/test.git
git add .
git commit -m "Initial commit"
git push -u origin master

现有Git存储库:

cd existing_repo
git remote rename origin old-origin
git remote add origin http://***/***/test.git
git push -u origin --all
git push -u origin --tags

SVN和GitHub的区别:

一、最核心的区别Git是分布式的,而Svn不是分布的。声明一点Git并不是目前唯一的分布式版本控制系统,还有比如Mercurial等,所以说它们差不许多。话说回来Git跟Svn一样有自己的集中式版本库和Server端,但Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。

从上面看GIt真的很棒,但是GIt adds Complexity,刚开始使用会有些疑惑,因为需要建两个仓库(本地存储库 & 远程存储库),指令很多,除此之外你需要知道哪些指令在本地存储库,哪些指令在远程存储库。

二、存储方式:

Git把内容按原数据方式存储,而SVN是按文件:因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。

三、全局版本号:

Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征。

四、内容的完整性

Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

五、下载文件后

Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。

六、修改

SVN必须先Update才能Commit,忘记了合并时就会出现一些错误,git还是比较少的出现这种情况。

七、克隆

克隆一份全新的目录以同样拥有五个分支来说,SVN是同时复制5个版本的文件,也就是说重复五次同样的动作。而Git只是获取文件的每个版本的 元素,然后只载入主要的分支(master)在我的经验,克隆一个拥有将近一万个提交(commit),五个分支,每个分支有大约1500个文件的 SVN,耗了将近一个小时!而Git只用了区区的1分钟!

八、版本库

SVN只能有一个指定的中央版本库,如果中央版本库出现问题,所有工作成员都会一起瘫痪,直到版本库维修完毕或新的版本库设立完成。

GitHub可以有无限个版本库,或者说每一个Git都是一个版本去,区别是它们是否拥有活跃目录。如果主版本库出现问题,工作成员依旧可以在自己的本地库提交,等待主要版本库恢复即可。工作成员也可以提交到其他版本库。

九、分支

在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开启新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载。

而 Git,每个工作成员可以任意在自己的本地版本库开启无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。

Git的分支名是可以使用不同名字的。例如:我的本地分支名为OK,而在主要版本库的名字其实是master。

最值得一提,我可以在Git的任意一个提交点(commit point)开启分支!(其中一个方法是使用gitk –all 可观察整个提交记录,然后在任意点开启分支。)

十、提交

在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属于本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Sync)。

SVN和GitHub的优缺点

SVN的优点:

1、采用集中式,易于管理,保证安全性;

2、管理方便,逻辑明确,理念符合常规思维;

3、代码的一致性高;

4、适合人数不多的项目开发;

5、允许一个文件有任意多的可命名属性,会关注所有的文件类型;

6、支持二进制文件,更容易处理大文件;

7、支持空目录。

8、对中文支持好,操作简单,使用没有难度,美工人员,产品人员,测试人员,实施人员都可轻松上手。使用界面统一,功能完善,操作方便。

SVN的缺点:

1、服务器压力太大,数据库容量暴增;

2、必须连接在服务器上,否则基本不能工作、提交、对比、还原等;

3、不适合开源开发。

 

GitHub的优点:

、适合分布式开发,强调个体;

2、公共的服务器压力和数量都不会太大;

3、速度快, 成熟的架构,开发灵活;

4、任意两个开发者之间可以很容易的解决冲突;

5、离线工作,管理代码成本低,不需要依赖服务器;

6、部署方便。基本上下个命令就可以用;

7、良好的分支机制,可以让主干代码保持干净。

8、Git对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。

 

GitHub的缺点:

1、资料少,学习成本比较大,学习周期比较长,要求人员素质比较高;

2、不符合常规思维;

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

4、不支持中文,图形界面支持差,使用难度大。不易推广。

猜你喜欢

转载自blog.csdn.net/weixin_40783315/article/details/84981875
今日推荐