git-svn是否支持每个子目录的不同修订版?

时间:2011-02-24 19:09:32

标签: svn git tags git-svn

我有一个目前正在使用Subversion的存储库,但我想在本地使用Git。所以我用git-svn检查了它:

git svn clone http://localserver/svn/repo

现在,在回购中,我有几个目录:

repo/
    trunk/
        A/
        B/
        C/
    tags/
    branches/

存储库目前处于修订版100.我想在repo/trunk/B内签出修订版90,然后为整个仓库制作一个标记,以便repo/trunk/A为rev 100,{{1} }是rev 90,repo/trunk/B是rev 100。

在svn我会做

repo/trunk/C

是否有使用git-svn的等价物,然后我可以制作一个标记来捕获当时整个存储库的状态吗?

我试过了:

cd repo/trunk/B
svn update -r90 .

据我所知,cd repo/trunk/B git svn find-rev r90 # yields 18376729f51b71212d94dcba239a2482cda9f3c8 git checkout 18376729f51b71212d94dcba239a2482cda9f3c8 . 中的文件已根据repo/trunk/B更改,但其他子目录中的文件未更改。这是正确的方法吗,还是有更“正确”的方式?

1 个答案:

答案 0 :(得分:1)

如上所述,您可以使用git checkout手动为trunk/B中的文件执行此操作。但是,文件内容现在将显示为已修改,如果您运行git commit,则会将旧文件的内容重新提交为新文件。

这通常不是git的运作方式,而且我冒昧地说这通常不是你真正想要用svn做的。使用git,您希望整个工作树以锁步方式一起移动,因此,大多数情况下不支持部分检出或将子树更新为不同版本。

当出现这种情况时,您应该问自己ABC是否真的是不同的“项目”。标记时,是否将它们标记在一起,或者只是将A的文件与B分开标记?分支怎么样?我发现git repos在包含项目所需的所有文件时效果最好,但不超过这个。将存储库限制到项目级别会增加一些簿记,但也有助于提高灵活性。这就是为什么你会看到许多关于StackOverflow的帖子讨论使用git子模块和子树(两个不同的概念)来管理存储库组。