Git SVN和外部

时间:2010-11-23 22:07:11

标签: svn git git-svn

我想开始对使用中央SVN存储库的项目使用git-svn。问题是我们正在使用Windows,并且SVN项目使用外部,以便能够在两个不同的项目中重用一些代码。在Unix系统中,我们会使用软链接,但由于我们坚持使用Windows,因此我们决定使用外部作为Windows xp中限制的解决方法。如果您有更好的解决方案,我们将非常乐意听到这一点! svn结构如下:

branch
tag
trunk
 -web
  --views
     ---External to commonFiles
-admin
  --views
    ---External to commonFiles
-commonFiles

我是否可以使用git-svn?如果可以,我该怎么办?

修改 的 我很长一段时间以来一直在寻找好的解决方案,但在写完这篇文章后,我开始思考这与svn:externals有多大关系。如果我使用git svn,我会得到这个

branch
tag
trunk
 -web
  --views
     ---commonFiles (empty folder since externals didn't work)
-admin
  --views
    ---commonFiles (empty folder since externals didn't work)
-commonFiles

由于我在git中有commonFiles文件夹,我可以使用与git中的svn相同的技术吗?将空的commonFiles文件夹链接到使用git维护的commonFiles?

4 个答案:

答案 0 :(得分:1)

是的,您应该能够通过git子模块获得git equivelant。 .git文件夹和.gitmodules文件将与web和管理员签出的级别存在。外部文件夹中将存在.git文件夹。您可能希望忽略git中的.svn文件夹,反之亦然svn。

希望这有帮助!

答案 1 :(得分:0)

您可以尝试使用多个repos detached worktrees,然后使用mr tool。为了方便多个回购工作。

答案 2 :(得分:0)

由于未来表明路口是一个不错的选择。

签出时,源代码树将如下所示:

branch
tag
trunk
 -web
  --views
-admin
  --views
-commonFiles

外部已被省略。 要get the list of externals,您可以在现有存储库中使用以下命令:

svn propget svn:externals -R

对于相对外部(以...开头),这很简单。您可以使用mklink创建联结。在此示例中,运行以下命令:

mklink /J trunk\web\views\commonFiles trunk\commonFiles
mklink /J trunk\admin\views\commonFiles trunk\commonFiles

您可以将这些命令添加到git-hook中,以确保它们在签出时创建。

答案 3 :(得分:-1)

我现在想出了一个对我有用的解决方案!我发现在windows xp中可以使用一种叫做交汇点的东西。连接类似于mount,区别在于如果删除文件夹,其他文件夹也将被删除。所以我最终要做的是在我的commonFiles文件夹之间创建联结,并将忽略添加到包含视图的文件夹中。

branch
tag
trunk
 -web
  --views
     ---commonFiles (junction to *, ignored in git)
-admin
  --views
    ---commonFiles (junction to *, ignored in git)
-commonFiles (*, controlled by git)