在svn checkout中使用git? (没有git-svn)

时间:2012-11-15 18:39:57

标签: git svn git-svn

我做了很多搜索,但找不到这个问题的答案。如果它是重复的,请道歉。

我想知道在现有的git结帐中初始化svn回购(用于本地使用)是否有任何问题,但没有使用{{1 }}

这是我的情景:

  • 我的团队使用git-svn并且不熟悉svn
  • 我还在学习git;我和git一样熟悉它。
  • 我想利用svn强大的本地功能(如分支,存储等)。
  • 此时我不想学习git(虽然我计划将来)。
  • 我将专门使用git-svn客户端与存储库进行交互。 (所以我清楚地了解我在svn方面所做的事情并没有得到任何奇怪的互动。)

我想我总是从svn主分支svn updatecommit开始。当我处理功能时,我会与主人合并。

有人试过吗?有任何令人讨厌的缺点或副作用吗?提示?

2 个答案:

答案 0 :(得分:5)

TL; DR:是的,你可以,但这比仅仅学习git-svn更难。

我试过了。您遇到的主要问题是将svn up操作转换为Git提交。我见过两种方法:

  1. 将您的.svn文件夹添加到.gitignore,这样您就不会让Git跟踪您的Subversion元数据。这意味着您可以单独跟踪Subversion和Git跟踪您的工作副本,因此对一个操作的任何操作都需要在另一个上执行类似的操作。

    除非你仔细考虑如何使用存储库,否则使用Subversion合并,分支和交换机非常舒服,并确保仔细使用它们以匹配您正在使用存储库执行的操作使用Git,你将失去Git分支模型的大部分优势。

  2. 使用Git跟踪您的.svn文件夹。这意味着,例如,如果您执行了svn upgit commit,然后签出了旧的Git提交,则Subversion元数据将正确匹配。

    这意味着您可以更轻松地使用Git的分支功能,但是使用Git跟踪Subversion元数据还有许多其他问题。主要的一个(至少对于Subversion 1.6,我不知道1.7)是.svn目录中的空文件夹是重要的,但Git不跟踪空文件夹,因此它们将被删除而不会发出警告

  3. 我使用方法1一段时间,但发现它给了我Git和Subversion的所有最差位,但没有什么优势,并且意味着所有操作都需要完成两次才能完成任务。

    我的一位同事使用方法2已经有一段时间了,但是他写了一大堆帮助脚本来让他这样做。特别是,他的脚本将遍历工作副本并修复需要添加空文件夹的任何.svn目录。设置起来需要做很多工作,但这意味着他至少可以使用Git的大部分功能。可悲的是,我无法访问相关脚本。

    使用git-svn一段时间之后,我可以保证它比其中任何一个选项更容易,即使是作为Git初学者。我建议保留一个Subversion工作副本,以便在你需要做一些现在并没有时间检查使用Git的最佳方法时,或者在{{ {1}}太有限了,无法按照您的需要去做。我认为,git-svn的学习曲线并不比常规Git困难得多,特别是因为您不需要学习任何有关使用远程Git存储库的知识。

答案 1 :(得分:1)

我试过这个,它可以工作。您只需要将SVN相关文件添加到您的.gitignore和Git相关文件中以svn ignore。类似的问题也被问到here,只需将 StarTeam 替换为 SVN

使用git-svn真的没什么可学的。您的工作流程基本上是(rest of article)

  
      
  1. 创建本地git repo:git svn clone -s http://svnrepo
  2.   
  3. 从svn获取最新信息:git svn fetch then git svn rebase
  4.   
  5. 进行本地更改:git add and git commit -m “message”
  6.   
  7. 推送到svn:git svn dcommit
  8.         

    根据需要重复步骤2-4。

不需要学习很多东西,也不用担心这一点。