不幸的是,我经常遇到以下情况,虽然我认为自己是一个相当高级的Git用户,但我不知道如何修复它。
假设我在我的存储库中添加了一个子模块git://foo.com/bar.git
:
git submodule add git://foo.com/bar.git ./vendor/bar
git submodule update --init --recursive
到目前为止,这么好。现在Git已将修改后的文件添加到索引中,包括实际子模块目录的某种特殊条目。这个特殊条目只包含当前子模块提交的哈希:
git status
modified: .gitmodules
new file: vendor/bar
现在,我不小心取消了整个目录:
git reset .
糟糕。如果此时我尝试重新添加.gitmodules
和vendor/bar
,第一个很好(因为它是纯文本文件),但添加子模块目录会将目录中的所有文件分段,如如果它不是子模块!
git add .
git status
modified: .gitmodules
new file: (all files in vendor/bar: long list!)
当Git注册子模块时,最初创建的特殊索引条目是什么,以及如何重新创建它?