你如何使用git svn?

14

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

4个回答

4

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

  1. 在执行 git svn dcommit 前,务必先执行 git svn rebase
  2. 当你执行 dcommit 时,请从一个暂存分支进行 - 如果你(或 git)出错了,只需删除该分支并重新开始即可更容易地恢复

如果 svn dcommit 在大型提交的过程中中断,并且您似乎已经丢失了所有历史记录,请按照以下步骤操作

如何恢复:

首先,打开 .git/logs/HEAD

找到处于您 git 存储库顶部的提交哈希值。希望您能记得提交信息并能够找到它,但应该很明显

返回到您的现在出错的工作目录下:

git reset --hard <log 中的哈希值>

这将使您的工作目录回到您执行 git-svn dcommit 之前的状态。然后执行:

git-svn rebase git-svn dcommit


同意第一点,但我从未发现自己需要执行第二点。dcommit 不经常出错,即使出错了,恢复起来也不难。 - andy
今天它决定在执行过程中崩溃,留下了我工作副本中缺失了许多更改的情况。 - 1800 INFORMATION

4
当您创建克隆时,请使用--prefix=svn/。这会创建更好的分支名称。
此外,在执行cloneinit时,不要忽略--trunk--tags--branches参数。
提取是耗时较长的步骤之一,因此设置一个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中找到。

你能再解释一下fetch trick吗?它是做什么的?你只需要在后台一遍又一遍地运行它吗?完成这个操作之后,你如何将更改合并到你的分支中? - 1800 INFORMATION
好的,关于fetch添加了一些额外的信息。 - andy

1
如果您在SVN存储库中有一个后提交挂钩可以拒绝提交,那么git svn dcommit将在第一次拒绝提交时停止处理提交,您需要从git reflog中恢复剩余的提交。
实际上,我认为上述问题是由我的同事在尝试修复被拒绝的提交时没有正确运行git rebase -i引起的。但是,由于reflog,我们能够恢复所有内容!

0

我最近写了一些关于如何同时使用Subversion和Git的博客,并发布了一些基础的屏幕录像。这里汇总了所有内容:http://www.tfnico.com/presentations/git-and-subversion

我来简单总结一下:

  • 只管去做吧!尝试一下不会有坏处 :)
  • 从一个小的 Git 项目开始学习。
  • 在你掌握它之前,坚持使用命令行。GUI 工具可能会让你感到困惑。
  • 如果可能的话,请进行一次性迁移,将 SVN 留在身后,从小型项目开始逐个进行,逐步淘汰。
  • 如果您必须同时使用 Git 和 SVN,请注意您必须放弃从 Git 获得的许多优点,如分支,但您可以获得“本地”好处(stash、index、速度)。
  • 如果你是一个 Git 用户,自己做 git-svn rebase 和 dcommit。
  • 如果您是几个 Git 协作者,请设置一个中央 Git/SVN,该协作者仅从 SVN 拉取,而每个 Git 用户直接向 SVN 进行 dcommits。更多信息请点击此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接