SVN:GIT中的外部等价物?

我有两个使用svn:externals的 SVN项目。

我怎样才能在GIT中具有相同的存储库布局结构?

Git有两种类似的方法,但不完全等同于svn:externals:

  • 子树合并将外部项目的代码插入到您的仓库中的一个单独的子目录中。 这有一个详细的过程来设置 ,然后是其他用户很容易,因为它是自动包括在存储库检出或克隆。 这可以是一个方便的方法来在你的项目中包含一个依赖项。
    很容易从其他项目中获取更改,但是很难将更改提交回来。 而如果另一个项目必须从你的代码中合并,那么项目历史就会被合并,这两个项目就会成为一个项目。

  • Git子模块 ( 手动 )链接到另一个项目库中的特定提交,就像svn:带有-r参数的外部参数一样。 子模块易于设置,但所有用户都必须pipe理子模块,这些子模块不会自动包含在结帐(或克隆)中。
    尽pipe将更改提交给其他项目很容易,但如果回购已经改变,则这样做可能会导致问题。 因此,将改变提交回正在积极开发的项目通常是不适当的。

正如我在“ Git submodule新版本更新 ”中所提到的,你可以用git1.8.2子模块实现同样的svn外部特性

 git config -f .gitmodules submodule.<path>.branch <branch> 

这足以使子模块遵循分支(如在子模块上游回购的远程分支的最新提交中)。 所有你需要做的是:

 git submodule update --remote 

这将更新子模块。

更多细节请参见“ git submodule tracking latest ”。

将现有的子模块转换为跟踪分支
请参阅“ Git子模块:指定分支/标记 ”中的所有步骤。

你应该看看git子模块 ,它应该几乎准确地find你想要的。

对于最新版本的git,我build议阅读官方git文档中的git子模块