我有一个项目,我被迫使用 ftp 作为将文件部署到实时服务器的方法。 我正在 Linux 上进行开发,所以我编写了一个 bash 脚本来备份 ftp 服务器的内容, 删除 ftp 上的所有文件,并从 Mercurial 存储库上传所有新文件。 (并处理用户上传的文件和文件夹,并进行部署后更改等)
它运行良好,但项目开始变得足够大,导致部署过程太长。
我想修改脚本来查找哪些文件已更改,并仅部署修改后的文件。 (备份很好 atm)
我使用 Mercurial 作为版本控制系统,所以我的想法是以某种方式请求两个版本之间更改的文件,迭代更改的文件, 并上传每个修改的文件,并删除每个删除的文件。
我可以使用 hg log -vr rev1:rev2
,并从输出中,我可以使用 grep/sed/etc 切出更改的文件。
两个问题:
我听说过解析 ls 的输出会导致疯狂的恐怖故事,所以我的猜测是这同样适用于这里, 如果我尝试解析 hg log 的输出,变量将经历分词和各种转换。
hg log
没有告诉我文件被修改/添加/删除。修改和删除的文件之间的区别是最少的。
那么,正确的方法是什么?我使用 yafc 作为 ftp 客户端,以防需要,但愿意切换。
最佳答案
您可以使用自定义样式来为您进行解析。
hg log --rev rev1:rev2 --style mystyle
然后将其通过管道传递给 sort -u
以获取唯一的文件列表。文件“mystyle”将如下所示:
changeset = '{file_mods}{file_adds}\n'
file_mod = '{file_mod}\n'
file_add = '{file_add}\n'
模组和添加模板是修改或添加的文件。对于已删除的文件,有类似的 file_dels
和 file_del
模板。
或者,您可以使用 hg status -ma --rev rev1-1:rev2
在修改之前添加一个 M 或 A/添加的文件。您需要传递一个不同的修订范围,比 rev1 小一个,因为它是自该“基线”以来的状态。删除的文件类似 - 您需要 -d 标志,并在每个删除的文件之前添加 D。
关于bash - 从 shell 脚本增量部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071286/