更新2:[更新1在帖子的末尾)
我终于设法结帐了,这是个好消息;)。
坏消息是:一次提交需要 2 分 36 秒。如果我是这个程序的用户,我不会等那么久......
与往常一样,“git”是存储库的一个实例,包含存储库......接下来我的结帐电话:
git.Checkout(bss.getCommit(), CheckoutModifiers.Force, (path, completed, total) =>
{ // Update progressbar
progressBar1.Maximum = total;
progressBar1.Value = completed;
}, null);
如果您需要完整的源代码(99% 未注释),请询问,我会将当前版本放到网上....感谢您的回答 :)
你的,
弗洛里安·赖辛格
原帖:
标题说明了一切 ;) 什么是有效的:我有一个Commit[] 步骤,其中充满了来自 repo 的提交我想在 "i" git == Lib2Git Repo 位置签出提交
git.Checkout(steps[i]);
由于什么都没发生,我停止了程序。我确实输出了提交的数量,从 30 下降到 1....我真的需要帮助...
PS:我知道有过载
Checkout(Commit,CheckoutModifiers,CheckoutNotificationOptions, LibGit2Sharp.Handlers.CheckoutProgressHandler)
最后一件事是代表。所以我猜这个问题可以描述为“如何使用委托,虽然我不确定,但这将有助于解决从 30 次提交到 1 次提交的问题......
编辑:
更长的源代码。我想使用 C# 和 libgit 实现 bisect GUI.... 代码 1) 获取 Commit[] 步骤
List<BisectStep> bss = new List<BisectStep>();
ICommitLog commits = git.Branches["master"].Commits;
foreach (Commit c in commits)
{
bss.Add(new BisectStep(c));
}
steps = bss.ToArray();
用同样的方法,然后是 Bisect 的东西。我用 Commit 和一个表示特定值的 int 创建了一个 BisectStep 类......
// Test oldest (Has to be GOOD)
int i = steps.Length;
int r = BisectStep.Result.SKIP;
try
{
while (r == BisectStep.Result.SKIP || r == BisectStep.Result.NOTSET)
{
i--;
r = doStep(steps[i]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
LastKnownWorking = i;
if (r != BisectStep.Result.GOOD)
{
MessageBox.Show("Problem can't be bisected!", "Out of range");
return;
}
r = BisectStep.Result.SKIP;
i = -1;
// Test latest (Has to be BAD)
try
{
while (r == BisectStep.Result.SKIP || r == BisectStep.Result.NOTSET)
{
i++;
r = doStep(steps[i]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
FirstKnownNotWorking = i;
//Test rest
最后但并非最不重要的 doStep 方法
private int doStep(BisectStep bss)
{
git.Checkout(bss.getCommit(), CheckoutModifiers.Force, null, null);
// Checkout
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo(System.IO.Path.Combine(new string[] { tb_ondisk.Text, "instdir", "program", "soffice.exe" }));
if (System.IO.File.Exists(p.StartInfo.FileName))
p.Start();
else
return BisectStep.Result.SKIP;
GBS form = new GBS();
DialogResult dr = form.ShowDialog();
int result = int.MaxValue;
while (!p.HasExited)
MessageBox.Show("Please close LibreOffice to continue!", "Close LibreOffice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
switch (dr)
{
case (DialogResult.Yes):
result = BisectStep.Result.GOOD;
break;
case (DialogResult.No):
result = BisectStep.Result.BAD;
break;
case (DialogResult.Ignore):
result = BisectStep.Result.SKIP;
break;
}
bss.setResult(result);
return result;
}
“GBS”是一个带有 3 个按钮(好、坏、跳过)的 Win-Form
希望这个编辑只是一点点帮助;)