如何在 git repo 中链接依赖项?

Posted

技术标签:

【中文标题】如何在 git repo 中链接依赖项?【英文标题】:How can I have linked dependencies in a git repo? 【发布时间】:2011-12-10 09:54:21 【问题描述】:

在我的脚本中,我经常使用有自己的存储库的库(我的或其他人的)。我不想在我的 repo 中复制它们,并且每次新版本出来时都会被更新它们。 但是,当有人克隆 repo 时,它应该仍然可以在本地工作并且没有损坏的链接。

关于我能做什么的任何想法?

【问题讨论】:

【参考方案1】:

您可以在 git 中使用子模块来做到这一点。在您的存储库中,执行以下操作:

git submodule add path_to_repo path_where_you_want_it

因此,如果该库的存储库的 URL 为 git://github.com/example/some_lib.git,并且您希望在项目中将其放在 lib/some_lib,则应输入:

git submodule add git://github.com/example/some_lib.git lib/some_lib

请注意,这需要从存储库的***目录中完成。所以不要将cd 放入您首先放置的目录中。

添加子模块后,或每当有人重新签出您的存储库时,您需要执行以下操作:

git submodule init
git submodule update

然后您添加的所有子模块都将在您拥有的同一修订版中签出。

当您想更新到其中一个库的较新版本时,cd 进入子模块并拉取:

cd lib/some_lib
git pull

然后,当您执行git status 时,您应该会在修改后的部分中看到lib/somelib。添加该文件,提交,然后你是最新的。当协作者将该提交拉入他们的存储库时,他们将看到 lib/somelib 已修改,直到他们再次运行 git submodule update

【讨论】:

感谢您的回答,点赞! (明天可能会接受)有没有办法只添加来自另一个仓库的一个文件作为依赖项?还是必须是整个文件夹? 如果您想将其作为子模块进行跟踪(因此,能够轻松地拉入更新),您必须拉入整个存储库。与许多其他 VCS 不同,git 真的只想处理***存储库。 read this 了解子模块的用途以及解决潜在问题的方法。和a discussion about it。 可以说你作为子模块导入你拥有的另一个 repo。您可以通过子模块中的本地更改来更改原始存储库吗?假设您发现了一个错误并需要更新原始版本? 我知道这是一个旧答案,但是可以使用 git submodule update --remote 更新 git 子模块,但我建议使用更多标志,但对于更复杂的项目。我用git submodule update --remote --recursive --init

以上是关于如何在 git repo 中链接依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

NPM 依赖关系 - Git Repo 中的文件夹?

如何在 subversion repo 中包含 Ivy 依赖项

如何在 Maven 中为依赖项指定存储库

如何将文件夹从 git repo 链接到另一个 repo?

AWS CodeBuild 和 CodeCommit 存储库作为 npm 依赖项

如何将 go.mod 中的 Go 模块依赖项指向 repo 中的最新提交?