Source code control 一直是软件开发过程当中重要的环节,从最初的纯文件备份,到使用工具进行管理。Source code control 工具的做用也不只仅只是单纯的对同一个版本进行管理了。从目前主流的source code control工具当中不难发现里面的Branch, tag等功能的应用场景愈来愈多,特别是如今多数企业使用的敏捷编程,结合branch和tag等功能真的可以很好的作到多版本开发,快速迭代。git
思考: 没有source code control咱们如何快速的基于一份代码同时进行多个功能的并行开发。github
回过头来讲下本人在行业当中所用到的几款source code control工具。编程
VSS(Visual Source Salf),是一款微软提供的代码管理工具,做为Visual Studio的一员,在早期的开发过程中确实可以确保代码不被开发人员错误的修改,也解决了异地开发协做的代码共享管理的难点。可是依旧有一些不足,好比:安全
SVN(Subversion),一个开源的source code control system。除开最基本的如VSS提供的代码管理功能外,最大的亮点是提供了分支,且提交内容的级别基于代码行了。也就是说,不用再有独占文件开发的问题了。好比,一个实现接口的代码文件能够由多个开发人员同时修改。谁先作完谁能够先进行提交,不会等到必须全部的人作完后再进行合并。对于不能使用VSS的工程师来讲,SVN的出现彻底是一个福音,直接从CVS跳到了这么强大的工具上。
总结一下,SVN的优劣以下:bash
随着开源运动的流行(Liunx开发人员的功劳),Git也就这么流行起来的。说是在随着开源运动的流行而流行起Git的呢?这归功于Git的分布式这一特性。试想,若是全世界全部的Liunx爱好者都在几台机器上进行开发和提交,这酸爽不敢想象。抑或是主服务器崩溃了,那么其余的开发人员也只有泪奔。
Git的牛逼之处在于如下:服务器
A successful Git branching modelapp
$ Brew install git分布式
建立仓库工具
文件操做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 | 里程碑管理 |
.
.
建议使用github进行上手实验。使用邮箱注册一次Git hub后便可在Github上建立本身的Repository.
建立完成后,咱们会获得一个Repository的地址。有了这个地址咱们就能够进行Git的练习了。
使用 git clone 将远程仓库clone到本地。
git clone
echo "Hello Scott" -> "Hello" //写了一个文件到Hello git add Hello // 将Hello文件添加到暂存区。(Index) git commit -m "this is my first file" // 提交到本地仓库 git push //推送本地仓库到远程仓库
以上,文件就被推送到了远程仓库。其余工程师若是执行Pull操做的话便可把变更的文件拉到本地。
git pull //拉取远端文件 git log //能够查看变动历史
只须要git pull一次便可。 (注:git pull 会自动merge,可是一般状况下自动merge效果不会太好。好比A和B 都在修改function A (){} )
冲突长这模样。
通常手动解决冲突后,从新添加,提交,push便可。
如上描述,手动合并冲突比较麻烦。建议使用工具进行git 的操做,如今通常的工具都提供了分支管理,合并等功能。
推荐 SourceTree
在不少时候会遇到同时须要开发多个功能,开发任务将会交给多个工程师进行开发,这个时候在Git上的实践为-->建立多个分支。 N个工程师从Master或Dev分支进行分支建立。
git checkout -b NewFeature // 分支建好后,会直接切换到该分支。 git push --set-upstream origin NewFeature //与远程分支关联
完成开发后,须要合并到Master 或Dev 分支。
git merge origin/NewFeature // 将远程分支NewFeature与当前分支合并。
写在最后
以上从source code control扩散到Git的使用,仅仅只是抛砖引玉。欢迎你们多多指教。