Javascript 使用Grunt+;吉特
很抱歉,我不能定义一个标题,使我的问题到了一个点。但我会尝试在这里解释我的问题: 我们在JavaScript项目中使用Grunt将Sass文件编译为CSS,并浏览和缩小JavaScript模块 Sass和JavaScript源位于多个文件夹中(每个应用程序模块一个),文件夹结构如下:Javascript 使用Grunt+;吉特,javascript,git,sass,gruntjs,Javascript,Git,Sass,Gruntjs,很抱歉,我不能定义一个标题,使我的问题到了一个点。但我会尝试在这里解释我的问题: 我们在JavaScript项目中使用Grunt将Sass文件编译为CSS,并浏览和缩小JavaScript模块 Sass和JavaScript源位于多个文件夹中(每个应用程序模块一个),文件夹结构如下: src/ styles/ base.scss style.scss js/ module1.js module2.js
src/
styles/
base.scss
style.scss
js/
module1.js
module2.js
app.js
dist/
styles/
style.css
js/
app.js
Grunt任务将此文件编译成以下结构:
src/
styles/
base.scss
style.scss
js/
module1.js
module2.js
app.js
dist/
styles/
style.css
js/
app.js
Git将忽略dist
下的所有文件
当我们部署应用程序时,我们创建增量更新,这基本上是一个git diff--name only
,以获得更改的文件列表
我的问题来了:当我部署应用程序时,我必须构建所有JavaScript和Sass文件。由于编译后的文件在Git之外,我不知道这些文件中哪些已经更改(与最新版本相比)
我想到的唯一解决方案是将编译好的CSS和JavaScript文件也添加到Git中。但是,我们将不得不努力解决这些文件中的合并冲突
如何优化此工作流程,有何想法或经验
更新2017-09-19:
我把标题改得更准确了,因为我要搜索的是一个在使用Grunt和Git的JavaScript项目上构建增量更新的工作流。你不应该将编译过的文件保存在存储库中,这样做没有任何意义。它只会导致合并冲突,并在提交历史记录中造成混乱。您应该跟踪所有必需的源文件和配置文件,以便任何人都可以从历史上的任何一点轻松地进行构建。如果你这样做,那么你的问题就归结为
git checkout newVersion
<build>
git checkout oldVersion
<build>
diff newBuild oldBuild
git签出新版本
git签出旧版本
新版本与旧版本的差异
您不应该将编译后的文件保存在存储库中—这样做没有任何意义。它只会导致合并冲突,并在提交历史记录中造成混乱。您应该跟踪所有必需的源文件和配置文件,以便任何人都可以从历史上的任何一点轻松地进行构建。如果你这样做,那么你的问题就归结为
git checkout newVersion
<build>
git checkout oldVersion
<build>
diff newBuild oldBuild
git签出新版本
git签出旧版本
新版本与旧版本的差异
根据@Dunno的回答,创建更新的工作流如下所示:
增量更新
HEAD
签出到临时目录中grunt
HEAD
(HEAD^
)之前将提交签出到临时目录中grunt
git diff--no index
(允许比较没有索引的目录中的文件)比较两个目录tar
和gzip
将这些差异存储到存档中,忽略src
文件夹中的所有文件HEAD
签出到临时目录中grunt
tar
和gzip
将所有项目文件存储到存档中,忽略src
文件夹中的所有文件使用
git diff--no index
确实是救命稻草,因为diff
和rsync
都不能以我需要的方式报告更改。根据@Dunno的回答,创建更新的工作流如下所示:
增量更新
HEAD
签出到临时目录中grunt
HEAD
(HEAD^
)之前将提交签出到临时目录中grunt
git diff--no index
(允许比较没有索引的目录中的文件)比较两个目录tar
和gzip
将这些差异存储到存档中,忽略src
文件夹中的所有文件HEAD
签出到临时目录中grunt
tar
和gzip
将所有项目文件存储到存档中,忽略src
文件夹中的所有文件使用
git diff--no index
确实是救命稻草,因为diff
和rsync
都不能以我需要的方式报告更改。是的,你是对的。我完全忘记了传统的diff
。谢谢看起来rsync在自动化环境中会做得更好。我已经根据您的回答,用我目前所做的工作流程回答了我自己的问题;-)是的,你说得对。我完全忘记了传统的diff
。谢谢看起来rsync在自动化环境中会做得更好。我已经根据您的回答,用我目前所做的工作流程回答了我自己的问题;-)