Skip to content

Commit 28acb7a

Browse files
committed
Site updated: 2020-09-18 13:42:20
1 parent f353bb2 commit 28acb7a

File tree

3 files changed

+1
-1
lines changed

3 files changed

+1
-1
lines changed

2020/09/18/pagesvnQuedian/index.html

-18 Bytes
Binary file not shown.

index.html

-18 Bytes
Binary file not shown.

search.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10148,7 +10148,7 @@
1014810148
<p><strong>Subversion的分支/里程碑</strong><br>Subversion轻量级分支和里程碑的实现是通过svn cp命令,即带历史的拷贝就是创建快速创建分支和里程碑的秘籍。<br>Subversion的版本库有特殊的设计,当你复制一个目录,你不需要担心版本库会变得十分巨大—Subversion并不是拷贝所有的数据,相反,它只是建立了一个已存在目录树的入口。这种“廉价的拷贝”就是创建分支/里程碑是轻量级的原因。<br>由于Svn的分支和标签是来自目录拷贝,约定俗成是拷贝在 branches/和tags/目录下。所谓分支,tag等概念都只是仓库中不同路径上的一个对象或索引而已,和普通的路径并没有什么本质的区别,谁也不能阻止在一个提交中同时修改不同分支中的数据。<br>里程碑是对某个历史提交所起的一个别名,作为历史的标记,是不应该被更改的。svn的里程碑要建立到 tags/目录下,要求不要在tags/下的里程碑目录下进行提交。但是谁也阻止不了对未进行权限控制的里程碑的篡改。</p>
1014910149
<p><strong>Git 的轻量级分支和里程碑</strong><br>Git中的分支实际上仅是一个包含所指对象校验和(40个字符长度SHA-1 哈希值)的文件,所以创建和销毁一个分支就变得非常廉价。说白了,新建一个分支就是向一个文件写入41个字节(版本号外加一个换行符)那么简单,自然速度就很快了。 Git的实现与项目复杂度无关,它永远可以在几毫秒的时间内完成分支的创建和切换。这和大多数版本控制系统形成了鲜明对比。</p>
1015010150
<p>Git的分支是完全隔离的,而Subversion则没有。分支本来就应该是相对独立的命名空间,一个提交一般只能发生在一个分支中。在Git中,其内部的对象层级依赖关系或许和SVN类似,但是其工作树的视图表现形式和SVN完全不同。工作树永远是一个完整的分支,不同的分支由不同的head索引去构建,你不可能在工作树中同时获得多个分支的内容。</p>
10151-
<p>  Git使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。<br>  ① 轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。<br>  ② 而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用GNU Privacy Guard (GPG) 来签署或验证。</p>
10151+
<p>Git使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。<br>① 轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。<br>② 而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用GNU Privacy Guard (GPG) 来签署或验证。</p>
1015210152
<p>Git的里程碑是只读的,Git完全遵守历史不可更改这一时空法则。用户不能向git的里程碑中提交,否则里程碑就不是标记,而成了一个分支。当然Git允许用户删除里程碑再重新创建指定到不同历史提交。</p>
1015310153
<p>多分支间的切换<br>SVN中提供了一个功能switch,使用switch可以在同一个工作树上,在不同的分支中进行切换。<br>Git在分支中进行切换使用的命令是checkout。</p>
1015410154
<p><strong>分支与合并</strong><br>Git 和 Svn 的分支实现机制完全的不同,这也直接导致了 SVN 在分支合并中困难重重。尽管在 SVN 1.5 之后,通过 svn:mergeinfo 属性引入了合并追踪机制,但是在特定情况下,合并仍会出现很多困难。</p>

0 commit comments

Comments
 (0)