Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从git日志解析提交树?_Git_Git Log - Fatal编程技术网

如何从git日志解析提交树?

如何从git日志解析提交树?,git,git-log,Git,Git Log,我想只使用git日志输出检索某个repo的提交树。要获取日志,我使用以下命令: git log --parents --all --source --numstat 我的输出如下(只需省略不必要的元数据): 提交E32C46DE36343A0CDA2EAC18B5167C0A2831F4D 55DAE2809B9E84AB2466ADB6CBED0B1A48FBC9 c070bfc4ed1610d12a1500e307f1323ce9f91653参考/来源/某些分支 日期: 提交6d5b6ed

我想只使用git日志输出检索某个repo的提交树。要获取日志,我使用以下命令:

git log --parents --all --source --numstat
我的输出如下(只需省略不必要的元数据):

提交E32C46DE36343A0CDA2EAC18B5167C0A2831F4D 55DAE2809B9E84AB2466ADB6CBED0B1A48FBC9 c070bfc4ed1610d12a1500e307f1323ce9f91653参考/来源/某些分支
日期:
提交6d5b6ed00daea7abbb1643cbdd6d2c9d12b5c10a eb539e82860c8c56d18a57e1121d691484aa62cf参考/标记/一个或多个标记
日期:

正确检索提交树的算法应该是什么

来自
git log
%p
样式父散列提供图形的传出弧,每个提交的散列(
%H
)提供每个顶点的节点ID。使用
git rev list--parents HEAD
可以或多或少地为您提供构建图形所需的最小输入:

89ea799ffcc5c8a0547d3c9075eb979256ee95b8 3505ddecbdd4a2eaf3d2aaea746dc18d7a0b6a6b 5a1f5c3060427375de30d609d72ac032516be4c2
3505ddecbdd4a2eaf3d2aaea746dc18d7a0b6a6b e539a834555583a482c780b11927b885f8777e90
e539a834555583a482c780b11927b885f8777e90 36d75581a4966f5d56403d1a01d60e4dc45a8ab0 00ec50e56d136de41f43c33f39cdbee83f3e4458
36d75581a4966f5d56403d1a01d60e4dc45a8ab0 5066a008bb6a810f908c020de02a646cf3c92f34 049e64aa5024a9fa2fbe6116d413da1ffc7f497a
...
构建图现在很简单:如果你对图算法感兴趣,你可以看到上面的就是你的G=集。换句话说,你已经完成了,你有了集合G。第一列是所有的顶点,第二列和后面的列是所有的外弧


然而,根据您想要解决的问题,绘制图表可能要困难得多。如果
git log--graph
(可能使用
--oneline
)不适合您,您需要更具体一些。

来自
git log
%p
样式父散列提供图形的传出弧,每个提交的散列(
%H
)提供每个顶点的节点ID。使用
git rev list--parents HEAD
可以或多或少地为您提供构建图形所需的最小输入:

89ea799ffcc5c8a0547d3c9075eb979256ee95b8 3505ddecbdd4a2eaf3d2aaea746dc18d7a0b6a6b 5a1f5c3060427375de30d609d72ac032516be4c2
3505ddecbdd4a2eaf3d2aaea746dc18d7a0b6a6b e539a834555583a482c780b11927b885f8777e90
e539a834555583a482c780b11927b885f8777e90 36d75581a4966f5d56403d1a01d60e4dc45a8ab0 00ec50e56d136de41f43c33f39cdbee83f3e4458
36d75581a4966f5d56403d1a01d60e4dc45a8ab0 5066a008bb6a810f908c020de02a646cf3c92f34 049e64aa5024a9fa2fbe6116d413da1ffc7f497a
...
构建图现在很简单:如果你对图算法感兴趣,你可以看到上面的就是你的G=集。换句话说,你已经完成了,你有了集合G。第一列是所有的顶点,第二列和后面的列是所有的外弧


然而,根据您想要解决的问题,绘制图表可能要困难得多。如果
git log--graph
(可能使用
--oneline
)无法为您完成此操作,您需要更具体一些。

既然我们在同一页上,那么“提交树”是什么意思?i、 e.您的目标是实现什么输出?@OliverCharlesworth将“提交树”表示为提交图(如git log--graph output)好吧,那么git log--graph有什么问题吗?既然我们在同一页上,那么“提交树”是什么意思?i、 e.您的目标是实现什么输出?@OliverCharlesworth将“提交树”表示为提交图(如git log--graph output)好的,那么git log--graph有什么问题吗?谢谢您的回答。实际上,我想知道新分支何时被创建并合并到另一个分支。我尝试建立一个图表,并有问题:让我们考虑两个提交:C070BF 55 DAE 97 E2A和E324G 55 DAE C070BF -因为我在正确的方式,在第一次提交后,我们有头在C070BF(合并到55 DAE),第二个是C070BF合并到55 DAE。我不明白如何两次合并到同一个哈希(这两组值-;-假设c070bf有55dae和97e2a作为父项(55dae和97e2a都指向c070bf,所以c070bf是其他两个的合并),e324g有55dae和c070bf作为父项(所以e324g是55dae和c070bf的合并,这本身就是合并)顺便说一句,我要补充的是,
e324g
不是一个有效的Git散列(
g
给出了它)。
e324g
只是一个例子,原始标记当然不包含
g
)。git log表示为graph G=对我很有帮助,谢谢,但现在我正在寻找一种算法来获取特定分支中的所有提交-一条从v1到v2的路径,其中v1和v2具有相同的引用。对于从v1到v2的所有路径,Dijkstra类算法给出了许多结果,我不知道如何区分它们。你有什么想法吗?我不知道你说的“有相同的裁判”是什么意思。如果两个顶点具有相同的节点ID,那么它们实际上只是一个,而不是两个顶点,并且根本不需要任何路径。但是,如果您沿着从v1到v2的输出弧,确实可能有多条路径,在正常使用中,没有什么需要区分的:所有路径都是有效路径;所有这些提交都在两个提交之间。Git增加了一个保证,即每个提交节点的第一个父节点(即从每个子节点到其第一个父节点的第一个传出弧)是合并期间的当前提交。对于非合并[cont]谢谢您的回答。实际上,我想知道新分支何时被创建并合并到另一个分支。我尝试建立一个图表,并有问题:让我们考虑两个提交:C070BF 55 DAE 97 E2A和E324G 55 DAE C070BF -因为我在正确的方式,在第一次提交后,我们有头在C070BF(合并到55 DAE),第二个是C070BF合并到55 DAE。我不明白如何两次合并到同一个哈希(这两组值-;-假设c070bf有55dae和97e2a作为父项(55dae和97e2a都指向c070bf,所以c070bf是其他两个的合并),e324g有55dae和c070bf作为父项(所以e324g是55dae和c070bf的合并,这本身就是合并)顺便说一句,我要补充的是,
e324g
不是一个有效的Git散列(
g
给出了它)。
e324g
只是一个例子,原始标记当然不包含
g
)。git log表示为graph G=对我很有帮助,谢谢,但现在我正在寻找一种算法来获取特定分支中的所有提交-一条从v1到v2的路径,其中v1和v2具有相同的引用。对于从v1到v2的所有路径,Dijkstra类算法给出了许多结果,我不知道如何区分它们。你有什么想法吗?我不知道你说的“有相同的裁判”是什么意思。如果两个顶点具有相同的节点ID,那么它们实际上只是一个,而不是两个顶点,并且根本不需要任何路径。如果你跟随支出