- 版本管理工具有哪些?
VSS 微软的版本控制管理工具,仅支持Windows系统,简单好用,单仅局限于团队级开发,不能胜任企业级开发工作。
CVS 典型的C/S软件,功能相对单一,简陋,适合几个人的小型团队,在数据量不大的情况下性能可以接受。
SVN 前身是CVS,包括了CVS的特点,也增加了一些新功能;
ClearCase、StarTeam闭源集中式
GIT、Mercurial、Monotone开源分布式
- GIT相比SVN和其他版本控制工具有什么优势?
2.1设计思想
svn 是基于revision的也就是delta,git是基于状态的;
svn单分支是一条revision的时间线,git则是由commits组成的DAG;
branch的设计,svn是revision-on-writegit是DAG上加一个引用;
2.2使用体验
1.Git可以本地commit,可以随便保存各种历史痕迹,svncommit就到服务器了,发现commit错了就要回滚重来;
2.Git branch拉取和切换很简单,svn一个branch就是一个copy;
3.分布式去中心化使得团队的维护更加容易
4.分支的合并速度更快
5.微commit和微branch,每个微小的修改都可以使用branch和commit
2.3主要区别:
Svn是集中版本控制系统,版本库存放在中央服务器,干活时从中央服务器获得最新版本,干完活推到中央服务器,必须联网才行。
Git是分布式版本控制系统,没有中央服务器,每台电脑都是一个完整的版本库,这样工作时不需要联网,在多人协作时推送到远端就可以。
每个开发可以有属于自己的整个工程的本地拷贝。隔离的环境让各个开发者的工作和项目的其他部分修改独立开来
即自由地提交到自己的本地仓库,先完全忽略上游的开发,直到方便的时候再把修改反馈上去。
Git提供了强壮的分支和合并模型。不像SVN,Git的分支设计成可以做为一种用来在仓库之间集成代码和分享修改的『失败安全』的机制。
如你所见,仅使用几个Git命令我们就可以模拟出传统Subversion开发环境。对于要从SVN迁移过来的团队来说这太好了,但没有发挥出Git分布式本质的优势。
功能分支工作流背后的核心思路是所有的功能开发应该在一个专门的分支,而不是在master分支上。
这个隔离可以方便多个开发者在各自的功能上开发而不会弄乱主干代码。 另外,也保证了master分支的代码一定不会是有问题的,极大有利于集成环境。
3.1 Git常用命令流程
Workspace工作区、Index/Stage 暂存区、localrepository本地仓库区、remote repository 远程仓库区
3.2 Git常用命令
A.初始设置
git config --global user.name “Leon”
git config –global user.email "Leon@163.com"
B.本地操作
#添加指定文件到暂存区
git add [file1] [file2] [file3]…
#添加指定目录到暂存区,包括子目录
git add [dir]
#添加当前目录的所有文件到暂存区
git add .
#删除工作区文件
git rm [file1] [flie2]
#检出独立分支(跟踪主分支)
git checkout –b new-feature master
#推送本地分支到远程
git push –u origin new-feature
C.远端操作
#克隆远端代码到本地
git clone <git 地址>
#远端抓取
git fetch
#与本地当前分支合并
git merge
#抓取并合并
git pull
#推送到远端(在当前追踪分支时local branch和:可省略)
git push [-f] [local branch]:[remote branch]
D.分支操作
#列出本地分支、远程分支、本地和远程分支
git branch、git branch –r、git branch–a
#新建分支,但仍停留在当前分支
git branch [branch name]
#新建分支,并切换到该分支
git checkout –b [branch name]
#新建分支,并与指定的远程分支建立追踪关系
git branch -- track [branch name] [remote branch]
#切换到指定分支(已存在的分支)
git checkout [branch name]
#切换到上一分支
git checkout –
#合并指定分支到当前分支(branch A为待合并的分支,当前分支可以省略)
git merge [branch A]
#删除本地分支
git branch –d [branch name]
#删除远程分支
git push origin –delete [branch name]
git branch –dr [remote branch]
E.代码提交
#提交暂存区到仓库区(全部修改)
git commit –m “message”
#提交暂存区指定文件到仓库区
git commit [file1] [file2]… -m “message”
#提交工作区自上次commit之后的变化直接到仓库区(跳过暂存区)
git commit –a
#提交时显示所有diff消息
git commit –v
#使用一次新的commit 替代上次的提交
如果代码没有任何新的变化,则用来修改上次的提交信息
git commit –amend -m “[message]”
F.查看信息
#显示有变更的文件
git status
#显示当前分支的历史版本
git log
#显示commit历史,以及每次commit发生变更的文件
git log –stat
#显示某个commit之后的所有改动,每个commit占据一行
git log HEAD –pretty=format:%s
#显示某个文件的历史版本
git log –follow [file]
git whatchanged [file]
#显示指定文件相关的每一次diff
git log –p [file]
#显示最近N次提交信息
git log –n –pretty –oneline
#显示所有提交过的用户,按提交次数排序
git shortlog –sn
#显示指定文件什么人在什么时间修改过
git blame [file]
#显示暂存区和工作区的区别
git diff
#显示n天之内修改了多少代码
git diff –shortstat “@{n day ago}”
#显示当前分支的最近几次的提交
git reflog
G.撤销操作
#恢复暂存区的指定文件到工作区
git checkout [file]
#恢复某个commit的指定文件到暂存区和工作区
git checkout [commit] [file]
#恢复暂存区的所有文件到工作区
git checkout .
#重置暂存区的指定文件与上一次commit保持一致,单工作区不变
git reset [file]
#重置暂存区和工作区,与上一次commit保持一致
git reset –hard
#重置当前分支的指针为指定的commit,同时重置暂存区,单工作区保持不变
git reset [commit]
#重置当前分支的HEAD为指定的commit,同时重置暂存区和工作区,与指定的commit保持一致
git reset –hard[commit]
#将未提交的变化移除
git stash
4.工作流程
https://ourai.ws/posts/working-with-git-in-team/
https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md