如何“挂载”一个github存储库作为另一个存储库的子文件夹?

我有一个名为“foo”的github存储库(或者更确切地说是“myusername / foo”).现在假设我想创建一个名为“bar”的存储库,它使用foo中的代码;我只能制作文件的副本,但我不想需要提取更新 – 我想总是只看到“foo”存储库中的任何内容;并且没有提交“来自foo的更新”.我相信我已经注意到一些存储库,其中子文件夹实际上是单独的存储库;我知道git支持子存储库或其他一些东西.那么,我可以执行这样的“存储库挂载”吗?如果是这样,怎么样?

如果我可以在某个版本或某个分支而不是主分支上安装“挂载”,则可以获得奖励积分

最佳答案
您有两个主要选项来管理git中的子项目.
Git没有任何依赖管理器,最常见的选项如下:

>子模块
>子树

Submodules
allow foreign repositories to be embedded within a dedicated subdirectory of the source tree, always pointed at a particular commit.

git子模块

为了使用子模块,每个文件夹将是一个独立的存储库,并将被管理并存储在不同的位置. Git将检出特定的提交(提交,版本,标记等),并将其用作子模块的HEAD.大多数时候子模块将处于分离的HEAD中.

# once you have a repo simply add it to git 
git submodule add <url>

将预测添加到您的仓库后,您必须初始化并更新它.

git submodule init
git submodule update

从Git 1.8.2开始,新选项–remote被添加

git submodule update --remote --merge

将从每个子模块的上游获取最新的更改,将它们合并,并检查子模块的最新版本.

正如the docs所描述的那样:

--remote

This option is only valid for the update command. Instead of using the superproject’s recorded SHA-1 to update the submodule, use the status of the submodule’s remote-tracking branch.

这相当于在每个子模块中运行git pull.

How do i fix or change code inside the submodule?

使用子模块会将代码放在主项目中作为其内容[新文件夹]的一部分.

将其本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库,如上所述.

这是子模块的示意图 – 项目在另一个项目中,其中每个项目都是一个独立的项目.

enter image description here

git子树

Git子树允许您将任何存储库作为另一个存储库的子目录插入

与子模块非常相似,但主要区别在于管理代码的位置.在子模块中,内容放在一个单独的仓库中,并在那里进行管理,允许您将其克隆到许多其他仓库.

子树将内容作为根项目的一部分进行管理,而不是在单独的项目中.

而不是写下如何设置和理解如何使用它,你可以简单地阅读这篇优秀的文章,这将解释一切.

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

转载注明原文:如何“挂载”一个github存储库作为另一个存储库的子文件夹? - 代码日志