防止git子模块更新删除子模块提交的更改

时间:2012-04-28 16:52:07

标签: git git-submodules

这似乎是一个常见问题,但我找不到合理的解决方案:
恕我直言,git submodules的一个更糟糕的问题是子模块已提交但未推送的更改很容易被包含的存储库使用git submodule update删除。引用:

  

如果您已经制作并提交,那么运行git子模块更新是不安全的   子模块内的更改,而不先检查分支。他们   将被默默覆盖:

(......后面有一个例子)。

所以,对于这个问题 - 让super成为存储库根文件夹,submod是包含子模块的子文件夹:

-super   
     -submod

当我在子模块中提交但没有推送,然后运行git submodule update我在submod 已删除时得到已提交的更改(哦,恐怖)。
当我这样做时,如何添加确认are you sure问题? 欢迎使用钩子,脚本或任何其他适用的想法。

TIA

1 个答案:

答案 0 :(得分:1)

没有用于预子模块更新的钩子,所以您可能需要做的是编写一个脚本,使用代替 git submodule update

查看是否有任何已修改的子模块的简单方法是:

if git submodule status | grep -q '^+'; then
    # at least one submodule has changes
fi

另请注意,如果意外更新消除了您的更改,您仍然可以通过子模块checkout的reflog来抢救它们(因为子模块检查本身就是有效的完整Git存储库)。