我们如何使用git svn?
请提供有效将git与svn结合使用的提示。"最佳做法"是什么?
解决方案
这是我最近学到的一些东西:
- 总是在执行git svn dcommit之前先执行git svn rebase。
- 当我们执行dcommit时,请从临时暂存分支进行操作-如果我们(或者git)搞砸了,只需删除分支并重新开始,恢复起来就容易得多。
当svn dcommit
在一次大型提交过程中中途死亡时,我们似乎已经失去了所有历史记录,请执行以下操作:
How To Recover: First, open .git/logs/HEAD Find the hash of the commit that's the head of your git repo. Hopefully you remember the commit message and can figure it out, but it should be pretty obvious Back in your now f-ed up working-dir: git reset --hard <hash from log> This gets your working dir back to where it was before you did a git- svn dcommit. Then: git-svn rebase git-svn dcommit
创建克隆时,请使用--prefix = svn /。它创建更好的分支名称。
另外,在进行"克隆"或者"初始化"操作时,请不要忽略" --trunk","-tags"和" --branches"自变量。
抓取是比较耗时的步骤之一,因此设置cron作业在后台执行git svn fetch。这是安全的,因为获取不会影响任何工作分支。
(有关git svn fetch的背景信息:每当我们执行git svn rebase时,都会首先执行此命令,因此通过提前执行此步骤,通常会更快地执行git svn rebase调用。下载SVN提交并将其粘贴到由git-svn管理的特殊分支中。通过执行git branch -r可以查看这些分支,如果执行了上述步骤,则它们以" svn /"开头。)
确保我们知道如何使用git reflog
。我曾经有几次git svn dcommit
死了(通常是因为我试图检入一些巨大的东西),而我的提交似乎丢失了。在每种情况下,都很容易在reflog中找到该提交。
如果SVN储存库中有一个可以拒绝提交的提交后钩子,那么git svn dcommit将在第一次拒绝提交时停止处理提交,并且我们必须从git reflog中恢复剩余的提交。
实际上,我认为上述问题是由于我的牛郎试图修复被拒绝的提交时未正确运行git rebase -i
而引起的。但是,由于有了reflog,我们得以恢复一切!
我一直在写一些博客,介绍如何并行使用Subversion和Git,并且还提供了一些基本的截屏视频。在这里收集了所有内容:http://www.tfnico.com/presentations/git-and-subversion
我将尝试一个摘要:
- 就去吧!尝试一下不伤:)
- 首先从一个小的Git项目开始学习。
- 坚持使用命令行,直到掌握为止。 GUI工具可能会使我们感到困惑。
- 如果可能,请执行一次一次性迁移,将SVN留在后面,一次从一个小项目开始,一个项目。
- 如果确实必须一起使用Git和SVN,请注意,我们必须放弃从Git获得的许多好处,例如分支机构,但是要获得"本地"好处(存储,索引,速度)。
- 如果我们是一个Git用户,只需自己进行git-svn变基和取消提交。
- 如果我们是几个Git合作者,请设置一个仅从SVN中提取的中央Git / SVN,而每个Git用户都直接将其提交回SVN。更多信息在这里。