Javascript 使用Grunt+;吉特

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

很抱歉,我不能定义一个标题,使我的问题到了一个点。但我会尝试在这里解释我的问题:

我们在JavaScript项目中使用Grunt将Sass文件编译为CSS,并浏览和缩小JavaScript模块

Sass和JavaScript源位于多个文件夹中(每个应用程序模块一个),文件夹结构如下:

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的回答,创建更新的工作流如下所示:

增量更新

  • 在git archive的帮助下,将
    HEAD
    签出到临时目录中
  • 使用
    grunt
  • 在git archive的帮助下,在
    HEAD
    HEAD^
    )之前将提交签出到临时目录中
  • 使用
    grunt
  • 借助于
    git diff--no index
    (允许比较没有索引的目录中的文件)比较两个目录
  • 借助
    tar
    gzip
    将这些差异存储到存档中,忽略
    src
    文件夹中的所有文件
  • 完整更新

  • 在git archive的帮助下,将
    HEAD
    签出到临时目录中
  • 使用
    grunt
  • 借助
    tar
    gzip
    将所有项目文件存储到存档中,忽略
    src
    文件夹中的所有文件

  • 使用
    git diff--no index
    确实是救命稻草,因为
    diff
    rsync
    都不能以我需要的方式报告更改。

    根据@Dunno的回答,创建更新的工作流如下所示:

    增量更新

  • 在git archive的帮助下,将
    HEAD
    签出到临时目录中
  • 使用
    grunt
  • 在git archive的帮助下,在
    HEAD
    HEAD^
    )之前将提交签出到临时目录中
  • 使用
    grunt
  • 借助于
    git diff--no index
    (允许比较没有索引的目录中的文件)比较两个目录
  • 借助
    tar
    gzip
    将这些差异存储到存档中,忽略
    src
    文件夹中的所有文件
  • 完整更新

  • 在git archive的帮助下,将
    HEAD
    签出到临时目录中
  • 使用
    grunt
  • 借助
    tar
    gzip
    将所有项目文件存储到存档中,忽略
    src
    文件夹中的所有文件

  • 使用
    git diff--no index
    确实是救命稻草,因为
    diff
    rsync
    都不能以我需要的方式报告更改。

    是的,你是对的。我完全忘记了传统的
    diff
    。谢谢看起来rsync在自动化环境中会做得更好。我已经根据您的回答,用我目前所做的工作流程回答了我自己的问题;-)是的,你说得对。我完全忘记了传统的
    diff
    。谢谢看起来rsync在自动化环境中会做得更好。我已经根据您的回答,用我目前所做的工作流程回答了我自己的问题;-)