尝试在Git中设置一个SVN仓库

5
我们正在尝试使用 Git 作为存储库系统,而不是我们通常使用的 SVN。我们有一个 SVN 存储库是必需的。在 SVN 中,我们使用 svn propset 将该存储库链接为 svn:externals。这可以确保有一个特定的、广泛使用的全局副本。
现在我们有了 Git 存储库,我想以与 svn:externals 相同的方式将 SVN 存储库链接到它上面。我已经在某种程度上成功地做到了这一点。我是 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 提交更改。

要将其与主 Git 存储库合并,我使用了:

git add mysvnrepo
git commit mysvnrepo
git push

我遇到的问题是,如果我现在在另一个地方克隆git仓库(再次使用git clone gitmaster@address.org:mygitrepo),虽然我会得到包含所有文件的mysvnrepo目录,但我无法与SVN仓库进行交互。在进行git svn rebase后,我会收到错误消息:“无法从工作树历史记录确定上游SVN信息”。可能相关的是,当我在其他地方克隆它时(原始仓库中存储svn信息的位置),mysvnrepo目录中没有.git文件夹。
我已经搜索了这个问题,但所有相关的参考似乎都是在第一次使用svn仓库时出现问题,而我的问题是为另一个用户使其工作。
也许我的问题在于如何成功地将svn仓库添加/提交/推送到git仓库?即git add mysvnrepo; git commit mysvnrepot; git push是否正确的做法?
注:改进以提供更多背景信息。

你如何克隆代码库?是使用 git clone 还是从 SVN 检出或其他方式? - siegi
你是指我正在工作的 Git 代码库吗?对于原始的 Git 代码库和我使用 git clone gitmaster@address.org:mygitrepo 克隆的其他用户的代码库,都是这样吗? - Evan O'Connor
1个回答

2
看起来你想要做的是将一个 git 仓库包含在另一个仓库中,就像使用 `svn:externals` 一样。只是被包含的仓库是用 `git svn` 创建的,这不会影响你如何将该仓库包含在另一个仓库中。
你需要将你想要包含在其他仓库中的 git 仓库公开在某个地方。然后你可以使用 git submodulegit subtree 将它包含进来。两者都不完全像 `svn:externals`;但对于 git 仓库的其他用户而言,`git subtree` 可能更适合初学者。
根据你使用的语言和软件,你也可以考虑为经常使用的仓库创建一个单独的 git 仓库,并将其构建为独立的库、jar 文件或其他形式。
以上只有在您计划完全转换到Git时才能正常工作。如果您的团队中有一些人将继续在SVN上工作一段时间,git substreegit submodule不适用于您。
相反,可以查看this question以使用git svn模拟svn:externals。
要为每个人设置Git使用,请按照git svn手册中“基本示例”下的最后一个示例操作。每个人都将能够git clone然后在本地运行几个命令,而不是进行完整的git svn clone

问题在于我希望人们能够使用 git svn dcommit 从 git 存储库提交回 svn 存储库。为了达到相同的目的,创建一个全局 git 存储库是可行的,但它将与 svn 存储库分开;这是不可取的。一种解决方案是让每个人手动 git svn 克隆 svn 存储库,然后他们应该能够提交(就像我克隆它时一样)。 - Evan O'Connor
我已经更新了我的答案,包括一些关于在该设置中可以做什么的细节。使用svn:externals进行从SVN到git的缓慢/部分迁移有点棘手。希望这不会吓到你或你的团队;一旦你习惯了它,git真的很棒。 - jbowes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接