gpt4 book ai didi

c# - checkout libgit2sharp 中的子模块

转载 作者:太空狗 更新时间:2023-10-30 01:14:05 25 4
gpt4 key购买 nike

我们发现 git submodule update --recursive -f update 需要相当长的时间(从 Windows 7 中的 .bat 文件运行)并且希望使用编译的 exe(可能是 c# .NET 通过 libgit2sharp)来独立检查每个子模块(有 4 个)。当我们在 cd 进入每个子模块后使用四个顺序 git checkout -f [hash] 命令与运行 submodule update 时,批处理文件速度有明显差异,并且我们想要速度增益。

有人知道如何使用 libgit2sharp 检查子模块的特定提交吗?由于 repo.Submodule["name"] 的 HEAD 属性不可设置,我尝试对此进行创意(将子模块视为它们自己的 repos),但 libgit2sharp 似乎认为它们不是他们自己的 repo...bummer:

        for (int cntr = (int)argumentIndeces.LiquidsId; cntr < (int)argumentIndeces.MethodConfigId; cntr++)
{
Logger.Debug("About to checkout '" + argNames[cntr].Replace('/', '\\') + "' at commit: '" + arguments[argNames[cntr]] + "'");
Repository sub = new Repository(superProjectPath + "\\" + argNames[cntr].Replace('/', '\\') );
Commands.Checkout(sub, arguments[argNames[cntr]]);
Logger.Debug("Checked out '" + argNames[cntr].Replace('/', '\\') + "' at commit: '" + arguments[argNames[cntr]] + "'");
Console.WriteLine("checked out: " + sub.Tags);
}

最佳答案

这借鉴了 olmobrutall 在 Github 上的帖子 (#482) 中的一些想法,但不需要调用已弃用的函数。这只是执行 git reset --hard 而不是获取,因为这更容易实现。

            using (Repository repo = new Repository(repositoryPath))
{
foreach (Submodule submodule in repo.Submodules)
{
String subrepoPath = Path.Combine(repo.Info.WorkingDirectory, submodule.Path);

using (Repository subRepo = new Repository(subrepoPath))
{
Branch remoteBranch = subRepo.Branches["origin/master"];
subRepo.Reset(ResetMode.Hard, remoteBranch.Tip);
}
}
}

编辑:我刚刚意识到我错过了问题的一部分,它要求检查特定的提交。为此,我们可以 check out 一个特定的散列,而不是 check out 一个分支:

string commitHash = "517d9bdc49abf6fff00f4d5330245592e2e138b6";
Commit commit = subRepo.Lookup<Commit>(commitHash);
subRepo.Reset(ResetMode.Hard, commit);

关于c# - checkout libgit2sharp 中的子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com