是否可以从裸 git 存储库执行并行“git checkout”操作?

问题描述 投票:0回答:1

我们维护主 Git 服务器的克隆,用于扫描和索引内容。我们的“克隆”是裸 git 存储库的集合。

当我们开始执行其中一个周期时,每个裸存储库都会通过

git fetch
操作进行更新。自上次扫描以来收到提交的任何分支都会 git
checkout
到工作目录。这允许我们拥有代码的多个副本(工作树),每个副本位于不同的分支上,可用于处理,同时维护 git 存储库的单个副本。我们的处理完成后,工作树就会被清理。

我们有一些非常活跃的大型存储库,其中

checkout
操作可能需要三十分钟以上。如果有 10 个要扫描的分支,则按顺序检出它们:
git --work-tree=/path/to/repo.git --git-dir=/work/path/branch1 checkout -f branch1
,然后是
git --work-tree=/path/to/repo.git --git-dir=/work/path/branch2 checkout -f branch2
,等等(请注意,我们使用不同的提交 ID 而不是分支,但概念成立!)需要顺序操作因为 git checkout 在裸存储库中创建了一个 index.lock 文件。这可能需要(10 个分支 * 30 分钟)五个小时以上。

有什么方法可以绕过index.lock文件来并行化签出操作?

git version-control git-bare
1个回答
0
投票

git worktree add
命令将允许并行操作。当你

git clone --bare <URL> repo.git
cd repo.git

然后

git worktree add ../repo-branch1 branch1

git worktree add ../repo-branch2 branch2

可以并行执行。

© www.soinside.com 2019 - 2024. All rights reserved.