gpt4 book ai didi

git - 如何查看一个Git Repository中DAG的数量以及每个DAG关联的分支?

转载 作者:行者123 更新时间:2023-12-04 00:18:51 25 4
gpt4 key购买 nike

我知道您可以通过将 --orphan 选项传递给 git-checkout 在 Git 中创建孤立分支,这有效地在您的 Git 存储库中创建了两个独立的 DAG,因为孤立分支不是连接到主要分支的历史;但是,如果创建了多个孤立分支,是否有任何方法可以计算出给定 repo 中有多少 DAG?

此外,有没有办法找出存储库中的哪些分支(head refs)指向哪个 DAG?也就是说,您能否根据分支所指向的提交所属的 DAG 对分支进行分组?

这个问题是假设性的而不是实际的,因为我不需要做这样的事情,但我还是很好奇。

最佳答案

git rev-list --all --max-parents=0

会找到所有的根。

git log --all --ancestry-path ^$root --pretty=%D --simplify-by-decoration

将找到追溯到任何特定根的所有引用(要获得机器可读,您需要进行一些抓取,最紧凑的 GNU 将是 awk 1 RS='\n+| -> |, ' )。

所以这会将追溯到每个根的提示集转储到 tips-$root:

roots=`git rev-list --all --max-parents=0`
for root in $roots; do
git log --all --ancestry-path ^$root --pretty=%D \
| awk 1 RS='\n+|, | -> ' >tips-$root
done

这就是问题的特定于 git 的部分,剩下的就是从这些集合中识别不相交的图。任意两个提示集中的共同元素加入图表,

A--\     tools
*---B master
C--/ doc-html

有三个提示,toolsdoc-html 不共享根,但它们的每个图表都连接到 master 提示,只有如果你看一下整个事情,这里有一个连接的 DAG。 sort Tips-*|uniq -c|sort -n|tail -1 会告诉你连接到任何一个tip的最大根数,echo $roots|wc -w 会告诉你有多少根,如果它们匹配,你就有一个加入的历史,如果它们不匹配,你还有工作要做。

在任何类型的工业规模上,我都会阅读关于识别不相交集的图论书籍,但增量 merge 暂时不相交集的列表对于轻型任务来说似乎足够有效,在这种情况下,这意味着“可能一切”,它适用于基本的 unix 工具。对于真正的一次性,您甚至不需要 awk ,只需一个普通的旧 shell 脚本,其中包含跟踪集合的 shell 数组。 isdisjoint() { return $(( 0 == `sort $*|uniq -d|wc -l` )); } 之类的。

关于git - 如何查看一个Git Repository中DAG的数量以及每个DAG关联的分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com