GIT:仅将远程存储库中的一些文件添加为子模块

SET*_*SET 2 git

我需要向我的项目添加一些 JS 库,并且我还希望能够从它的 repo 更新该库(这就是我将它添加为子模块的原因)。但是我只需要将该存储库中的 1 个文件放置在我的 JS 目录中,而库存储库包含测试、coffeescript 源等,我的存储库中不需要这些文件。所以问题是 - 如何不将整个 repo 添加为子模块,而是从中添加单个文件/目录?

我想这在Git Sparse checkouts 的帮助下是可能的,但不确定我是否在正确的方式上......

Von*_*onC 6

要添加到Abizern答案(已投票),您可以声明您的子模块(设置为包含所需文件的分支)以遵循该分支git submodule手册页):

git submodule add -b yourSubmoduleBranch /url/to/your/submodule/repo
Run Code Online (Sandbox Code Playgroud)

如果您已经添加了子模块,但没有-b,您可以轻松添加该选项:请参阅“ Git 子模块:指定分支/标签”。

# Make sure your submodule is actually at the latest of that branch:
cd path/to/your/submodule
git checkout -b branch --track origin/branch
# record that on the parent repo
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
git add yourSubmodule
git commit -m "Submodule now follows branch"
Run Code Online (Sandbox Code Playgroud)

现在,您需要在父存储库级别上为子模块反映最新的修改:

git submodule update --init --remote --recursive
Run Code Online (Sandbox Code Playgroud)

正如frmbelz评论中指出的那样,我2018 年的答案使用info/sparse-checkoutorgit clone --filter确实允许将几个文件拉入子模块。


Abi*_*ern 5

这是可能的,我已经做过很多次了。

您需要做的就是创建要添加为子模块的存储库的一个分支,并去掉所有不需要的代码,然后使用该分支添加子模块。

举个例子,看看这个存储库