git svn - 我可以同时使用git和svn吗?不需要让git和svn互相交互。

39

我正在进行一个开发项目。

公司正在使用SVN,因此主要的commitcheckout都应该通过SVN完成。

然而,我不喜欢SVN,而是一个git用户。既然只有当我认为我的代码很好时才会提交到公司的SVN,我想使用git作为自己的历史记录管理工具。

我不需要使用git来做SVN的事情,反之亦然。

我能同时使用SVN和git来对同一份代码进行版本控制吗?它们之间没有交互。


4
忽略 SVN 中的 .git 文件夹和 Git 中的 .svn 文件夹,这样就可以了。或者你是在询问如何基本上同时从两者推送/拉取? - Blender
但是为什么呢?Git 在与 SVN 存储库的协作方面表现得非常出色,为什么不从中受益呢? - Benjamin Bannier
5
可以理解并且向同事表明你不会推送未完成的更改,这对他们是公平的做法。然而,其中隐藏着一个巨大的危险:你很可能会对公司代码库提交非常少的更改。这意味着与同事相比,你会产生更多的代码冲突。在使用Subversion时,频繁提交是有意义的。我也曾吃过亏。 - arkascha
2
这是最糟糕的版本控制实践!请参考http://www.codinghorror.com/blog/2008/08/check-in-early-check-in-often.html和https://dev59.com/v3VD5IYBdhLWcg3wDHDm。 - bahrep
1
Jeff Atwood:“长时间工作的开发人员——我指的是超过一天的时间——如果没有将任何内容提交到源代码控制中,那么他们将为自己在后续集成方面带来一些严重的麻烦。” - bahrep
1个回答

43
您可以使用git svn clone <SVN repo URL>命令将Subversion存储库克隆到本地机器上。代码将作为一个Git存储库可用。您可以在那里进行工作,并根据需要进行本地提交。有一种命令行选项可以获取“浅层”检出,而不是整个存储库,这通常非常有用。我忘记了它是什么。
每当您希望运行等效的svn update时,请执行git svn rebase。这将获取在您上次同步后检入到SVN中的新提交,然后将您的更改重新基于新的最新版。
当您准备好进行提交时,请执行git svn dcommit。这将逐个发送所有新提交到svn。您还可以将本地提交压缩成一个提交,首先进行本地rebase,然后进行svn dcommit。这应该在初始分支(通常为master)上完成。
您从Subversion进行检出,然后在Git中进行本地工作的事实意味着它们之间存在“交互”,因此您的最后一句话无效。

3
答复中做了一个应该作为评论发布的编辑。我已经还原了编辑,并将添加内容逐字逐句地发布在此评论中——通常被认为是一种不良习惯,将所有更改作为单个修订提交(例如,请参见https://dev59.com/v3VD5IYBdhLWcg3wDHDm和http://www.codinghorror.com/blog/2008/08/check-in-early-check-in-often.html)。 - Noufal Ibrahim
对于浅层检出:git svn clone -s -r1002:HEAD http://paul@svn.xxxxxx.com/repos/ -T trunk -b branches -t tags,其中“1002”必须替换为您想要保留的早期版本。 - Paul Sturm

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