我需要向我的项目添加一些 JS 库,并且我还希望能够从它的 repo 更新该库(这就是我将它添加为子模块的原因)。但是我只需要将该存储库中的 1 个文件放置在我的 JS 目录中,而库存储库包含测试、coffeescript 源等,我的存储库中不需要这些文件。所以问题是 - 如何不将整个 repo 添加为子模块,而是从中添加单个文件/目录?
我想这在Git Sparse checkouts 的帮助下是可能的,但不确定我是否在正确的方式上......
要添加到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确实允许将几个文件拉入子模块。