使用grunt-git和grunt-githooks使用子模块的post-commit钩子提交Git“Supermodule”

时间:2014-07-10 03:17:31

标签: git gruntjs git-submodules githooks post-commit-hook

我有一个包含许多子模块的git repo。当我在子模块中提交时,我有一个git hook,它应该在“supermodule”中提交。不幸的是,提交后挂钩中的提交失败了,因为“超级模块”似乎无法检测到其子模块中的更改。

有没有其他方法可以实现这种行为?

我使用grunt-githooksgrunt-git通过Grunt设置了所有这些内容。

以下是我的gruntfile:

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    githooks: {
      all: {
        options: {
            dest: '../../../.git/modules/server/modules/mymodule/hooks'
        },
        'post-commit': 'updateSuperModule'
      }
    },

    gitcommit: {
        all: {
            options: {
                message: 'Updated Submodule',
                cwd: '../../..',
                verbose: true
            },
            files: {
                src: ['.']
            }
        }
    },

    gitpush: {
        all: {
            options: {
                cwd: '../../..',
                verbose: true
            }
        }
    }
  });

  grunt.loadNpmTasks('grunt-githooks');
  grunt.loadNpmTasks('grunt-git');
};

1 个答案:

答案 0 :(得分:0)

当提交repo(这里是一个子模块)想要在另一个repo中执行git操作时(这里是父代repo,在'../../..'中),更改文件夹是不够的。

您需要先取消设置GIT_DIR,然后执行git命令(as in this hook)。

如果不这样做,状态或添加操作将在子模块的上下文中运行(它刚刚进行了新的提交,并且状态为干净)。