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

时间:2012-04-15 05:06:54

标签: git git-submodules

我有一个存储库我克隆(或者至少,我被告知要克隆)使用

git clone git://therepository --recursive

存储库中包含子模块。我想要做的是从存储库中获取特定日期的文件。我试着这样做:

git checkout `git rev-list -n 1 --before="2011-12-10 13:37" master`

但这似乎对子模块没有任何作用。

任何人都可以建议我应该如何做才能影响子模块? (我实际上并不需要对存储库进行完整的克隆,所以如果有办法通过子模块递归获取特定的修订版本也可以。)

其他

如果我将-b开关添加到结帐时,我可以运行:

git submodule sync
git submodule update

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

2 个答案:

答案 0 :(得分:1)

这里的小脚本: http://cemerick.com/2009/09/28/working-with-git-submodules-recursively/

给了我一个替代方法,递归地调用每个子模块上的checkout(以及每个子模块的子模块,无限制),它对我不起作用(似乎抓住了某些文件的错误修订版),但这可能是一个问题特定于我自己,所以它可能适用于寻找相同功能的其他人。

请注意,我必须在结账电话中更换HEAD的主人,这只是一个猜测所以也许这也是为什么我还在检查它所检查的文件修订版的问题。

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

答案 1 :(得分:0)

结账/克隆后你运行了git submodule update吗?