【问题标题】:Does git-svn support different revisions for each subdirectory?git-svn 是否支持每个子目录的不同版本?
【发布时间】:2011-02-24 19:09:31
【问题描述】:

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

git svn clone @987654321@

现在,在 repo 中,我有几个目录:

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

存储库当前处于修订版 100。我想在 repo/trunk/B 中签出修订版 90,然后为整个存储库制作一个标签,以便 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 更改,但其他子目录中的文件没有更改。这是正确的方法吗,还是有更“正确”的方法?

【问题讨论】:

    标签: svn git tags git-svn


    【解决方案1】:

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

    这通常不是 git 的运作方式,我敢说这通常也不是你真正想要用 svn 做的。使用 git,您希望整个工作树同步移动,因此大部分情况下不支持部分签出或将子树更新到不同版本。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多