有很多网页中的内容有建议的hackish的方式,使SVN的外部看起来像git的子模块 。 我看过一些报道的区别是什么,但是这似乎并不很基本的:
Git的子模块链接到一个特定的承诺在其他项目的存储库,而SVN:永远的外部获取最新版本。
为什么会出现这种差异使他们如此根本不相容? 是不是有一个合理的默认值,我们可以假设,如大多数的svn:externals的指向,从来没有移动的标签?
有很多网页中的内容有建议的hackish的方式,使SVN的外部看起来像git的子模块 。 我看过一些报道的区别是什么,但是这似乎并不很基本的:
Git的子模块链接到一个特定的承诺在其他项目的存储库,而SVN:永远的外部获取最新版本。
为什么会出现这种差异使他们如此根本不相容? 是不是有一个合理的默认值,我们可以假设,如大多数的svn:externals的指向,从来没有移动的标签?
最根本的区别是合成规则 。
在一个真正的基于组件的方法 ,可以定义一个配置 ,那就是:
标签列表(SHA1的承诺GIT中),您需要为您的项目为“工作”(即“发展”,“编译”,“部署”,...)。
每次提交引用的配置可以帮助你得到所有树木的确切版本。 有没有例外。 该树的每个文件是在由您定义的配置中指定的确切版本。
注意git1.8.2
“混帐子模块”开始学习一种新的模式与远程分支的顶端集成(而不是与此提交记录在上层项目的gitlink整合)。
所以不久(2013年3月),一个子模块可以引用上游HEAD,而不仅仅是一个固定的SHA1。
(1.8.2之前)可以有每个模块只有一个标签/ SHA1。 从一个共同的母公司回购,你不能定义一个模块内的模块。
(但是一个模块,这只是一个外部的Git回购的参考,可以有自己的子模块定义:母公司回购将只参照第一级子模块,这反过来将引用的子模块,它已内承诺)
没有那么在SVN外部 :你可以定义外部目录以及文件外,有或没有它的明确的修订版本。
您可以撰写各种外部性。 例如:
$ svn propget svn:externals calc
third-party/sounds http://svn.example.com/repos/sounds
third-party/skins -r148 http://svn.example.com/skinproj
third-party/skins/toolkit -r21 http://svn.example.com/skin-maker
结果不是一个配置(“一个参考calc
‘),但它定义了确切的‘拼凑’的选择规则的组合物你在目录’需要calc
”
总之,你不能“计算”一个SHA1一个“ calc
”子模块这将是一堆的完全等效svn:external
特性上的“ calc
” SVN目录。
如果您使用SmartGit与SVN仓库使用svn工作:externalls,你不会注意到任何真正的区别。
实际上,唯一真正的区别(至少是唯一的技术差)是SVN允许外部指向HEAD版本(不固定值),Git的子模块没有。 所有其他的差别是,我的意见,微不足道,所以你是对的问这个问题。