如果子模块已修改文件,Git不应该检查

时间:2012-09-28 23:30:00

标签: git git-submodules

是否存在内置方式(或简单脚本),如果任何子模块修改了文件,是否会让我签入?就像现在一样,我有无用的提交,因为我无法返回到子模块的状态。

2 个答案:

答案 0 :(得分:3)

看起来预提交钩子“script for submodule hygiene”适用于:
如果子模块有挂起的更改,则阻止提交 (另见patch/script

该脚本是4年前编写的,所以git diff现在可能包含一种检测“脏”子模块的简单方法。

答案 1 :(得分:2)

感谢VonC解释我需要做什么。对不起,我不知道Bash,所以这是Ruby版本。完美工作(到目前为止,所有情况下,使用git版本1.7.9.4测试):

#!/usr/bin/env ruby
# http://stackoverflow.com/questions/12648585/git-should-not-checkin-if-submodule-has-modified-files
# October 1, 2012
# call this file pre-commit, make it executable and put it in .git/hooks
puts "Git pre-commit hook by Dan Rosenstark (yar)"
gitDiff = `git diff`
gitDiffWithSubmodules = `git diff --ignore-submodules`
if (gitDiff.length == gitDiffWithSubmodules.length)
  puts "Submodules are clean, going right ahead!"
else
  puts "One or more submodules are dirty, can't commit.'"
  exit 1
end