svn转向git总结

作者: 流芳不待人 | 来源:发表于2018-04-09 19:50 被阅读15次

已有的知识为我们提供经验,也为我们带来习惯性思维的束缚。

从SVN转向Git的总是不免习惯性在Git中找SVN的对标,因此特地做了一份总结。

svn和git设计本意

了解设计本意,才能更容易理解svn和git的区别,更轻松过度。

svn是为了解决团队开发的代码版本控制问题。所以svn采用的是一个中心仓库服务器,所有人都向一个仓库提交。

当然git也能解决团队开发的版本控制问题,但不仅如此,它还要解决自己代码版本控制,以及非团队协作开发的版本控制问题。更确切的说git更适合解决后面两个问题,只是捎带解决了第一个问题。

仓库的区别

svn的仓库在远程的中心服务器,而git的仓库一般就在代码目录中。git仓库创建非常便捷随意

cd /path/to/my/project
git init

这就完成了仓库的创建,目录下会生成一个.git的目录,这个目录跟svn在远程服务器的仓库功能是类似的,用来管理代码版本的。然后就可以完成个人代码的版本控制了。

svn本地也可以搭建仓库,然而一般用途还是远程服务器。

git支持仓库间通信

svn只允许用户和中心服务器通信:下载(checkout),提交(commit),更新(update)。但git支持仓库间通信,这是git运行的根基之一。

从远程仓库clone下来的代码,会包含两个库,自己的库和远程库origin(origin是仓库的别名)

git remote -v #查看远程仓库
origin https://github.com/path/to/project.git

本地的仓库也可以主动添加远程仓库。

git remote add Tyler https://github.com/tyler/project.git

这样就可以与远程仓库通信:

#将本地代码推送到远程仓库
git push origin
git push Tyler

#将远程仓库的更新同步到本地
git fetch origin
git fetch Tyler

本地有两个库,fetch命令同步的只是远程库映射在本地的 origin 和 Tyler.。如果需要将origin或Tyler的库与自己的代码合并,需要进行merge或rebase操作。

git与仓库的通信

git的团队开发模式

团队工作,中心仓库是不可避免的。svn本身就是靠中心仓库,而git是用一个不含代码的仓库充当中心仓库。

git init --bare project.git #创建一个不含代码的裸仓库
#导出一个不含代码的裸仓库

然后,团队的每个成员都要通过clone或者添加远程仓库的方式,将本地仓库和远程仓库关联起来。

提交到中心仓库

每个成员在本地开发,本地commit。然后将本地仓库push到远程仓库

git add newFile.txt modify.txt
git commit -m 'my commit'
git push origin

svn的commit是直接提交到远程仓库的,git commit只是提交到本地仓库。push完成的才是svn的commit的操作。

从中心服务器更新

上面仓库间通信讲到远程仓库与本地的更新要分两步,fetch+merge 才是完成了svn的update操作。为方便操作,git将两个操作合并成一个命令git pull.

svn在commit前需要保证本地代码是最新的,git同样要求push之前本地的仓库中必须包含中心仓库的最新提交,否则就要先pull一下:fetch到origin,然后将本地代码与origin进行合并.

然而git pull和svn update的效果并不完全相同。因为git的合并有两种方式:merge或rebase。

非团队协作开发

这是github开源项目使用的开发方式。

开源项目虽然代码开源,作者允许别人自由下载(clone)但是不能允许他们随意提交(push)。一般是由作者来维护项目,其他贡献者将开源项目fork到自己远程仓库,并创建自己的分支。有修改后就提交到各自的仓库的属于自己的分支上,用于供作者拉取。

此时贡献者可以主动向作者发起一个pull request,意思是请求别人pull自己的代码。

作者收到pull request会对贡献者的代码审查,审查通过后会将贡献者的代码与自己的代码merge,这样就完成了对开源项目的贡献和维护。

原文链接

相关文章

  • svn转向git总结

    已有的知识为我们提供经验,也为我们带来习惯性思维的束缚。 从SVN转向Git的总是不免习惯性在Git中找SVN的对...

  • 删除项目下的所有.svn文件

    项目代码托管由svn转向git时,我们需要把项目里面的所有.svn文件删除。 find . -type d -na...

  • SVN迁移至GIT记录.md

    最近公司开始转向git,要求所有svn库迁移至Gitlab,除了SVN,公司在用的还有TFS也要求迁移,算是彻底转...

  • git 的使用

    有关git的使用总结一下,留着使用 git、svn区别 使用过程 svn基本使用过程 git基本使用过程 管理模式...

  • 用GIT操作SVN

    由于习惯了 GIT 版本管理,切回 SVN 落差太大.下面总结用 GIT 操作 SVN. 一.原理 1.本地仓库以...

  • git命令的使用

    最近在公司的服务器上安装了GitSever,开始从SVN转向到Git了,整理了一些在Git常用的命令。 取得Git...

  • Git Flow工作流:如何更好实施代码管理

    我负责的公司项目早在2014年就已经开始从SVN转向了Git,并同时启动了Git Flow代码管理方案。这几年下来...

  • 使用git管理svn项目

    git svn init http://xxxxxxx (svn co 的地址)git svn fetchgit ...

  • Android build.gradle 使用 Svn,Git

    Svn 读取Svn Revision Number 读取Svn日志 读取Svn Tag(不会) Git 读取Git...

  • SVN迁移Git

    参考:GIt - 迁移到Git 构建user.txt 关联svn用户和git用户。 用git svn导入svn库 ...

网友评论

    本文标题:svn转向git总结

    本文链接:https://www.haomeiwen.com/subject/vjqwhftx.html