【发布时间】:2022-06-30 16:57:32
【问题描述】:
Libgit2sharp 有很大的潜力,但是在常规 git 中非常简单的一些东西在库中复制起来绝对是一团糟
git reset --hard
就是其中之一。一个简单的 3 字命令,在 Libgit2sharp 中没有真正的等价物,因为那里的重置命令至少需要您要重置的提交,“真正的”git reset --hard 自动收集的东西
【问题讨论】:
标签: c# git libgit2sharp
Libgit2sharp 有很大的潜力,但是在常规 git 中非常简单的一些东西在库中复制起来绝对是一团糟
git reset --hard
就是其中之一。一个简单的 3 字命令,在 Libgit2sharp 中没有真正的等价物,因为那里的重置命令至少需要您要重置的提交,“真正的”git reset --hard 自动收集的东西
【问题讨论】:
标签: c# git libgit2sharp
以下代码尽可能接近地复制常规命令行 ````git reset --hard```。它动态查找我们要重置的跟踪上游分支,然后找到两个分支分歧的“基础”提交,然后重置为那个。
花了我几天的时间和很多错误(其中一些只出现在非常特定的设置中,当我一开始对上游分支名称进行硬编码时)
{
try {
using (var repo = new Repository(localRepoPath))
{
var trackedBranch = repo.Head.TrackedBranch;
Commit originHeadCommit = repo.ObjectDatabase.FindMergeBase(repo.Branches[trackedBranch.FriendlyName].Tip, repo.Head.Tip);
repo.Reset(LibGit2Sharp.ResetMode.Hard, originHeadCommit);
}
}catch(Exception e)
{
System.Diagnostics.Trace.TraceError("Error when resetting the local GIT repo, a git pull will be attempted next: " + e.Message + " \b" + e.StackTrace);
return false;
}
return true;
}
【讨论】: