0

我想创建一个从两个存储库中借用的项目,很少签出。然而,“${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>] 
4

1 回答 1

1

... "${GIT_REPO}/info/sparse-checkout" 的格式只引用了一个路径

确实如此。

git 远程添加 -f repo1 git://...

存储库(和远程名称)不相关;所有重要的是提交。

因此,我似乎无法引用特定的分支......

分支名称也无关紧要。分支名称随时间移动和变化;提交哈希 ID 没有。任何时候你想完全明确某个特定的提交,使用它的哈希 ID。

如果稀疏签出文件可以基于提交可能会很好,但它不能——至少不容易。你可以:

  • 将文件放入提交本身,或一些专用的提交或分支;
  • 从提交中提取所需的稀疏签出文件(例如,);git show commit-specifier:path
  • 将其内容写入$(git rev-parse --git-dir)/info/sparse-checkout;和
  • 运行所需的结帐

如果文件在给定的提交中不存在,则可能带有回退的默认稀疏签出文件。

由于提交哈希 ID 唯一标识正确的提交,将文件放入专用分支的一种方法是:

  • 选择一个分支名称,例如,sparse-info
  • 使用各种管道工具(或者,更简单的git worktree add)来创建这些文件所在的区域;
  • 通过提交哈希 ID 命名文件。

然后要添加一个新文件,您需要移动到正确的位置,链接或复制稀疏的结帐数据、git add文件和git commit结果。

或者,您可以在没有分支的情况下完成所有这些操作,只需在正常工作树之外的专用工作区。

最后,考虑为稀疏检出文件和过滤器编写自己的格式。然后只需运行您的过滤器生成器即可创建所需的$GIT_DIR/info/sparse-checkout内容。

于 2019-10-16T01:16:13.627 回答