git - 尝试在 Git 中设置 SVN 存储库

标签 git svn repository

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

现在我们有了 git 存储库,我想将 SVN 存储库链接到它,其方式与使用 svn:externals 的方式基本相同。我在这方面取得了一些成功。我是 git 新手,请原谅我的无知。

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

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

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

将其 merge 到我使用的主 git 存储库中:

git add mysvnrepo
git commit mysvnrepo
git push

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

我已经稍微搜索了一下这个问题,但所有对它的引用似乎首先让 svn 存储库工作出现问题,而我的问题是让它为另一个用户工作。

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

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

最佳答案

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

您需要将要包含在其他地方的 git 存储库公开可用。然后您可以使用 git submodule 来包含它。或 git subtree .两者都不像 svn:externals;但是,git subtree 可能对 git 存储库的其他用户更适合初学者。

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

只有在您计划完全切换到 git 时,以上内容才有效。如果您的团队中的一些人打算继续在 SVN 中工作一段时间,git substreegit submodule 将不适合您。

相反,请查看 this question用于使用 git svn 模拟 svn:externals。

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

关于git - 尝试在 Git 中设置 SVN 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12942856/

相关文章:

git - 当它说一个 git step 是 "1 ahead"是什么意思

git - 跨多个站点管理 git

Android Studio 1.4.1 - 无法在 Subversion 中排除 .iml 文件

github - 设置新的 github 存储库 - 未知开关 `u'

javascript - 将现有项目重构为新的 vue-cli 创建的项目时如何保留 Git 提交历史记录?

sql - 如何在golang中安装包

mysql - Redmine 和 SVN - 安装 pam_mysql 时出现问题

asp.net - 将 SVN 与 Visual Studio 2003 集成

github - 如何在现有存储库中添加空文件夹?吉图布

使用终端进行私有(private)存储库的 Git 克隆失败