2011-02-24 56 views
1

我有一个当前使用Subversion的存储库,但我想在本地使用Git。git-svn是否支持每个子目录的不同版本?

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

现在,内回购,我有几个目录::所以我用git-svn的检查出来

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

储存库目前处于修订100.我想像结帐修订90内repo/trunk/B,然后让整个回购标签,让repo/trunk/A是修订版100,repo/trunk/B是修订版90和repo/trunk/C是修订版100

在SVN中我会做

cd repo/trunk/B 
svn update -r90 . 

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

我尝试这样做:

cd repo/trunk/B 
git svn find-rev r90  # yields 18376729f51b71212d94dcba239a2482cda9f3c8 
git checkout 18376729f51b71212d94dcba239a2482cda9f3c8 . 

而且据我所知,在repo/trunk/B文件已根据git status改变,但在其他子目录中的文件并没有改变。这是正确的方式吗?还是有更正确的方法?

回答

1

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

这通常不是git的操作方式,我敢说这通常不是你真正想用svn做的事情。使用git,您希望整个工作树以锁步方式一起移动,因此,支持部分签出或将子树更新为不同版本的操作大部分都不存在。

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

相关问题