1

我刚刚从他们的遥控器克隆了一个仓库。

我构建了软件,更改了大约 4 个文件,在本地提交了它们,现在想创建一个可以显示它们的补丁。

当我运行时:

hg diff -U8p abc efg pqr > patch_file

我没有看到我所做的更改。是否hg diff仅将当前文件与最后提交的文件进行比较?

我怎样才能让它工作?

4

4 回答 4

3
  1. diff针对特定修订的工作目录REV,使用

    hg diff -r REV 
    
  2. 要相互比较两个修订版,请使用

    hg diff -r REV1 -r REV2
    
  3. 要确定要比较哪些修订,请检查hg log. 如果您经常这样做并且基本修订版已修复,请给它一个名称(例如whatipulled

    hg tag -r REV whatipulled
    

    然后,您可以指定whatipulled修订版本,而不是数字 rev id(或散列)。

  4. 要以更丰富的格式导出您的差异,包括提交评论等,您还可以使用为此目的设计的以下内容:

    hg export -r REV
    
  5. 还有hg bundle -r REV,它会生成一个包含类似信息的二进制文件。

  6. 但是,如果您要将更改发送回父 repo,最好的方法是使用hg push. 它将您的变更集直接传达给父级;您甚至不需要知道哪些变更集需要推送。当然,您必须有权推送到父 repo。

    hg push [ parent_repo_url ]
    

    (如果您从中拉出,则 mercurial 应该已经知道路径,您可以将其排除在外)。

  7. 如果父 repo 在 bitbucket 上而您没有 pu,则可以在 bitbucket 上设置自己的帐户,从本地 repo 拉/推到该帐户,然后向项目 repo 发出“拉取请求”,询问他们从你身上拉扯。

以上所有选项都有控制其行为的选项,请参阅。

于 2013-02-27T16:49:17.713 回答
2

hg help diff

如果仅指定了一个修订版,则将该修订版与工作目录进行比较

在您的 -r 差异中,您必须在差异之前使用旧提示(最新的“不是您的”变更集)并更新为提示(您的最新变更集)。

如果在您的变更集中修改了某些二进制数据,请不要忘记使用 -g 选项

hg up & hg diff -r <CSET> -g > some.patch

改进了任何活动变更集的差异,无需手动检测基本变更集(对于线性历史 == 在单个分支中)

hg diff -r "parent(min(outgoing()))" -r tip

于 2013-02-24T14:16:31.567 回答
1

默认情况下,hg diff将当前签出的文件与上次提交进行比较。您可以通过添加选项来更改它:

  • -r REV将当前签出的文件与特定修订进行比较REV
  • -c REV显示修订所做的更改REV

所以在你的情况下hg diff -c 123 ...会给你提交 123 的差异。

于 2013-02-24T12:35:44.400 回答
1

我的猜测是这hg outgoing正是您想要的——它将您在本地提交的内容与默认远程服务器上的内容进行比较,并向您显示这些变更集或-p提交的列表。

但是,这确实会分别显示每个变更集。如果您想查看所有更改的组合,您必须这样做,hg diff -r HERE -r THERE或者因为-r HERE这是默认设置,hg diff -r THERE

我看到你在评论中问过“我怎么知道那里有什么”,那里最后一个变更集遥控器,你可以通过hg outgoing. 如果hg outgoing显示它会发送变更集 66、67 和 68,那么您需要将hg diff -r 65已经存在的内容 (65) 与本地的内容 (68) 进行比较。

于 2013-02-24T19:24:50.557 回答