我有一个名为" foo"的github存储库(或者更确切地说," myusername / foo")。现在假设我要创建一个名为" bar"的存储库,它使用foo中的代码;我可以复制一些文件,但我不想要提取更新 - 我想总是只看到" foo"中的任何内容。存储库现在;并且没有提交foo"的更新。我相信我已经注意到一些存储库,其中子文件夹实际上是单独的存储库;我知道git支持子存储库或其他一些东西。那么,我可以执行这样的"存储库安装"?如果是这样,怎么样?
如果我可以拥有" mount"在特定版本或某个分支,而不是主人
答案 0 :(得分:4)
您有2个主要选项来管理git中的子项目 Git没有任何依赖管理器,最常见的选项如下:
<强>
Submodules
强>
允许外部存储库嵌入源树的专用子目录 中,始终指向特定的提交。
git submodule
强> 为了使用子模块,每个文件夹将是一个独立的存储库,并将被管理并存储在不同的位置。 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
fetch
每个子模块中上游的最新更改 merge them in
和 check out
子模块的最新版本。
正如the docs所描述的那样:
--remote
此选项仅对更新命令有效。不使用超级项目记录的SHA-1来更新子模块,而是使用子模块的远程跟踪分支的状态。
这相当于在每个子模块中运行git pull。
如何在子模块中修复或更改代码?
使用子模块会将代码放在主项目中作为其内容 [新文件夹] 的一部分。
在文件夹中本地使用它或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库,如上所述。
这是子模块的一个例子 - 项目在另一个项目中,每个项目都是一个独立的项目。
git subtree
强> Git子树允许您将任何存储库作为另一个存储库的子目录插入
与submodule
非常相似,但主要区别在于管理代码的位置。在子模块中,内容放在一个单独的仓库中,并在那里进行管理,允许您将其克隆到许多其他仓库。
subtree
正在将内容作为根项目的一部分进行管理,而不是在单独的项目中。
不是写下如何设置它并理解如何使用它,你可以简单地阅读这篇能够解释它的优秀文章。
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/
答案 1 :(得分:2)
除了子模块和子树之外,根据您的特定需求,您可能还希望拥有另一个没有任何逻辑和管理的存储库。
在这种情况下,您可以将另一个存储库放在子目录中,并将该子目录添加到.gitignore
文件中。
E.g。
RepositoryA/
- .gitignore (first option)
- SomeDir/
- .gitignore (second option)
- RepositoryB/
.gitignore(第一个选项)
添加其中一项:
SomeDir/RepositoryB/
**/RepositoryB/
.gitignore(第二个选项)
添加:
RepositoryB/
正如我所说,这种方式不会添加任何逻辑/管理。它只是允许您使用来自两个存储库的任何修订而不会发生任何冲突。