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

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

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

回过头来说下本人在行业当中所用到的几款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的优劣如下:

  • 优势

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

Git

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

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

A successful Git branching model

如何使用Git

  1. 安装
  2.    $ Brew install git
    
  3. 创建仓库
  4. $ git init
  5. 文件操作
    
    有了仓库后就可以对文件进行 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.

创建完成后,我们会得到一个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 //可以查看变更历史

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

只需要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的使用,仅仅只是抛砖引玉。欢迎大家多多指教。

时间: 2024-10-18 15:23:13

从VSS到SVN再到Git 记Git的基本操作的相关文章

git学习------>从SVN迁移到Git之后,项目开发代码继续在SVN提交,如何同步迁移之后继续在SVN提交的代码到Git?

最近逐步逐步的将公司的项目都从SVN往Git迁移了,但是想团队成员都能够一步到位就迁移到Git是不可能的,因为还有大部分人都还不会Git,所以整个过渡过程估计得大半年. 因此导致虽然项目迁移过来了,但是团队开发还是在SVN提交代码.所以得想个办法同步迁移之后继续在SVN提交的代码到Git来,不然到时候又得做一次迁移操作得多操蛋. 在网上查看了下资料,都是讲SVN迁移到Git的过程,并没有讲解迁移之后团队成员继续在SVN提交代码,然后需要同步最新的SVN提交记录到Git的过程,因此自己慢慢探索,居

使用Git、Git GUI和TortoiseGit

原文http://zengrong.net/post/1722.htm 2012-12-26更新:在TortoiseGit中使用SSH host2012-12-30更新:在安装的时候选择TortoiseGit使用的SSH客户端 注意: 本文不讲解任何关于Git提交.合并等等使用细节和语法,只记录作者在使用Git相关工具中碰到的问题和选择的经验.本文只是个人意见的集中,不代表适合所有人.如果你是 "被惯坏了的那批",请不要介意.:-) 关于命令行 我一直建议在命令行中使用Git或者SVN

Ubuntu下安装Git以及Git帮助手册【转】

转自:http://milkythinking.com/blog/2011/04/17/install_git_and_manual/ Git简介 Git是一个分布式版本控制系统,对应的是SVN.CVS这样的集中式版本控制系统. 虽然知晓并安装Git是很久以前的事情了,但是我却没怎么用过,一直使用的是SVN.在<Pro Git>中看到的Git的好处有: 本地完整地镜像了代码仓库的所有内容,如果服务器出现故障,可以使用任何一个本地镜像进行恢复.而使用SVN,如果没有对服务器端的数据进行安全悲愤,

Git Flow—Git团队协作最佳实践

一.规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢失等. 就像代码需要代码规范一样,使用Git进行代码管理同样需要一个清晰的流程和规范, Git Flow就是一个被广泛认可的Git使用最佳实践. Git Flow是Vincent Driessen提出的一个分支管理的策略,http://nvie.com/posts/a-successful-gi

真正理解 git fetch, git pull 以及 FETCH_HEAD【转】

转自:http://www.cnblogs.com/ToDoToTry/p/4095626.html 真正理解 git fetch, git pull  要讲清楚git fetch,git pull,必须要附加讲清楚git remote,git merge .远程repo, branch . commit-id 以及 FETCH_HEAD. 1. [git remote]首先, git是一个分布式的结构,这意味着本地和远程是一个相对的名称. 本地的repo仓库要与远程的repo配合完成版本对应必

Git远程04:git fetch &amp; git push &amp; git pull

这三条语句的,完整的命令为: 1 git fetch [远程仓库名] [分支01]:[分支02] 实际使用时,远程仓库名和分支名,在特定的情况下可以省略.一两句话说不清楚,采用脑图的方式展示.请一定要注意当前所在的分支是什么. 如果图片显示太小,请到汪汪的网盘下载(文件夹为/Git),如果有XMind,请直接查看脑图源文件. 2015.08.19更新:git fetch & git push & git pull.png:git fetch & git push & git

linux系统安装git及git常用命令_Linux

1 安装GIT 复制代码 代码如下: $  sudo aptitude install git$  sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,可以选择安装. 2 下载远程项目的GIT库到本地[code]$  git clone git://远程Git库地址  filename[code] filename 是你本地的文件

谁用过git?git clone时报错service=git-upload-pack not found

问题描述 谁用过git?git clone时报错https://github.com/hello.git/info/refs?service=git-upload-pack not found?怎么解决 解决方案 http://blog.sina.com.cn/s/blog_a73687bc0101dak2.html

Ola和Snapdeal 资产再遭减记,软银能否保住印度市场?

日本电信和互联网巨头软银集团于周一宣布,再次减记它在印度的两个旗舰投资--打车应用 Ola 和电商平台 Snapdeal 的资产. 截至9月30日的两季度内,该公司因优先股投资的公允价值下降导致金融工具损失了 581 亿日元(折合5.55亿美元),包括对 Ola 和 Snapdeal 所属两家公司 ANI Technologies Pvt. Ltd .Jasper Infotech Pvt. Ltd 的嵌入式衍生品投资的损失.而在这些损失中,近一半是由于日元升值造成的. 截至6月30日的第一季度