gzip和git diff和s3

时间:2015-11-01 21:50:42

标签: git bash jenkins

我需要获取自上次部署以来已更改的文件列表(git diff),gzip这些文件,并将这些文件发送到S3。我需要获取所有的css文件并对它们进行gzip,然后我需要获取所有的html文件,gzip它们以及所有的JS文件并对它们进行gzip。只有自上次提交后它们发生了变化。

我可以轻松地从上次部署中获取提交哈希值。我也有当前部署的提交哈希。

这是我拥有gzips所有css文件的代码。我想修改此代码只能gzip所有已更改的css文件

find . -iname '*.css' -exec gzip -9 {} \; -exec mv {}.gz {} \;

这是我必须同步所有html文件的示例代码(我有css,js,html文件的单独的aws sync命令,因为我需要不同的内容类型和内容编码以及缓存参数)。我想修改此代码只是为了同步更改的html文件

aws s3 sync . s3://test --content-type "text/html" --cache-control "max-age=31536000" --exclude "*" --include "*.html"

如何将此代码绑定到git diff?要仅对已更改的文件进行gzip操作?并且只有aws同步已经改变的文件(git diff返回的文件列表中的文件)?

另外,我想将git diff返回的一些文件复制到一个单独的目录中。例如,images / folder中的所有文件都需要复制到StaticAssets /目录。如何获取已更改且位于images文件夹中的文件列表并将其复制到单独的文件夹中?

我想用bash来做这件事。

所以我知道我可以使用git diff --name-only命令。我的问题是,如何在bash中使用该命令来执行以下操作:

  • gzip所有更改 css文件,Gzip所有已更改的js文件,分别gzip所有已更改的html文件(请注意,css文件可能位于另一个目录中的目录中)。我需要检索父目录中的所有css文件。因此,如果父目录具有文件夹测试,并且该文件夹具有另一个名为test1的文件夹,其中包含名为test.css的css文件,我需要能够gzip该css文件,即使它的2个目录已经下来
  • AWS同步所有已更改的 js文件,AWS分别同步所有已更改的css文件
  • 已更改且位于images /文件夹中的文件复制到另一个目录

2 个答案:

答案 0 :(得分:0)

  

Gzip所有更改的css文件,Gzip所有更改的js文件,Gzip分别更改了所有已更改的html文件

获取已更改文件列表的基本方法是git diff --name-only

您可以过滤该列表,只获取grep '.css$' -的CSS文件。 -表示从STDIN而不是文件中读取。

您可以使用gzip传递该列表xargs,以便从STDIN转换为参数列表。请务必使用gzip -k以避免删除原始文件。

git diff --name-only <revision> | grep '.css$' - | xargs gzip -k

对每个文件扩展名重复。

  

同步所有已更改的js文件,分别同步所有已更改的css文件。

将相应的--include过滤器传递给aws s3 sync。对于CSS来说,*.css.gz

您可能希望使用git clean -dxf清理这些文件。

  

将已更改且位于images /文件夹中的文件复制到另一个目录

再次使用git diff --name-onlyxargs,但这次只在images/目录上。使用cp -t <destination>将列表从xargs复制到目标目录。

git diff --name-only <revision> images/ | xargs cp -t <destination dir>

答案 1 :(得分:0)

req.Header.Set("Accept-Encoding", "identity")