5

我们正在测试使用 git 作为存储库系统,而不是我们的普通 svn。我们总是需要一个 svn 存储库。在 svn 中,我们将此存储库与 svn propset 链接为 svn:externals。这确保了该特定的、大量使用的存储库实际上只有一个全局副本。

现在我们有了 git 存储库,我想以与使用 svn:externals 基本相同的方式将 SVN 存储库链接到它。我在某种程度上成功地做到了这一点。我是git新手,请原谅任何无知。

在纯 git repo(我通过 克隆git clone gitmaster@address.org:mygitrepo)中,我使用了:

git svn clone svn+ssh://svnowner@hostname.org/path/to/mysvnrepo mysvnrepo

获取另一个 svn 存储库的副本。这很好用,我可以git svn rebase在 mysvnrepo 目录中获得对 SVN 存储库的新修订,并通过git svn dcommit.

要将它与我使用的主 git 存储库结合起来:

git add mysvnrepo
git commit mysvnrepo
git push

我遇到的问题是,如果我现在将 git repo 克隆到其他地方(再次使用git clone gitmaster@address.org:mygitrepo),当我获得包含所有文件的 mysvnrepo 目录时,我无法与 SVN repo 交互。在 git svn rebase 之后出现错误:“无法从工作树历史记录中确定上游 SVN 信息”。可能相关的是,当我在别处克隆它时,mysvnrepo 目录中没有 .git 文件夹(这是 svn 信息存储在原始仓库中的位置)。

我已经对这个问题进行了一些搜索,但是所有对它的引用似乎首先让 svn repo 工作有问题,而我的问题是让它为另一个用户工作。

也许我的问题是如何成功地将 svn 存储库添加/提交/推送到 git 存储库?即是:git add mysvnrepo; git commit mysvnrepot; git push; 正确的方法是什么?

编辑:改进以提供更多上下文

4

1 回答 1

2

看起来您正在尝试做的是将一个 git 存储库包含在另一个存储库中,就像使用svn:externals. 恰好是包含的存储库是用git svn;创建的。这不会真正影响您如何将该存储库包含在另一个存储库中。

您需要将要包含在其他地方的 git 存储库公开可用。然后,您可以使用git submodulegit subtree包含它。两者都不完全一样svn:externalsgit subtree但是,对于 git 存储库的其他用户来说,可能对初学者更友好。

根据您使用的语言和软件是什么,您还可以考虑简单地为频繁使用的存储库创建一个单独的 git 存储库,并将其构建为自己的独立库、jar 文件或您拥有的文件。

仅当您计划完全切换到 git 时,上述方法才有效。如果您的某些团队打算继续在 SVN 中工作一段时间,git substree或者git submodule不会为您工作。

相反,请查看这个问题以模拟 svn:externals with git svn

要为每个人设置 git 使用,请按照git svn手册页中“基本示例”下的最后一个示例进行操作。然后每个人都可以在git clone本地运行一些命令,而不是执行完整的git svn clone.

于 2012-10-17T23:46:39.387 回答