从VSS到SVN再到Git 记Git的基本操做

Source code control 一直是软件开发过程当中重要的环节,从最初的纯文件备份,到使用工具进行管理。Source code control 工具的做用也不只仅只是单纯的对同一个版本进行管理了。从目前主流的source code control工具当中不难发现里面的Branch, tag等功能的应用场景愈来愈多,特别是如今多数企业使用的敏捷编程,结合branch和tag等功能真的可以很好的作到多版本开发,快速迭代。git

思考: 没有source code control咱们如何快速的基于一份代码同时进行多个功能的并行开发。github

回过头来讲下本人在行业当中所用到的几款source code control工具。编程

VSS

VSS(Visual Source Salf),是一款微软提供的代码管理工具,做为Visual Studio的一员,在早期的开发过程中确实可以确保代码不被开发人员错误的修改,也解决了异地开发协做的代码共享管理的难点。可是依旧有一些不足,好比:安全

  • 文件基本以独占的形势进行锁定。若是A在修改的时候B没有办法进行修改。
  • VSS只支持Windows版本,支持的开发工具仅支持微软系。
  • 基于文件存储,服务器必须共享文件夹。安全性值得考虑。之前通常用于内网开发环境。
  • 收费

SVN

SVN(Subversion),一个开源的source code control system。除开最基本的如VSS提供的代码管理功能外,最大的亮点是提供了分支,且提交内容的级别基于代码行了。也就是说,不用再有独占文件开发的问题了。好比,一个实现接口的代码文件能够由多个开发人员同时修改。谁先作完谁能够先进行提交,不会等到必须全部的人作完后再进行合并。对于不能使用VSS的工程师来讲,SVN的出现彻底是一个福音,直接从CVS跳到了这么强大的工具上。
总结一下,SVN的优劣以下:bash

  • 优点:
    • 代码一致性高。
    • 支持提交事物性操做。
    • Diff 功能。
    • Branch,Tag的引用,方便版本管理。
    • 轻松上手。
  • 劣势
    • 必须是联网状态下才能够进行一些数据的读取。
    • 不是分布式的代码库。
    • SVN服务器崩溃的灾难是巨大的。

Git

随着开源运动的流行(Liunx开发人员的功劳),Git也就这么流行起来的。说是在随着开源运动的流行而流行起Git的呢?这归功于Git的分布式这一特性。试想,若是全世界全部的Liunx爱好者都在几台机器上进行开发和提交,这酸爽不敢想象。抑或是主服务器崩溃了,那么其余的开发人员也只有泪奔。
Git的牛逼之处在于如下:服务器

  • 每一次Clone就是从服务器上pull到了全部的内容,包括版本信息。
  • 在本地能够根据不一样的须要,本地新建本身的分支。
  • 分支之间的任意切换。
  • 单机上就能够进行分支合并。
  • 牛人+插件加持。 Git flow, 按Vincent Driessen 分支模型提供的一个插件.

git-model@2x.png

A successful Git branching modelapp

如何使用Git

  1. 安装
  2. $ Brew install git分布式

  3. 建立仓库工具

  4. $ git init
  5. 文件操做post

    有了仓库后就能够对文件进行 add , commit, push 和pull等操做了。

Tables Are
git add 添加至暂存区
git add–interactive 交互式添加
git apply 应用补丁
git am 应用邮件格式补丁
git annotate同义词,等同于 git blame
git archive 文件归档打包
git bisect 二分查找
git blame 文件逐行追溯
git branch 分支管理
git cat-file 版本库对象研究工具
git checkout 检出到工做区、切换或建立分支
git cherry-pick 提交拣选
git citool 图形化提交,至关于 git gui 命令
git clean 清除工做区未跟踪文件
git clone 克隆版本库
git commit 提交
git config 查询和修改配置
git describe 经过里程碑直观地显示提交ID
git diff 差别比较
git difftool 调用图形化差别比较工具
git fetch 获取远程版本库的提交
git format-patch 建立邮件格式的补丁文件。参见 git am 命令
git grep 文件内容搜索定位工具
git gui 基于Tcl/Tk的图形化工具,侧重提交等操做
git help 帮助
git init 版本库初始化
git init-db* 同义词,等同于 git init
git log 显示提交日志
git merge 分支合并
git mergetool 图形化冲突解决
git mv 重命名
git pull 拉回远程版本库的提交
git push 推送至远程版本库
git rebase 分支变基
git rebase–interactive 交互式分支变基
git reflog 分支等引用变动记录管理
git remote 远程版本库管理
git repo-config* 同义词,等同于 git config
git reset 重置改变分支“游标”指向
git rev-parse 将各类引用表示法转换为哈希值等
git revert 反转提交
git rm 删除文件
git show 显示各类类型的对象
git stage* 同义词,等同于 git add
git stash 保存和恢复进度
git status 显示工做区文件状态
git tag 里程碑管理

.
.

Best practice

建议使用github进行上手实验。使用邮箱注册一次Git hub后便可在Github上建立本身的Repository.


2.png

建立完成后,咱们会获得一个Repository的地址。有了这个地址咱们就能够进行Git的练习了。


3.png
  • 使用 git clone 将远程仓库clone到本地。

    git clone

5.png
  • 添加一些文件
echo "Hello Scott" -> "Hello" //写了一个文件到Hello git add Hello // 将Hello文件添加到暂存区。(Index) git commit -m "this is my first file" // 提交到本地仓库 git push //推送本地仓库到远程仓库

6.png

以上,文件就被推送到了远程仓库。其余工程师若是执行Pull操做的话便可把变更的文件拉到本地。


7.png
  • 若是有其余工程师修改了文件,须要远程获取下。
    git pull  //拉取远端文件 git log //能够查看变动历史

A5B85BFD-764E-468F-81C4-0B727BA70428.png
  • 冲突的解决
    冲突每每是由于版本不一致而产生。如工程师A修改了Hello文件并提交到远端仓库,而B在本地修改了Hello,也想提交。因为A和B的Hello文件并不一致,因此冲突产生了。

4EB9EB75-2FF9-4363-AD78-9E13D1415EA8.png

只须要git pull一次便可。 (注:git pull 会自动merge,可是一般状况下自动merge效果不会太好。好比A和B 都在修改function A (){} )
冲突长这模样。


10.png

通常手动解决冲突后,从新添加,提交,push便可。


11.png

如上描述,手动合并冲突比较麻烦。建议使用工具进行git 的操做,如今通常的工具都提供了分支管理,合并等功能。
推荐 SourceTree

分支的管理

在不少时候会遇到同时须要开发多个功能,开发任务将会交给多个工程师进行开发,这个时候在Git上的实践为-->建立多个分支。 N个工程师从Master或Dev分支进行分支建立。

git checkout -b NewFeature   // 分支建好后,会直接切换到该分支。 git push --set-upstream origin NewFeature //与远程分支关联

完成开发后,须要合并到Master 或Dev 分支。

git merge origin/NewFeature // 将远程分支NewFeature与当前分支合并。

12.png

写在最后

以上从source code control扩散到Git的使用,仅仅只是抛砖引玉。欢迎你们多多指教。

相关文章
相关标签/搜索