14

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

4

4 回答 4

4

这是我最近学到的一些:

  1. git svn rebase做之前总是做git svn dcommit
  2. 当你在做的时候dcommit,从一个临时的临时分支做 - 如果你(或 git)搞砸了,只需删除分支并重新开始就更容易恢复

svn dcommit在一个大的提交中途死亡并且你似乎失去了所有的历史时,这样做

如何恢复:

首先,打开 .git/logs/HEAD

找到作为 git repo 头部的提交的哈希。希望你能记住提交信息并能弄清楚,但这应该很明显

回到你现在的工作目录:

git reset --hard <来自日志的哈希>

这会让你的工作目录回到你执行 git-svn dcommit 之前的位置。然后:

git-svn rebase git-svn dcommit

于 2008-09-30T23:28:13.727 回答
4

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

另外,在执行or时不要忽略--trunk,--tags--branches参数。cloneinit

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

(背景信息git svn fetch:无论何时执行此命令都会首先执行git svn rebase,因此通过提前执行此步骤,您的git svn rebase调用通常会更快。该fetch命令下载 SVN 提交并将它们粘贴到由 git-svn 管理的特殊分支中。这些分支是可以通过做查看git branch -r,如果您执行了上述步骤,则它们以“svn/”开头。)

确保您知道如何使用git reflog. 我有几次git svn dcommit死亡(通常是因为我试图检查一些巨大的东西)并且我的提交似乎丢失了。在每种情况下,提交都很容易在 reflog 中找到。

于 2008-09-30T23:55:58.763 回答
1

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

实际上,我认为上述问题是由于我的牛人git rebase -i在尝试修复被拒绝的提交时没有正确运行引起的。但是,多亏了 reflog,我们才能恢复一切!

于 2008-09-30T23:56:21.880 回答
0

我一直在写一些关于如何同时使用 Subversion 和 Git 的博客,并且我还发布了一些基本的截屏视频。在这里收集所有内容:http ://www.tfnico.com/presentations/git-and-subversion

我会尝试一个总结:

  • 去吧!试试看也无妨:)
  • 先从一个小的 Git 项目开始学习。
  • Stick to the command-line until you master it. GUI-tools might just confuse you.
  • If possible, do one-off migrations, leave SVN behind, one project at a time, starting with the small ones.
  • If you do have to live with a Git and SVN together, be aware that you have to give up many advantages you get from Git, like branches, but you get the "local" benefits (stash, index, speed).
  • If you are one Git user, just do git-svn rebasing and dcommitting by yourself.
  • If you are several Git collaborators, set up a central Git/SVN that only pulls from SVN, while each Git-user dcommits directly back to SVN. More info here.
于 2010-09-27T14:17:17.740 回答