繁体   English   中英

git 具有多个存储库的稀疏签出

[英]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 )来创建一个存放这些文件的区域;
  • 通过提交 hash ID 命名文件。

然后要添加一个新文件,您需要移动到正确的位置,链接或复制稀疏的结帐数据, 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 124b05bcommit 4925adbcommit 561287dcommit a37d144commit 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM