git与SVN的对比

SVN与Git

SVN是集中式版本控制工具,需要一台服务器用于作为仓库存储代码文件,当需要修改文件时,必须先将最新的文件从服务器上下载下来,然后再修改,修改完成后再上传到服务器。

集中式版本控制器最大的问题是要联网才能工作,如果在局域网内,带宽大,上传下载速度快还好,但是如果遇上网速慢,则上传下载很慢,效率不高。

Git是分布式版本控制工具,其没有类似于SVN的“中央服务器”,每个人的电脑就是一个版本库,这样你工作就不需要联网,因为版本库就在你的电脑上,如果出现多人合作,则只需要将你的修改推送给对方即可

为了实现多人协作,其实分布式版本控制工具也需要有一台电脑充当“中央服务器”,否则,两个人之间无法进行相互推送,双方改的东西无法合并,Githu就是类似的一个“中央服务器”

Git中文件的三种状态

主要可以分为:已提交(committed),已修改(modified)和已暂存(staged)‍‍
已提交:表示该文件已经被保存在本地数据库中
已修改:表示修改了某个文件,但是还没有提交
已暂存:表示已修改的文件被放到下次提交的清单中

Git中文件的三个流转区域:Git的工作目录暂存区域、以及本地仓库,如下:

git与SVN的对比_第1张图片
Git文件的三个流转区域

Git目录:每个项目都有一个Git目录(如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone --bare 的话,新建的目录本身就是 Git 目录。),它是保存元数据和对象数据库的地方,每次clone时,其实拷贝的就是这个文件夹下的数据

工作目录:从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

暂存区:所谓的暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域。
  3. 提交更新(commit),将保存在暂存区域的文件快照永久转储到 Git 目录中。

所以,我们可以从文件所处的位置来判断状态:
如果是 Git 目录中保存着的特定版本文件,就属于已提交状态
如果作了修改并已放入暂存区域,就属于已暂存状态
如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态

git的常用流程

  1. 先用git add添加
  2. 用git commit提交
  3. 然后用git push推送到版本库

git常用操作

  • 常用推送
    git push origin master
  • 强制推送到master(慎用,它会覆盖别人的代码)
    git push -f origin master
    -将远程文件pull下来
    git pull origin master
  • 再添加一个远程库的标签
    git remote add gitlab [email protected]:abc/blog.git
    [email protected]:abc/blog.git 填写实际的地址
  • 推送到gitlab标签的地址上
    git push gitlab master
  • 删除gitlab标签
    git remote remove gitlabe
  • 修改origin标签对应的地址
    git remote set-url origin [email protected]:abc/blog.git
    -把gitlab标签改名为coding
    git remote rename gitlab coding
  • 查看所有分支
    git branch -a
  • 新建分支dev
    git branch dev
  • 切换到dev分支
    git checkout dev
  • 合并分支dev到master
    git merge dev

分支操作

合并分支

当在自己的zhangjie分支开发完成功能,并上传到远程后,要将zhangjie分支合并到develop分支,操作步骤如下:

git checkout develop     // 先切换到develop分支
git pull origin zhangjie   // 将zhangjie 分支合并到当前分支,当前是develop分支
如果有冲突,则需要解决冲突,然后再合并
git push origin develop  // 合并之后,再将文件推送到develop分支即可

参考:Git的三种状态

你可能感兴趣的:(git与SVN的对比)