没有合适的资源?快使用搜索试试~ 我知道了~
“Git很古怪”——使用Subversion的用户说道。那么从Subversion用户的角度来看,Git有哪些古怪之处,或者说特别之处呢?我们将会以连载的方式一一道来。如果您有什么建议和补充,或者想知道Subversion中的某个git对应物,可以在博客后留言…oOSubversion属于集中式的版本控制系统:?每个版本库有唯一一个“官方地址”,每个用户都从这个唯一地址获取代码、数据;Subversion的工作区和版本库截然分开,工作区中的修改要提交到版本库,可能是本机另外一个目录的版本库,也可能是通过网络连接到服务器上的版本库。而Git的工作区和版本库是如影随形的。没有使用过分布式版本控制系
资源推荐
资源详情
资源评论
Subversion用户眼中的用户眼中的Git
目录:
Subversion 用户眼中的 Git (1): 集中式 vs 分布式
Subversion 用户眼中的 Git (2): 版本库, 工作区如影随形
Subversion 用户眼中的 Git (3): 命令集不兼容
Subversion 用户眼中的 Git (4): 全局版本号和全球版本号
Subversion 用户眼中的 Git (5): 没有部分检出
Subversion 用户眼中的 Git (6): stage
Subversion 用户眼中的 Git (7): 完全不同的分支和里程碑的实现
Subversion 用户眼中的 Git (8): SVN没有后悔药,git有好多
Subversion 用户眼中的 Git (9): 单亲 VS 多亲
Subversion 用户眼中的 Git (10): Git 命令行的人性化设计
Subversion用户眼中的 Git (1): 集中式 vs 分布式
“Git 很古怪” —— 使用 Subversion 的用户说道。 那么从 Subversion 用户的角度来看,Git有哪些古怪之处,或者说特别之处
呢? 我们将会以连载的方式一一道来。 如果您有什么建议和补充,或者想知道 Subversion 中的某个 git 对应物,可以在博客
后留言 …oO Subversion 属于集中式的版本控制系统: ?每个版本库有唯一一个“官方地址”,每个用户都从这个唯一地址获取
代码、数据;
获取代码库的更新,也只能连接到这个唯一的代码库,同步以取得最新数据;
提交必须有网络连接(非本地版本库);
提交需要授权,如果没有授权,提交失败;
提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类
冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决
Git 属于分布式的版本控制系统:
众生平等,每个检出(checkout)的版本库,或者更准确的说每个克隆(clone)的版本库都是平等的。 你可以从任何一个版
本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
获取版本库的更新,可以来自任何源。 你可以从张三那里获得上游的改动,包括张三自己的提交;你也可以从李四那里
获得上游的改动,也可能包括李四的提交。
提交完全在本地完成。无须别人给你授权,你的版本库你作主。 当然你在你的版本库中的改动是否别人愿意合并到他们
的版本库则是另外的一回事了。
提交总是会成功,因为提交是在本地进行的么。 甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个
新的分支
冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决]
Subversion的提交竞赛,在多人协作开发时,提交经常被打断。坏的体验 :-(
Git 的每个用户就好像工作在独立的 Feature Branch (功能分支)中
Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库 合并会发生在PULL和
PUSH过程中,不能自动解决的冲突会提示您手工完成
Git 也可以模拟集中式的工作模式
Subversion只有一种集中式的工作模式 所有人都和服务器同步,提交直接到服务器上
Git 也可以模拟集中式的工作模式 ?Git版本库统一放在服务器中
可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库
团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;
团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改
变
Git 的集中式工作模式非常灵活
你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库
你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交
Git提供 rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动
Git 有更多的工作模式可以选择,远非 Subversion可比
Subversion 用户眼中的 Git (2): 版本库, 工作区如影随形
Subversion 的工作区和版本库截然分开,工作区中的修改要提交到版本库,可能是本机另外一个目录的版本库,也可能是通
过网络连接到服务器上的版本库。 而 Git 的工作区和版本库是如影随形的。没有使用过分布式版本控制系统的 Subversion 用
户可能会感到困惑,也可能将如影随形的 .git 目录看作是 Subversion 工作区中的 .svn 目录的等价物,那可就错了…
Git 的版本库和工作区如影随形
Subversion 的工作区和版本库物理上分开:
Subversion的版本库和工作区是存储在不同路径下,一般是在不同的主机中
Subversion的企业级部署中,版本库在服务器上,只能通过 https, http, svn 等协议访问,而不能直接被用户接触到
Subversion的工作区是一份版本库在某个状态下的快照,如:版本库最新的数据检出到工作区
Subversion的工作区中每一个目录下都包含一个名为 .svn 的控制目录(隐藏的目录),该目录的作用是:
标识工作区和版本库的对应关系。参见文件 .svn/entries
包含一份该子目录下检出文件的原始拷贝。当文件改动的差异比较或者本地改动的回退时,可以直接参考原始拷贝
而无须通过网络访问远程版本库
Subversion 的 .svn 控制目录,会引入很多麻烦:
.svn 下的文件原始考本,会导致在目录下按照文件内容搜索时,多出一倍的搜索时间和搜索结果
.svn 很容易在集成时,引入产品中,尤其是 Web 应用。将 .svn 目录带入Web服务器会导致安全隐患。因为一个
不允许目录浏览的Web目录,可以通过 .svn/entries 文件查看到该目录下可能存在的文件,进而 :silly:
Git 的版本库和工作区如影随形,在同一个目录下
最常见的模式是工作区和版本库在一起
工作区的根目录有一个.git 子目录,这个名为 .git 的目录就是版本库本身,千万不要删除噢
工作区中其他文件为工作区文件,可能是从 .git 中检出的,或者要检入的,或者是运行时、临时文件
当然版本库可以脱离工作区而存在,成为 bare(赤裸?)版本库。可以用 --bare 参数来创建
但是工作区不能脱离版本库而存在,即工作区的根目录下必须有一个名为 .git 的版本库克隆
Git 的版本库因为就在工作区中,能直接被用户接触到
用户可以编辑 .git/config 文件,修改配置,增添新的源
用户可以编辑 .git/info/exclude 文件,创建本地忽略…
Git 的工作区中只在工作区的根目录下有一个 .git 目录,此外再无任何控制目录。
像 Subversion的泛滥的 .svn 目录的缺点都不存在
Git 工作区下唯一的 .git 目录是版本库,并非 .svn 的等价物,如果删除了 .git 目录,而又没有该版本库的其他镜像
(克隆)的话,你破坏了整个历史,版本库也永远的失去了。
Git 在本地的 .git 版本库,提供了完全的改动历史
除了和其他人数据交换外,任何版本库相关的操作都在本地完成
更多的本地操作,避免了冗长的网络延迟,大大节省了时间。例如:查看 log,切换到任何历史版本等操作都无须
任何网络操作。
Git的版本库和工作区混在一起,安全么?
本地创建一个Subversion版本库,再在另外的目录检出,心理上感觉很安全。即使工作区删除了,或者工作区所在的分
区格式化了,但是版本库仍在啊。
本地创建一个Git库,因为工作区和库是在同一个目录中,如果工作区删除了,或者所在的磁盘分区格式化了,数据不是
全都没有了么?
其实Git更安全:
第一个办法:在一个磁盘分区中创建版本库(最好是用--bare 参数创建),然后在另外的磁盘分区中克隆一个新的作为
工作区。在工作区的提交要不时的PUSH到另外分区的版本库,这样就实现了本地的数据镜像。你甚至可以在本地创建
更多的版本库镜像,安全性要比Subversion的一个库加上一个工作区安全多了吧。
另外的办法:把你的版本库共享给他人,当他人克隆了你的版本库时,你就拥有了一个异地备份。
Subversion 用户眼中的 Git (3): 命令集不兼容
SVN 用户对 Git 的不好的体验,可能大多来自于两者命令集差异很大,不兼容,感觉非常不习惯。 这其中的一部分原因是因
为 SVN 和 Git 的原理不同,分属不同阵营——集中式和分布式版本控制;另外一个重要的原因,可能就是 Linus Torvals 痛恨
CVS,而且 Torvals 曾经说过的很有争议话,就是他认为 SVN 也是一个失败。所以,Torvals 设计的 Git 当然要特立独行了。
不过…
由于原理不同,导致 SVN 和 Git 不兼容的命令
svn checkout 和和 git clone
这两个命令,都是首次从其他版本库创建本地拷贝时运行的命令,都是只需要执行一次就可以的命令。
“svn checkout” 就是检出,很形象的比喻,subversion 就是要从服务器的版本库建立本地的工作拷贝(工作区)。检出
之后的本地拷贝和版本库有着千丝万缕的联系(每个子目录下的 .svn 目录中的 entries 文件都会标记版本库的地址),
本地提交都要上传到服务器版本库中完成。
“git clone”就是克隆,也是非常形象的比喻。作为分布式版本控制系统,通过克隆创建的本地版本库和远程版本库一模一
样,没有谁比谁更好。克隆之后的本地版本库和源版本库有着一丝联系(在 .git/config 中配置 remote版本库的URL),
这一丝联系,无非是为了不定期的双方分享改动而已。
剩余7页未读,继续阅读
资源评论
weixin_38707153
- 粉丝: 7
- 资源: 949
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功