Git 如何从存储库及其子模块签出特定修订

Git 如何从存储库及其子模块签出特定修订,git,git-submodules,Git,Git Submodules,我有一个存储库,我用 存储库中有子模块。我想做的是从存储库中获取特定日期的文件。我试图通过以下方式实现这一点: git checkout `git rev-list -n 1 --before="2011-12-10 13:37" master` 但这似乎对子模块没有任何作用 有人能建议我应该怎样做才能影响子模块吗?(实际上,我并不需要存储库的完整克隆,因此,如果有一种方法可以通过子模块递归地获取特定的修订版,也可以) 附加的 如果将-b开关添加到签出,则可以运行: git submodule

我有一个存储库,我用

存储库中有子模块。我想做的是从存储库中获取特定日期的文件。我试图通过以下方式实现这一点:

git checkout `git rev-list -n 1 --before="2011-12-10 13:37" master`
但这似乎对子模块没有任何作用

有人能建议我应该怎样做才能影响子模块吗?(实际上,我并不需要存储库的完整克隆,因此,如果有一种方法可以通过子模块递归地获取特定的修订版,也可以)

附加的

如果将-b开关添加到签出,则可以运行:

git submodule sync
git submodule update

没有收到任何错误,但子模块似乎仍然包含其文件的头版本。

签出/克隆后是否运行了
git submodule update

签出/克隆后是否运行了
git submodule update
此处的小脚本:

给了我一种递归调用每个子模块(以及每个子模块的子模块,无限)上的checkout的替代方法,它对我不起作用(似乎抓住了一些文件的错误版本),但这可能是我自己特有的问题,所以它可能对搜索相同功能的其他人起作用

请注意,在签出调用中,我必须将master更改为HEAD,这只是一个猜测,所以可能这也是为什么我在签出文件的版本时仍然存在问题的原因

我感到惊讶的是,这似乎既困难又很少做到(找不到任何关于如何通过谷歌做到这一点的参考资料)。我原以为从特定日期或标签获取模块和子模块的文件是人们经常做的事情,以调试旧版本的代码e.t.c.

这里的小脚本:

给了我一种递归调用每个子模块(以及每个子模块的子模块,无限)上的checkout的替代方法,它对我不起作用(似乎抓住了一些文件的错误版本),但这可能是我自己特有的问题,所以它可能对搜索相同功能的其他人起作用

请注意,在签出调用中,我必须将master更改为HEAD,这只是一个猜测,所以可能这也是为什么我在签出文件的版本时仍然存在问题的原因


我感到惊讶的是,这似乎既困难又很少做到(找不到任何关于如何通过谷歌做到这一点的参考资料)。我本以为从特定日期或标签获取模块和子模块的文件是人们经常做的事情,以调试旧版本的代码e.t.c.

如果我这样做,我会得到一个混合的结果:“无法签出”,“致命:引用不是树”和“请在切换分支之前提交更改或将其隐藏”。如果这样做,我会得到“无法签出”、“致命:引用不是树”和“请在切换分支之前提交更改或将其隐藏”的混合结果。
git submodule sync
git submodule update