我有一个包含许多子模块的git repo。当我在子模块中提交时,我有一个git hook,它应该在“supermodule”中提交。不幸的是,提交后挂钩中的提交失败了,因为“超级模块”似乎无法检测到其子模块中的更改。
有没有其他方法可以实现这种行为?
我使用grunt-githooks
和grunt-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');
};
答案 0 :(得分:0)
当提交repo(这里是一个子模块)想要在另一个repo中执行git操作时(这里是父代repo,在'../../..
'中),更改文件夹是不够的。
您需要先取消设置GIT_DIR
,然后执行git命令(as in this hook)。
如果不这样做,状态或添加操作将在子模块的上下文中运行(它刚刚进行了新的提交,并且状态为干净)。