我需要获取自上次部署以来已更改的文件列表(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中使用该命令来执行以下操作:
答案 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-only
和xargs
,但这次只在images/
目录上。使用cp -t <destination>
将列表从xargs复制到目标目录。
git diff --name-only <revision> images/ | xargs cp -t <destination dir>
答案 1 :(得分:0)
req.Header.Set("Accept-Encoding", "identity")