我做了很多搜索,但找不到这个问题的答案。如果它是重复的,请道歉。
我想知道在现有的git
结帐中初始化svn
回购(用于本地使用)是否有任何问题,但没有使用{{1 }}
这是我的情景:
git-svn
并且不熟悉svn
。git
;我和git
一样熟悉它。svn
强大的本地功能(如分支,存储等)。git
(虽然我计划将来)。git-svn
客户端与存储库进行交互。 (所以我清楚地了解我在svn
方面所做的事情并没有得到任何奇怪的互动。)我想我总是从svn
主分支svn update
和commit
开始。当我处理功能时,我会与主人合并。
有人试过吗?有任何令人讨厌的缺点或副作用吗?提示?
答案 0 :(得分:5)
TL; DR:是的,你可以,但这比仅仅学习git-svn
更难。
我试过了。您遇到的主要问题是将svn up
操作转换为Git提交。我见过两种方法:
将您的.svn
文件夹添加到.gitignore
,这样您就不会让Git跟踪您的Subversion元数据。这意味着您可以单独跟踪Subversion和Git跟踪您的工作副本,因此对一个操作的任何操作都需要在另一个上执行类似的操作。
除非你仔细考虑如何使用存储库,否则使用Subversion合并,分支和交换机非常舒服,并确保仔细使用它们以匹配您正在使用存储库执行的操作使用Git,你将失去Git分支模型的大部分优势。
使用Git跟踪您的.svn
文件夹。这意味着,例如,如果您执行了svn up
和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的最佳方法时,或者在{{ {1}}太有限了,无法按照您的需要去做。我认为,git-svn
的学习曲线并不比常规Git困难得多,特别是因为您不需要学习任何有关使用远程Git存储库的知识。
答案 1 :(得分:1)
我试过这个,它可以工作。您只需要将SVN相关文件添加到您的.gitignore
和Git相关文件中以svn ignore。类似的问题也被问到here,只需将 StarTeam 替换为 SVN 。
使用git-svn真的没什么可学的。您的工作流程基本上是(rest of article):
- 创建本地git repo:
git svn clone -s http://svnrepo
- 从svn获取最新信息:
git svn fetch then git svn rebase
- 进行本地更改:
git add and git commit -m “message”
- 推送到svn:
醇>git svn dcommit
根据需要重复步骤2-4。
不需要学习很多东西,也不用担心这一点。