请提供有关在svn中有效使用git的提示。你的“最佳实践”是什么?
答案 0 :(得分:4)
以下是我最近学到的一些内容:
git svn rebase
git svn dcommit
dcommit
时,从临时的分段分支执行它 - 如果你(或git)搞砸了,只需删除分支并重新开始就可以更容易恢复当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
时,请勿忽略--branches
,clone
和init
个参数。
获取是一个比较耗时的步骤,因此设置一个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
我会尝试摘要: