bash - 从 shell 脚本增量部署

标签 bash deployment mercurial

我有一个项目,我被迫使用 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_delsfile_del 模板。

或者,您可以使用 hg status -ma --rev rev1-1:rev2 在修改之前添加一个 MA/添加的文件。您需要传递一个不同的修订范围,比 rev1 小一个,因为它是自该“基线”以来的状态。删除的文件类似 - 您需要 -d 标志,并在每个删除的文件之前添加 D

关于bash - 从 shell 脚本增量部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071286/

相关文章:

bash - 用\quotation 和\quote 替换引号

node.js - 使用 --experimental-specifier-resolution=node 时如何让 yargs 自动完成工作

deployment - GitLab CI - 在无休止的挂起状态中构建项目

iOS 应用程序 : Rejected in AppStore to external testers

bash - 从日志文件中提取关键字

bash - 与预定义的顺序优先级并行运行 bash 作业

java - 无法在 Jelastic 5.4 版上通过 Deploment Manager 将 WAR 文件部署到 Tomcat

Eclipse - Maven 和 Mercurial

mercurial - 在 Mercurial 中 merge 时排除文件

java - 与 MercurialEclipse merge 有冲突,在命令行 merge 时会自动解决