[英]git sparse checkout with multiple repositories
我想创建一个从两个存储库中借用的项目,很少签出。 然而,“${GIT_REPO}/info/sparse-checkout”的格式只引用了一个路径,而不是一个树状或以 repo 为中心的路径。 因此,我似乎无法在此稀疏结帐文件中引用特定分支,例如: repo::branch:~/path
因此以下对我来说不适用于多个回购:
git config core.sparseCheckout true
git remote add -f repo1 git://...
git remote add -f repo2 git://...
echo "path/within_repo/to/desired_subdir/*" > .git/info/sparse-checkout
git checkout [<tree-ish>]
... "${GIT_REPO}/info/sparse-checkout" 的格式只引用了一个路径
确实如此。
git 远程添加 -f repo1 git://...
存储库(和远程名称)不相关; 所有重要的是提交。
因此,我似乎无法引用特定的分支......
分支名称也无关紧要。 分支名称随时间移动和变化; 提交 hash ID 没有。 任何时候您想要完全具体地了解某个特定的提交,请使用它的 hash ID。
如果稀疏签出文件可以基于提交可能会很好,但它不能——至少不容易。 你可以:
git show commit-specifier : path
);$(git rev-parse --git-dir)/info/sparse-checkout
; 和如果文件在给定的提交中不存在,则可能带有回退的默认稀疏签出文件。
由于提交 hash ID 唯一标识正确的提交,将文件放入专用分支的一种方法是:
sparse-info
git worktree add
)来创建一个存放这些文件的区域; 然后要添加一个新文件,您需要移动到正确的位置,链接或复制稀疏的结帐数据, git add
文件,然后git commit
结果。
或者,您可以在没有分支的情况下完成所有这些操作,只需在正常工作树之外的专用工作区。
最后,考虑为稀疏检出文件和过滤器编写自己的格式。 然后只需运行您的过滤器生成器即可创建所需的$GIT_DIR/info/sparse-checkout
内容。
从托雷克的回答:
将其内容写入
$(git rev-parse --git-dir)/info/sparse-checkout
确保使用 Git 2.37(2022 年第三季度):“ git show:<path>
” ( man )学会了更好地使用稀疏索引功能,因为rev-parse
。
请参阅Derrick Stolee ( derrickstolee
) 的 commit 124b05b 、 commit 4925adb 、 commit 561287d 、 commit a37d144 、 commit a9e0a49 (2022 年 4 月 26 日)。
(由Junio C Hamano -- gitster
--在提交 acdeb10中合并,2022 年 5 月 20 日)
rev-parse
: 与稀疏索引集成签字人:Derrick Stolee
'
git rev-parse
' ( man )内置函数并不明显会使用稀疏索引,但可以使用“:<path>
”语法从索引中解析路径。
The 'git rev-parse
' output is only the OID of the object found at that location, but otherwise behaves similarly to 'git show:<path>
' ( man ) .
这包括目录的失败条件和取决于路径是否在工作树中的错误消息。唯一需要更改的代码是更改
builtin/rev-parse.c
中的command_requires_full_index
设置,我们可以重复使用许多现有的 'git show
' 测试用于 rev-parse 案例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.