gpt4 book ai didi

Mercurial 文件ID

转载 作者:行者123 更新时间:2023-12-03 06:55:54 24 4
gpt4 key购买 nike

有没有办法获取存储库中文件的不可变文件 ID?

我需要一个在文件重命名后仍然存在的标识符。因此,如果有文件 Test01.txt 并将其重命名为 Test02.txt(使用 TortoiseHG 重命名菜单项或 hg rename 命令)。我想要一些与修订版 1 的 Test01.txt 和修订版 2 的 Test02.txt 相对应的 ID。

最佳答案

Mercurial 不会为文件提供任何 ID。这与 Bazaar 等其他一些系统不同,在 Bazaar 中,每个文件(和目录)都有一个唯一的 ID,该 ID 在文件的整个生命周期内跟随该 ID。

Mercurial 存储库的结构如下:

  • 变更日志中的每个条目都有一个指向
    • list 中的一个条目,每个文件都有一个指向
      • 文件文件日志中的条目

因此,如果您在修订版 0 中添加 Test01.txt,那么您将拥有这样的链

changelog@0 -> manifest@0 -> Test01.txt@0

如果您现在重命名并进行新提交,您将创建一个新的变更日志和 list 条目,并为 Test02.txt 创建一个文件日志:

changelog@1 -> manifest@1 -> Test02.txt@0

新的 Test02.txt 文件日志条目将引用 Test01.txt 条目。这就是 Mercurial 跟踪重命名的方式:

$ hg debugdata Test02.txt 0

copy: Test01.txt
copyrev: 0936f74a58571dd87ad343cc3d6ae8434ad86fc4

test01

因此,您可以讨论的最佳“文件 ID”是原始文件日志中第一个条目的 ID。您可以使用hg debugindex将其挖掘出来:

$ hg debugindex Test01.txt
rev offset length base linkrev nodeid p1 p2
0 0 8 0 0 0936f74a5857 000000000000 000000000000

“nodeid”列为您提供 revlog entries 的 ID。在 Test01.txt 的文件日志中。在这里我们看到该文件的第一个修订版的 ID 为 0936f74a5857。这只是完整 40 个字符 SHA-1 哈希值的一个简短的 12 个字符前缀。如果您需要完整的哈希值,请继续阅读...

“linkrev”告诉您该版本的文件被变更集 0 引用。您可以使用 hg debugdata -c 0 查找该变更日志条目中的数据,但出于我们的目的,正常情况下hg log 命令还有信息:

$ hg log -r 0 --debug
changeset: 0:8e62ecaada0e5ba9efec234d0d9a66583347becf
phase: draft
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
manifest: 0:0537c846cd545da8f826b9d94fdb2fdae457bd07
user: Martin Geisler <mg@aragost.com>
date: Thu Feb 02 09:00:18 2012 +0100
files+: Test01.txt
extra: branch=default
description:
01

我们对 list ID 感兴趣。您现在可以使用以下命令在正确的 list 条目中查找数据:

$ hg debugdata -m 0537c846cd545da8f826b9d94fdb2fdae457bd07
Test01.txt0936f74a58571dd87ad343cc3d6ae8434ad86fc4

文件名和文件日志 ID 之间确实有一个 NUL 字节,但它在您的终端中不可见。您现在拥有 Test01.txt 文件第一个版本的完整文件日志 ID。

您还需要从 Test02.txt 转到 Test01.txt。您可以使用 hg log --followhg debugrename 来实现此目的:使用 hg log 获取有关文件的修订版本,并使用 hg debugrename 查看每个步骤中文件的重命名内容。

关于 Mercurial 文件ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107841/

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