假设我有一个目录/X/Y,这是一个git存储库.有可能以某种方式git pull从内部调用命令/X,但目标是该/X/Y目录?
编辑:我想我特别想知道:是否可以使用git命令执行此操作,但无需更改目录?
注意:我接受了VonC的答案,因为它比以前的选项更优雅.对于运行Git低于1.8.5的人,请参阅下面的bstpierre的答案.
Git 2.17更新日志描述了此选项:
- 有人介绍了克隆和获取的机制,这又涉及包装和拆包对象,该机器已被告知如何使用
另一个主题引入的过滤机制来省略某些对象。现在
,它知道将生成的包标记为允诺包,以容忍丢失的
对象,为“狭窄”克隆奠定基础。
这个标志准备好使用了吗,还是很有可能很不稳定?有谁知道正确的语法通过?我通过的所有标志都被视为无效的过滤器规范而被拒绝。例如,这些是我尝试按目录过滤的:
git clone file://path --depth=1 --filter '--subdirectory-filter Assets' TestRepo
git clone file://path --depth=1 --filter --subdirectory-filter Assets TestRepo
git clone file://path --depth=1 --filter Assets TestRepo
Run Code Online (Sandbox Code Playgroud) 假设我有一个git submodule并且我想在其上启用稀疏结帐。是否可以这样做并将该文件添加到存储库中以供其他克隆者使用?git 子模块被添加到,/.gitmodules但该子模块的稀疏签出文件位于.git/modules/foo/info/sparse-checkout? 如何配置 git 子模块,以便其他人克隆时--recursive只能获得白名单目录?如何将子模块上的稀疏结帐配置保存到存储库中?
有很多关于稀疏结账的文章和问题。不幸的是我没有找到具体的例子。我想让以下示例工作:
cd ~
mkdir sub && cd $_
git init
mkdir foo && touch $_/foo
mkdir bar && touch $_/bar
git add .
git commit -am "Initial commit"
Run Code Online (Sandbox Code Playgroud)
cd ~
mkdir project && cd $_
git init
git submodule add ../sub sub
git config -f .gitmodules submodule.sub.shallow true
git config -f .gitmodules submodule.sub.sparsecheckout true
echo foo/* > .git/modules/sub/info/sparse-checkout
git commit -am "Initial commit"
git submodule update
cd sub
git checkout .
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望sub文件夹只包含foo/foonot bar。不幸的是它不起作用: …
我需要向我的项目添加一些 JS 库,并且我还希望能够从它的 repo 更新该库(这就是我将它添加为子模块的原因)。但是我只需要将该存储库中的 1 个文件放置在我的 JS 目录中,而库存储库包含测试、coffeescript 源等,我的存储库中不需要这些文件。所以问题是 - 如何不将整个 repo 添加为子模块,而是从中添加单个文件/目录?
我想这在Git Sparse checkouts 的帮助下是可能的,但不确定我是否在正确的方式上......