我保留了同一个源代码树的两个副本:一个是“工作副本”,另一个是“存储副本”。当我完成编辑“工作副本”时,我刷新“存储副本” rsync
(仅复制修改的文件,此外,工作副本中已删除的文件也将在存储的文件中删除)。还有一个单片机,但它发生在“存储副本”之后,所以我们可以忽略这里的单片机。
但是现在我想在从“工作副本”刷新到“存储”副本时应用代码美化器。代码美化器可以通过标准输入/标准输出重定向应用,但是,AFAIKrsync
不允许在执行复制时通过标准输入/标准输出过滤器。
我只想美化修改后的文件,因为我不想修改“存储副本”中未更改文件的时间戳。“工作副本”和“存储副本”的美化规则不同,因此不能对工作副本应用美化器。
我怎样才能做到这一点?任何适用于 UNIX 的解决方案都是可以接受的,尽管我更喜欢 Bourne shell 脚本或 C 程序。如果rsync
可以以某种特殊的方式使用它,那也很好。
鉴于问题和评论中解释的限制,我将首先消除用于工作副本和存储副本的样式指南之间的差异。但是,我知道这可能非常困难,因此请随意忽略该建议。
我不认为
rsync
(即,在复制文件时过滤文件)是在提交“存储的副本”之前尝试应用“美化”的正确位置。如果您可以使用 SCM,我会搭载它;例如,使用git
, 之后rsync
:将
beautifier
在所有更改的文件上运行,假设它可以在作为参数给出的文件上运行。如果您不能(或不会)使用 SCM,您可以使用
rsync
日志(请参阅--log-file
和--log-file-format
选项)找出rsync
复制的内容,并仅在这些文件上运行美化器。如果
rsync
日志不能被利用,还有另一种方法可以解决这个问题:对“存储副本”中的每个文件运行美化器,输出到临时文件,并将输出与原始文件进行比较。如果美化更改了文件,请将输出复制回原始文件。