我无法理解如何只获取上一版本中更改的文件,而不是我使用Clone获得的完整repo。这对于例如部署最后更改的文件非常有帮助。
我该怎么办?
由于
答案 0 :(得分:4)
您无法仅传输某些文件 - 您必须始终在本地拥有完整克隆。所以我建议你做一次,然后逐步拉入变化。
然后,您应该使用hg status
来显示修改后的文件名称。您通常使用hg status
查看哪些文件与工作副本父版本相比发生了变化,但您可以将--rev
传递给状态以查看任意两个版本之间的更改!
所以使用
$ hg status --change tip
查看提示更改集中更改了哪些文件。使用
$ hg pull
$ hg status --rev .:tip
查看在拉动后执行hg update
时将更改哪些文件。更新将带您从当前工作目录parent(由.
表示)到tip
,假设您与tip
位于同一个命名分支上。否则hg update
会将您带到当前分支上的最末端变更集。
答案 1 :(得分:2)
您可以使用hg log
或hg tip
模板获取所有文件名:
hg tip --template '{files}'
或者例如所有文件由changeset 5更改/添加/修改:
hg log -r5 --template '{files}'
您可以阅读有关模板Mercurial: The Definitive Guide, Chapter 11. Customizing the output of Mercurial的更多信息或有关hg help templating`
的简短帮助如果您想对文件执行某些操作,例如grep:
hg tip --template '{files}' | xargs grep foo
小心这会打破包含空格的文件名!
要处理所有类型的文件名,需要更复杂的东西(感谢#mercurial上的mg提示):
我们需要多行样式,假设名为zerosep
的文件包含:
changeset = "{files}"
file = "{file}\0"
然后,您可以使用它来生成\0
个单独的文件名列表,并使用xargs -0
处理它:
hg tip --style zerosep | xargs -0 grep foo
有关其工作原理的信息,请参阅:Listing files on multiple lines
答案 2 :(得分:1)
Martin有正确的方法来获取修订版中已更改文件的列表,我已经提出了他的答案,但只是为了扩展为什么你的问题有点偏离:
在Mercurial中,每个位置都有一个包含所有更改的完整副本。如果您要使用Mercurial部署到您的服务器,那么您必须将所有内容克隆到您的服务器 - 一次。之后,推/拉将仅移动服务器尚未拥有的(压缩)变更集。
如果您不想拥有服务器上的所有内容,那么您需要使用mercurial之外的其他内容进行部署,可能是从Martin显示的状态命令或从{{1}创建的快照中提供的内容}。
就个人而言,我可以在服务器上拥有完整的历史记录,并且只需在服务器上为每个新部署执行hg archive
。它整洁有效。