在 Ancestry Path 中查找所有合并
Find all merge in Ancestry Path
在Git中,我可以通过
获得所有需要的提交
git log hash..master --ancestry-path --merges
在 LibGit2Sharp 中是否有等效项?
首先是一些基础知识:
git log topic..master
var filter = new CommitFilter {
SortBy = CommitSortStrategies.Time,
Since = master,
Until = topic,
};
var commitList = repo.Commits.QueryBy (filter);
git log topic..master --merges
var filter = new CommitFilter {
SortBy = CommitSortStrategies.Time,
Since = master,
Until = topic,
};
var commitList = repo.Commits.QueryBy (filter);
var mergeList = commitList.Where (p => p.Parents.Count () >= 2);
现在回答你的问题:
git log topic..master --ancestry-path --merges
ancestry-path =
When given a range of commits to display (e.g. commit1..commit2 or
commit2 ^commit1), only display commits that exist directly on the
ancestry chain between the commit1 and commit2, i.e. commits that
are both descendants of commit1, and ancestors of commit2.
一旦我们有了祖先路径,-merges
就很容易了,因为我们可以过滤超过一个 parent 的提交。获取祖先路径需要一些编码 ;-)
由于在上面的第一个示例中从 commitList
返回的 ICommitLog
包含通过 .Parents
属性 的 DAG(有向无环图),我们需要遍历图表并通过 depth-first 搜索获得“所有简单路径”以查找所有 non-cyclical 路径。一旦你有了所有 simple
路径的列表,只需过滤它的提交>=2
parents.
注意:我已经在一些 C# 项目中完成了此操作,甚至像计算与特定提交相关的 pull-request 这样的简单项目也使用了此 depth-first 祖先。我倾向于远离 Linq 来执行此操作,因为我有 huge
提交列表(我搜索的 sub-DAG 中开始到结束节点之间的 100k+ 个节点)并且还避免了由于堆栈大小而导致的递归方法但是您的 use-case may/will 不同。如果您此时遇到困难,post 另一个关于您的 algorithm/code 问题的问题。
在Git中,我可以通过
获得所有需要的提交git log hash..master --ancestry-path --merges
在 LibGit2Sharp 中是否有等效项?
首先是一些基础知识:
git log topic..master
var filter = new CommitFilter {
SortBy = CommitSortStrategies.Time,
Since = master,
Until = topic,
};
var commitList = repo.Commits.QueryBy (filter);
git log topic..master --merges
var filter = new CommitFilter {
SortBy = CommitSortStrategies.Time,
Since = master,
Until = topic,
};
var commitList = repo.Commits.QueryBy (filter);
var mergeList = commitList.Where (p => p.Parents.Count () >= 2);
现在回答你的问题:
git log topic..master --ancestry-path --merges
ancestry-path =
When given a range of commits to display (e.g. commit1..commit2 or commit2 ^commit1), only display commits that exist directly on the ancestry chain between the commit1 and commit2, i.e. commits that are both descendants of commit1, and ancestors of commit2.
一旦我们有了祖先路径,-merges
就很容易了,因为我们可以过滤超过一个 parent 的提交。获取祖先路径需要一些编码 ;-)
由于在上面的第一个示例中从 commitList
返回的 ICommitLog
包含通过 .Parents
属性 的 DAG(有向无环图),我们需要遍历图表并通过 depth-first 搜索获得“所有简单路径”以查找所有 non-cyclical 路径。一旦你有了所有 simple
路径的列表,只需过滤它的提交>=2
parents.
注意:我已经在一些 C# 项目中完成了此操作,甚至像计算与特定提交相关的 pull-request 这样的简单项目也使用了此 depth-first 祖先。我倾向于远离 Linq 来执行此操作,因为我有 huge
提交列表(我搜索的 sub-DAG 中开始到结束节点之间的 100k+ 个节点)并且还避免了由于堆栈大小而导致的递归方法但是您的 use-case may/will 不同。如果您此时遇到困难,post 另一个关于您的 algorithm/code 问题的问题。