如何在git项目中包含外部svn存储库?
我正在使用作为项目的版本控制软件。我的项目需要使用第三方代码库,该库使用作为其版本控制软件。(在本例中,第三方代码是一个名为PHP的框架,与问题无关) 是否有一种方法可以在git中设置一个外部依赖项,帮助从外部SVN存储库中提取代码并使其保持最新 如果我的项目使用SVN,那么设置起来就很简单了,因为我只需要执行以下操作:如何在git项目中包含外部svn存储库?,svn,git,svn-externals,Svn,Git,Svn Externals,我正在使用作为项目的版本控制软件。我的项目需要使用第三方代码库,该库使用作为其版本控制软件。(在本例中,第三方代码是一个名为PHP的框架,与问题无关) 是否有一种方法可以在git中设置一个外部依赖项,帮助从外部SVN存储库中提取代码并使其保持最新 如果我的项目使用SVN,那么设置起来就很简单了,因为我只需要执行以下操作: > svn propset svn:externals yii-1.1.6 https://yii.googlecode.com/svn/tags/1.1.6/frame
> svn propset svn:externals yii-1.1.6 https://yii.googlecode.com/svn/tags/1.1.6/framework
…然后,每当我进行
svn签出
(或svn更新
)时,我都会将yii代码库吸入名为“yii-1.1.6
”的本地文件夹中。我可以用git做类似的事情吗?有没有人在公共github回购协议中有我可以复制的例子?我确信这一定是一种常见的需求?您可以对您的svn回购进行git svn克隆,然后将该回购包含到您的主要git回购中,并将其声明为
$ git submodule add -b <branch> <repository> [<path>]
$ git submodule update --remote ...
只需记住:git子模块与svn子模块不兼容,因为它们总是引用固定版本。见:
- “”
- “”
但是,正如我在“”中提到的,自git 1.8.2(2013年3月)以来,您可以通过子模块跟踪回购协议分支的最新情况
$ git submodule add -b <branch> <repository> [<path>]
$ git submodule update --remote ...
$git子模块添加-b[]
$git子模块更新--远程。。。
您也可以将第三方库签出到树中,然后git将其(包括所有.SVN子目录)添加到主项目中
有点脏,但也有点简单和直接
当您需要更新时,只需svn update和git commit。我在工作中遇到了完全相同的情况。我使用SmartGit。我在Git存储库根目录中有.gitsvenxtmodules文件(提交给Git) SmartGit将其显示为指向“”的子模块https://url.of.svn/repository/blah/branches/branch(url+连接的分支值)在版本1234处(如果未指定,则使用头部版本)。fetch+分支+标记类似于.git/config规范 如果您不想在第三方项目的分支之间快速切换(我这样做是因为我也想提交到子模块),请使用类似的方式
[submodule "alternativeSubmodule"]
path = path/to/svn/submodule
url = https://url.of.svn/repository/blah/branches/branch
revision = 1234
branch = /
fetch = :refs/remotes/svn/git-svn
remote = svn
type = dir
更多详细信息请参见.gitsvenxtmodules
对于此配置,SmartGit使用子模块的方式与使用普通Git子模块的方式相同。>“您可以对您的svn repo进行Git svn克隆”-问题是它不是我的svn repo-它是第三方repo。这无关紧要。如果您可以执行
svn签出
您还可以执行git svn克隆
。您可以查看子模块如何更改为能够执行@Matt true,我添加了一个指向此答案的链接(我编写了此链接)。谢谢你提醒我更新这篇文章。听起来很可怕:)同意。有一点很好,因为git只存储相同的文件一次,当您提交签出的SVN repo时,您只需为SVN在签出时复制每个文件支付一次费用(它这样做是为了与原始文件进行比较)。