是否可以使用LibGit2Sharp复制使用选项的git命令?
例如,我想使用类似(但不限于)的命令:
git fetch --all -p [fetch all remotes and prune any branches which don't exist]
git merge --ff-only origin/master [fast-forward merges only]
git merge IssueXyz master --no-commit --no-ff
使用合并作为示例,在LibGit2Sharp中,我可以找到的用于合并的唯一方法是:
public MergeResult Merge(Commit commit, Signature merger)
不允许指定选项。
但是在方法的实现中,合并被委托给代理:
GitMergeResultHandle mergeResultHandle = Proxy.git_merge(Handle,
new GitMergeHeadHandle[] { mergeHeadHandle },
opts
其中“opts”是“GitMergeOpts”的硬编码实例,其中“MergeFlags”看起来可用于指定适当的合并行为,如果它不是硬编码的:
internal struct GitMergeOpts
{
public uint Version;
public GitMergeFlags MergeFlags;
public GitMergeTreeOpts MergeTreeOpts;
public GitCheckoutOpts CheckoutOpts;
}
所以我真正想要了解的是如何使用库来复制使用选项的更复杂的git命令?
或者这不是这个库的预期用例,在这种情况下,是否有任何关于我如何在C#代码中执行此操作的建议?
答案 0 :(得分:3)
通常,使用xxxOptions
个对象给出可选参数,例如Network.Fetch
接受FetchOptions
对象,您可以通过设置属性来指定参数。
由于libgit2sharp仍在积极开发中,因此有许多特色需要开发。如果您遇到在libgit2中实现但在libgit2中丢失的功能,您始终可以创建修复它的拉取请求。
关于具体情况:Merge
是libgit2sharp的一个相对较新的功能,目前不支持--ff-only
行为。但是,您可以模拟行为:
bool isFastForward = repo.Commits.FindCommonAncestor(repo.Head.Tip, commitToMerge)
== repo.Head.Tip;
然后只有在isFastForward
为true
时合并。