【问题标题】:git-svn and unfortunate svn pre-commit hooksgit-svn 和不幸的 svn 预提交钩子
【发布时间】:2012-05-30 18:13:31
【问题描述】:

我有一个 git 存储库,其中包含大约 30 个修订版,我想将其导入现有的 SVN 存储库。不幸的是,SVN 存储库有一堆预提交挂钩,需要提交消息中的某些信息、某些文件类型中的某些 SVN 关键字等等。这些都与我正在检查的内容无关,或者无论如何,它们不如保留现有的修订历史重要。

在一个完美的世界里,我也许可以这样做:

  1. 劫持第一个 git 修订版(以及任何其他引入新文件的修订版),使其包含必要的 SVN 关键字并设置相应的 svn:keywords 属性
  2. 批量编辑所有 30 条 git 提交消息以添加所需的提交消息字符串

在一个不太完美的世界里,我可以让 git-svn 以某种方式预先添加 skip-pre-commit-checks(?——我以前从未使用过它),然后我至少会有所有的修订里面有历史。

想法?


更新添加: skip-pre-commit-checks 实际上不是一个东西;我被特定项目中的特定黑客行为误导了。

【问题讨论】:

  • 你可以编辑你的提交信息,见stackoverflow.com/questions/179123/…
  • 有没有办法以非交互方式做到这一点?我不想手动编辑 30 条提交消息。不必手动识别 30 次提交也很好,尽管我想我可以通过足够的脚本来解决这个问题。
  • 是否可以暂时挂起 SVN 中的 pre-commit 钩子?

标签: git svn git-svn


【解决方案1】:

你有几个选择。

批量重写提交消息

您可以使用git filter branch 重写您的提交消息:

如果您需要将 Acked-by 行添加到最后 10 次提交(都不是合并),请使用以下命令:

git filter-branch --msg-filter '
    cat &&
    echo "Acked-by: Bugs Bunny <bunny@bugzilla.org>"
' HEAD~10..HEAD

手动编辑 30 条提交消息

你可以git rebase interactive通过选择编辑模式重写你的提交信息

git rebase -i HEAD~30

edit f7f3f6d changed my name a bit
edit 310154e updated README formatting and added blame
edit a5f4a0d added cat-file
...

然后

git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
git commit -v --amend
<editor launched, edit commit message>
git rebase --continue
....

将所有内容压缩到一个提交中

您还可以使用 git rebase 将所有内容压缩到一个提交中,从而限制您的工作量

git rebase -i HEAD~30

pick f7f3f6d changed my name a bit
squash 310154e updated README formatting and added blame
squash a5f4a0d added cat-file
...

<editor launched, edit the combined commit message>

主动自动化

如果这是您可能需要定期执行的操作,您可以使用 prepare commit mesg 挂钩为您的提交消息的格式添加一些一致性。

请注意,与 git 不同,您不能跳过 svn 中的预提交挂钩(至少不能通过任何内置机制),因此尝试执行类似 git commit -va --no-verify 之类的操作将无效,因为下次运行 @ 987654329@,同样会失败(当然,如果有什么失败的话)。

【讨论】:

  • 我认为 git filter-branch 正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 2014-03-22
  • 2011-01-02
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多