设为首页 收藏本站
查看: 2133|回复: 0

[经验分享] 从VSS到SVN再到Git 记Git的基本操作

[复制链接]

尚未签到

发表于 2018-9-17 09:08:00 | 显示全部楼层 |阅读模式
  Source code control 一直是软件开发过程中重要的环节,从最初的纯文件备份,到使用工具进行管理。Source code control 工具的作用也不仅仅只是单纯的对同一个版本进行管理了。从目前主流的source code control工具当中不难发现里面的Branch, tag等功能的应用场景越来越多,特别是现在多数企业使用的敏捷编程,结合branch和tag等功能真的能够很好的做到多版本开发,快速迭代。
  思考: 没有source code control我们如何快速的基于一份代码同时进行多个功能的并行开发。
  回过头来说下本人在行业当中所用到的几款source code control工具。
VSS
DSC0000.jpg

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

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

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

  •   优势

    •   代码一致性高。
    •   支持提交事物性操作。
    •   Diff 功能。
    •   Branch,Tag的引用,方便版本管理。
    •   轻松上手。

  •   劣势

    •   必须是联网状态下才可以进行一些数据的读取。
    •   不是分布式的代码库。
    •   SVN服务器崩溃的灾难是巨大的。

Git
DSC0002.jpg

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

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

DSC0003.jpg

  git-model@2x.png
  A successful Git branching model
如何使用Git

  •   安装
  •   $ Brew install git
  •   创建仓库
  •   $ git init
  •   文件操作
      有了仓库后就可以对文件进行 add , commit, push 和pull等操作了。
TablesAregit add添加至暂存区git add–interactive交互式添加git apply应用补丁git am应用邮件格式补丁git annotate同义词,等同于 git blamegit 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通过里程碑直观地显示提交IDgit diff差异比较git difftool调用图形化差异比较工具git fetch获取远程版本库的提交git format-patch创建邮件格式的补丁文件。参见 git am 命令git grep文件内容搜索定位工具git gui基于Tcl/Tk的图形化工具,侧重提交等操作git help帮助git init版本库初始化git init-db*同义词,等同于 git initgit log显示提交日志git merge分支合并git mergetool图形化冲突解决git mv重命名git pull拉回远程版本库的提交git push推送至远程版本库git rebase分支变基git rebase–interactive交互式分支变基git reflog分支等引用变更记录管理git remote远程版本库管理git repo-config*同义词,等同于 git configgit reset重置改变分支“游标”指向git rev-parse将各种引用表示法转换为哈希值等git revert反转提交git rm删除文件git show显示各种类型的对象git stage*同义词,等同于 git addgit stash保存和恢复进度git status显示工作区文件状态git tag里程碑管理  .
  .
Best practice
DSC0004.jpg

  建议使用github进行上手实验。使用邮箱注册一次Git hub后即可在Github上创建自己的Repository.
DSC0005.jpg

  2.png
  创建完成后,我们会得到一个Repository的地址。有了这个地址我们就可以进行Git的练习了。
DSC0006.jpg

  3.png

  •   使用 git clone 将远程仓库clone到本地。
    git clone
DSC0007.jpg

  5.png

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

  6.png
  以上,文件就被推送到了远程仓库。其他工程师如果执行Pull操作的话即可把变动的文件拉到本地。
DSC0009.jpg

  7.png

  •   如果有其他工程师修改了文件,需要远程获取下。
    git pull  //拉取远端文件  
    git log //可以查看变更历史
DSC00010.jpg

  A5B85BFD-764E-468F-81C4-0B727BA70428.png

  •   冲突的解决
      冲突往往是因为版本不一致而产生。如工程师A修改了Hello文件并提交到远端仓库,而B在本地修改了Hello,也想提交。由于A和B的Hello文件并不一致,所以冲突产生了。
DSC00011.jpg

  4EB9EB75-2FF9-4363-AD78-9E13D1415EA8.png
  只需要git pull一次即可。 (注:git pull 会自动merge,但是通常情况下自动merge效果不会太好。比如A和B 都在修改function A (){} )
  冲突长这模样。
DSC00012.jpg

  10.png
  一般手动解决冲突后,重新添加,提交,push即可。
DSC00013.jpg

  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与当前分支合并。
DSC00014.jpg

  12.png
写在最后
  以上从source code control扩散到Git的使用,仅仅只是抛砖引玉。欢迎大家多多指教。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588083-1-1.html 上篇帖子: Centos 6.5下部署GIT 服务,客户端安装实施过程及常见问题处理 下篇帖子: git入门(1.历史)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表