git-svn是否支持每个子目录的不同版本?
我有一个当前使用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
改变,但在其他子目录中的文件并没有改变。这是正确的方式吗?还是有更正确的方法?
如上所述,您可以使用git checkout
手动为trunk/B
中的文件执行此操作。但是,文件内容现在将显示为已修改,如果您运行的是git commit
,则会重新提交旧文件的内容作为新文件。
这通常不是git的操作方式,我敢说这通常不是你真正想用svn做的事情。使用git,您希望整个工作树以锁步方式一起移动,因此,支持部分签出或将子树更新为不同版本的操作大部分都不存在。
当这种情况出现时,您应该问自己:A
,B
和C
是否真的是不同的“项目”。当您标记标记时,您是否将它们标记在一起,或者您是否将与A
的文件分开标记?分枝怎么样?我发现,当你包含所有项目所需的文件,但不超过这个时,git repos的效果最好。将存储库限制到项目级别会增加一些簿记,但也有助于提高灵活性。这就是为什么你会看到很多关于StackOverflow的文章,讨论如何使用git子模块和子树(两个不同的概念)来管理存储库组。