GitMercurialSVN
Posted 零君聊软件
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GitMercurialSVN相关的知识,希望对你有一定的参考价值。
有过一定软件开发经验的人对版本控制(version control)一定不会陌生。在众多的版本控制系统中,Git可以说是目前最流行的。本文简要介绍了Git与其它版本控制系统的区别。过几天我会单独撰文着重介绍Git中的几个重要的概念。
SVN是Subversion的简称,是一种集中式的版本控制系统,相对于CVS有了极大的改进。由于SVN采用集中式管理,所以只有服务器上才有代码库(repository),本地只有工作目录(working directory)。如果服务器断开连接,那么就无法继续工作了。
SVN的分支(branch)和标志(tag)本质是相同的,其实都是仓库(repository)的复制而已。分支一般是复制到${ROOT}/branches目录,而标志则是复制到${ROOT}/tags目录。通常的做法是在服务器端完成复制,然后下载到客户端的工作目录中:
$svn copy http://svn.example.com/repos/testprj/trunk \
http://svn.example.com/repos/testprj/branches/mybranch \
-m "Creating my private branch"
$svn checkout http://svn.example.com/repos/testprj/branches/mybranch
注意,这里其实SVN并没有真的拷贝所有数据,而是采用的一种廉价拷贝(Cheap Copies)的机制,只是创建了指向现有的目录树的一个目录项。关于SVN更详细地细节,可以参考下面的链接:
http://svnbook.red-bean.com/en/1.7/svn-book.pdf
Git和Mercurial都是分布式的版本控制系统。两者比较相似,客户端都有仓库的完整镜像,包括完整的历史版本信息。但二者还是有许多区别。
首先,Git主要是C实现的,而Mercurial主要是Python实现的。所以Mercurial的平台支持性更好,也更易于扩展。当然,Git的很多工具也可以用其他语言实现,而且Git也提供了Windows的版本。所以这方面的差异逐步在缩小。
其次,Git支持改写历史,而Mercurial则不允许改写历史。Git提供的rebase机制可以改写历史,这给Git招来一些批评,但同时也给Git带来一定的灵活性。关于rebase,会单独撰文重点介绍。
Git将所有的元数据(metadata)存储在.git目录中,而Mercurial的元数据则是存储在.hg目录中。Git的所有对象都是根据hash值来存储的,目录结构都是按确定的规则来存储,具体参考:
https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
而Mercurial则在.hg/store/data目录里面映射了完整的仓库目录结构。
Git和Mercurial还有一个重要的区别在于,Git的每一次提交(commit)都产生一个commit对象,该对象包含一个指向仓库的一个完整的快照(snapshot)的指针,同时包含指向parent commit对象的指针。而Mercurial中则是changeset的概念,是以revlog的格式来存储差异的,其实本质就是针对某个特定文件的顺序排列的diff。而Git则是将差异存储在pack文件中,存储的是一组文件的差异。
另外,普遍认为Mercurial比Git容易上手,特别是当从SVN切换到Mercurial时更容易。Git的学习曲线稍陡。
表格中的命令对比来自下面的链接,贴在这里供参考:
https://www.atlassian.com/blog/software-teams/mercurial-vs-git-why-mercurial
Subversion (SVN) |
Mercurial (Hg) |
Git |
---|---|---|
svn add | hg add | git add |
svn blame | hg blame | git blame |
svn cat | hg cat | git show |
svn checkout | hg clone | git clone |
svn commit | hg commit ; hg push | git commit -a ; git push |
svn delete/remove | hg remove | git rm |
svn diff | hg diff | git diff, git diff –cached |
svn help | hg help | git help |
svn log | hg log | git log |
svn revert | hg revert | git checkout -f |
svn status | hg status | git status |
svn update | hg pull –update | git pull |
svn move/rename | hg move/rename | git mv |
--END--
以上是关于GitMercurialSVN的主要内容,如果未能解决你的问题,请参考以下文章