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

All*_*lan 4 svn git git-svn

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

我想知道git在现有svn结账时初始化回购(用于本地使用)是否有任何问题,但使用git-svn.

这是我的情景:

  • 我的团队使用svn并且不熟悉git.
  • 我还在学习git; 我对它的熟悉程度并不像我一样熟悉svn.
  • 我想利用强大的本地特性git(如分支,存储等).
  • 我现在不想学习git-svn(虽然我计划将来).
  • 我将svn专门使用客户端与存储库进行交互.(所以我清楚地了解我在做什么,svn并没有得到任何奇怪的互动).

我在想,我会永远做svn updatecommitgit主分支.当我处理功能时,我会与主人合并.

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

me_*_*and 5

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

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

  1. 添加您的.svn文件夹.gitignore,因此您永远不会让Git跟踪您的Subversion元数据.这意味着你有Subversion和Git分别跟踪你的工作副本,因此对一个操作的任何操作都需要在另一个上执行类似的操作.

    除非你仔细考虑如何使用存储库,否则使用Subversion合并,分支和开关非常舒服,并确保仔细使用它们来匹配你使用Git对存储库执行的操作,你将失去Git分支模型的大部分优势.

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

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

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

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

经过git-svn一段时间的使用,我可以保证它比其中任何一个选项更容易,即使是作为Git的初学者.我建议保留一个Subversion工作副本,以便在你现在需要做某些事情并且没有时间检查使用Git的最佳方法时,或者在git-svn有限的情况下做你需要的事情.它要做.git-svn我认为,学习曲线并不比常规Git困难得多,特别是因为您不需要学习使用远程Git存储库的任何知识.