更新2:[帖子末尾的更新1)
我终于设法结帐了 这是好消息;)。
坏消息是:单次提交需要2分36秒。如果我是这个节目的用户,我就不会等那么久......
“git”一如既往的Repository实例,包含repo ...接下来我的结帐电话:
git.Checkout(bss.getCommit(), CheckoutModifiers.Force, (path, completed, total) =>
{ // Update progressbar
progressBar1.Maximum = total;
progressBar1.Value = completed;
}, null);
如果您需要完整的来源(99%未注释),请询问,我会将当前版本放在网上....感谢您的回答:)
此致,
Florian Reisinger
标题说明了一切;) 工作原理: 我有一个来自回购提交的提交[]步骤 我想在“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)获取提交[]步骤
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做了一个BisectStep类,用一个表示特定值的int ....
// 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
希望这个编辑有点帮助;)
答案 0 :(得分:3)
两种版本的Checkout方法都会执行结帐操作。 Checkout方法的第二种风格(与代理人)将另外报告进度。您可以在Checkout测试https://github.com/libgit2/libgit2sharp/blob/vNext/LibGit2Sharp.Tests/CheckoutFixture.cs#L391中看到(一个简单的)示例。
注意:您是否会向我们提供更多背景信息,我很乐意更新此信息,以便更好地回答您的问题。