【发布时间】:2019-09-29 00:35:59
【问题描述】:
假设我有一个包含多个文件的项目(例如.html、.js、.css、.cs 等)。这些文件使用grunt 发布,它会根据我输入的src/ 文件创建一个build/ 文件夹。
在此过程中,它不包括我所有的src 文件,并且它还更改了一些文件的名称(例如更改为.min.js 和.min.css)。
输入文件列表在任务中使用src 参数指定,重命名使用ext 参数完成。
这很酷,有关要包含在版本中的文件的所有信息都在 grunt 文件中。
但是是否可以自动检查输入文件是否也添加到 git 中?
几个月来发布数百个版本会非常令人沮丧,后来发现我忘记在第一个版本中添加一个重要文件到 git。
这意味着之前存储在git 中的所有snapshots 都不完整。
我知道一些自动化的Jenkins 测试可能会有所帮助,但这些测试可能应该包含另一个独立创建的文件列表。这将是一个很好的第二次检查,但情况不会更容易。
Grunt 了解发布所需的源文件的所有信息,并且可以在发布期间进行许多检查。
如果 grunt 可以在运行他们的任务之前执行 git status 并且它可以在应用任务之前应用 source filter 来检查 git 中文件的存在,那就太好了。
创建一个 grunt 任务,或者执行一个 git 命令行也是一个解决方案,但恐怕我需要为这个解决方案再次列出我所有的 src 列表和 ext 参数。
注意:对于开发,我也在使用 Windows 和 Linux。
【问题讨论】:
-
您的
.gitignore文件还不够吗?如果您使用git commit -a,则在发布时,它肯定会添加您的所有文件(除非在.gitignore中指定)。所以问题是你的发布过程是什么,因为你的发布过程肯定会添加你所有的文件。*.min.css和*.min.js通常被认为是工件,并且不使用具有相同 repo 的 git 进行版本控制(但这不是大多数 Web 开发人员遵循的约定,而是大多数 Java/C/Go 开发人员使用的约定) -
azbarcea:是的,这也是一种可能的解决方案。虽然它有一些缺点: - Gruntfile.js 和 .gitignore 必须有完全相同的过滤器。所以需要手动同步。 - 我通常使用
.gitignore作为前置过滤器。例如,如果我有一个文件的多个开发版本(例如js/util-bad.js、js/util-objectcopy_test.js),那么我并不总是更新它。但是 .gitignore 可能只是一个很好的指标,如果它通常包含 0 个未跟踪文件,否则你不会轻易注意到它现在有 13 个未跟踪文件而不是 12 个。 -
azbarcea:总结:
.gitignore仅在开发人员的工作副本干净整洁的情况下才有效。但如果不是呢?如果他/她的文件有点乱? - Grunt 可以通知几乎所有简单的错误。如果开发人员希望对所有源文件进行版本控制,那么这也是一个简单的检查。作为一种解决方法,如果 grunt 可以列出所有已处理的源文件就足够了。 -
根据我之前的想法,我找到了一种解决方法。幸运的是
grunt -v打印了必要的输出。所以现在我添加代码作为这篇文章的答案。