你如何使用git svn?

时间:2008-09-30 23:26:20

标签: svn git

请提供有关在svn中有效使用git的提示。你的“最佳实践”是什么?

4 个答案:

答案 0 :(得分:4)

以下是我最近学到的一些内容:

  1. 在执行git svn rebase
  2. 之前始终git svn dcommit
  3. 当你在进行dcommit时,从临时的分段分支执行它 - 如果你(或git)搞砸了,只需删除分支并重新开始就可以更容易恢复
  4. svn dcommit在大型提交中途死亡并且您似乎丢失了所有历史记录时,do this

      

    如何恢复:

         

    首先,打开.git / logs / HEAD

         

    找到提交的哈希值   你的git repo的负责人。希望你   记住提交消息并且可以   搞清楚,但应该很漂亮   明显

         

    回到你现在的f-ed up work-dir:

         

    git reset --hard< hash from log>

         

    这会让你的工作目标回归   在你做一个git-svn之前的那个地方   dcommit。然后:

         

    git-svn rebase git-svn dcommit

答案 1 :(得分:4)

创建克隆时,请使用--prefix=svn/。它创建了更好的分支名称。

此外,在执行--trunk--tags时,请勿忽略--branchescloneinit个参数。

获取是一个比较耗时的步骤,因此设置一个cron作业在后台执行git svn fetch。这是安全的,因为提取不会影响您的任何工作分支。

(关于git svn fetch的背景信息:只要您执行git svn rebase,就会先执行此命令,因此,提前执行此步骤,您的git svn rebase通话通常会更快。{ {1}}命令下载SVN提交并将它们粘贴到由git-svn管理的特殊分支中。通过执行fetch可以查看这些分支,如果执行上述步骤,则以“svn /”开头。 / p>

确保您知道如何使用git branch -r。我有几次git reflog死了(通常是因为我试图检查一些巨大的东西)而且我的承诺似乎丢失了。在每种情况下,都可以在reflog中轻松找到提交。

答案 2 :(得分:1)

如果您的SVN存储库中有一个可以拒绝提交的提交后挂钩,那么git svn dcommit将在第一次拒绝提交时停止处理提交,并且您将必须恢复剩余的来自git reflog。

实际上,我认为上述问题是由于我的母牛在尝试修复被拒绝的提交时没有正确运行git rebase -i引起的。但是,由于reflog,我们能够恢复所有内容!

答案 3 :(得分:0)

我一直在写关于如何与Subversion和Git并行使用的博客,我还提出了几个基本的截屏视频。收集了所有内容:http://www.tfnico.com/presentations/git-and-subversion

我会尝试摘要:

  • 只是去吧!尝试出来没有伤害:)
  • 从一个小的Git项目开始学习。
  • 坚持命令行,直到掌握它为止。 GUI工具可能会让您感到困惑。
  • 如果可能的话,进行一次性迁移,让SVN落后,一次一个项目,从小项目开始。
  • 如果您必须同时使用Git和SVN,请注意您必须放弃从Git获得的许多优势,例如分支机构,但您可以获得“本地”优势(藏匿,索引,速度)。
  • 如果你是一个Git用户,只需自己进行git-svn变基和dcommitting。
  • 如果你是几个Git合作者,建立一个只从SVN拉出的中央Git / SVN,而每个Git用户直接回到SVN。 More info here