在Subversion仓库中的Git工作副本

5
我在工作中有一个项目,我们使用Subversion来进行版本控制。然而,我们有一个客户需要用Git来做一些事情,我需要检查并将其放入我们的项目存储库中。通常情况下,我会检出Git仓库,将其导出到我的SVN工作副本中,对文件进行版本控制,完成即可。但是,这个人经常更新这个代码,我需要保持与他接近。
如果我只是将Git存储库检出到我的SVN工作副本中,并对文件进行版本控制,会发生什么?
注意:Git-svn不是一个选项,我从未使用过它,不幸的是我没有时间学习新的知识来处理这个问题。
3个回答

2

只需克隆Git仓库。不会发生任何不良反应,您可以通过执行git update更新该代码。您可以安全地将git仓库提交到子版本控制系统中,我以前做过。


1
这就是我最终所做的,我只是想确保在将代码检入我们的 SVN 仓库时,.git 目录不会出现任何混乱。 - codewario
我最终学会了git/git-svn,并且现在每天都在工作中使用git-svn。对于那些害怕git的人来说,它并不像你想象的那么令人生畏。日常使用非常简单,而像GitExtensions和git这样的GUI工具使学习变得更加容易。在我的主要项目上,拥有项目历史记录、责备和搜索功能也很好用。如果您有一个SVN项目,我认为git-svn比git简单一些,所以这是一个学习git的好机会。我仍然会保留这个答案,但我强烈建议学习如何使用git-svn,而不是将两个工作副本混合在一起。 - codewario
抱歉在这篇旧文章上留言,但看到这个让我想起了这个解决方案的低效性,特别是考虑到所有历史记录都在其中的 git 仓库有多么庞大。学习一些新命令会更加合理,因为 git 可以与 git 和 svn 远程接口交互。 - codewario

1

这个方案在技术上没有问题,但会变得很麻烦。每次更改后,你需要将其提交到Git,然后将Git仓库中创建的所有新文件添加到Subversion中,最后将所有内容提交到Subversion。当你合并他的任何更改时,你也需要做同样的事情。

我有一个问题,为什么你想这样做;从将它放入Subversion中获得什么好处?如果你需要与他的上游仓库合并更改,那么你必须学习Git。此时,你可能只需使用Git进行版本控制,而不要试图与Subversion集成以避免复杂化。如果你只是要将最终代码发送给他,并让他集成它,那么为什么要将Git仓库检查到Subversion中呢?只需按照平常的方式进行操作,将当前副本检查到Subversion中,进行工作,完成后再将最终结果发送给他即可。

git-svn对于官方上游代码存储在Subversion中,但你想使用Git进行工作的情况非常有用,因为你更喜欢Git。但如果你想使用Subversion工具来处理Git管理的上游项目,则它并不是非常有帮助。


实际上,我想主要使用Subversion来管理这个项目。我只需要Git是因为这个外部项目托管在Git仓库中,我们需要能够更新客户对他们项目所做的任何更改。 - codewario
所带来的好处是老板不会因为使用不熟悉的东西而纠缠我。我非常支持效率,但也认为不要恩将仇报。 - codewario

0

你提出的解决方案应该是可行的,因为Git和SVN有不同的元数据文件。只要您不将一个版本控制系统的元数据文件添加到另一个系统中,它们之间就没有冲突。

请注意,每当您更改文件时,都必须将它们添加到Git和Subversion中,因此您必须处理两个不同的文件控制系统。

正如你所提示的,使用git-svn可以帮助你,因为它允许你仅使用Git,然后使用git-svn与你的svn中央仓库进行同步。我在工作中正在这样做,而且非常简单并且很好用(大部分时间)。如果我是你,我会考虑学习它。无论如何,您都必须学习Git才能有效地使用客户端,而学习git-svn相对简单。基本上只需要三个命令:

  • git svn fetch - 从svn获取最新的更改
  • git rebase git-svn - 合并svn更改
  • git svn dcommit - 提交到svn仓库

学习Git是值得的,因为最终我发现它比SVN更加优越。


我知道如何使用Git,但从未使用它与Subversion存储库进行交互。个人更喜欢Mercurial而不是Git,并且已经使用了hgsubversion,但是对于这个项目,我真的没有时间去学习新东西。在工作中使用Mercurial会导致我的老板必须学习一种新工具,因此我们选择了Subversion。 - codewario

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