请提供有效使用git与svn的提示。你的“最佳实践”是什么?
以下是我最近学到的一些内容:
git svn dcommit
前,务必先执行 git svn rebase
dcommit
时,请从一个暂存分支进行 - 如果你(或 git)出错了,只需删除该分支并重新开始即可更容易地恢复如果 svn dcommit
在大型提交的过程中中断,并且您似乎已经丢失了所有历史记录,请按照以下步骤操作:
如何恢复:
首先,打开 .git/logs/HEAD
找到处于您 git 存储库顶部的提交哈希值。希望您能记得提交信息并能够找到它,但应该很明显
返回到您的现在出错的工作目录下:
git reset --hard <log 中的哈希值>
这将使您的工作目录回到您执行 git-svn dcommit 之前的状态。然后执行:
git-svn rebase git-svn dcommit
--prefix=svn/
。这会创建更好的分支名称。clone
或init
时,不要忽略--trunk
、--tags
和--branches
参数。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中找到。git svn dcommit
将在第一次拒绝提交时停止处理提交,您需要从git reflog中恢复剩余的提交。git rebase -i
引起的。但是,由于reflog,我们能够恢复所有内容!我最近写了一些关于如何同时使用Subversion和Git的博客,并发布了一些基础的屏幕录像。这里汇总了所有内容:http://www.tfnico.com/presentations/git-and-subversion
我来简单总结一下:
dcommit
不经常出错,即使出错了,恢复起来也不难。 - andy