【问题标题】:How can I create a custom cleanup mode for git?如何为 git 创建自定义清理模式?
【发布时间】:2011-02-05 07:22:49
【问题描述】:

我想要一个提交消息清理,它不一定会删除消息本身中以# 开头的行。默认的--cleanup=strip 删除以# 字符开头的所有 行。

不幸的是,Trac 引擎的 wiki 格式化程序在代码块的开头使用哈希来表示语法类型。在我的提交消息中使用引擎的语法时,这会造成困难。

例子:

Created demo of perl added to helloworld.pl

{{{
#!/usr/bin/perl
use strict;
# say hi to the user.
print "hello world\n";

}}}

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#   added:   helloworld.pl
# and so on and so forth...

我希望在最终记录的提交消息中得到以下结果:

commit 1234567890123456789012345678901234567890
Author: Danny <...>
Date:   Wed Apr 7 13:34:29 2010 -0400

     Created demo of perl added to helloworld.pl

     {{{
     #!/usr/bin/perl
     use strict;
     # say hi to the user.
     print "hello world\n";

     }}}

我想使用一个自定义过滤器,从提交消息的底部向上删除所有以哈希开头的行。留下我单独添加的消息中的行。我可以在 git 的哪里或如何指定它?

注意,创建一个 sed 或 perl 脚本来执行操作不是问题,只需要知道 在哪里将其挂钩到 git 中。

对于我的问题的混乱,我深表歉意,我没有意识到它有多么含糊。

【问题讨论】:

  • @Danny:我很确定您在问这个关于提交消息清理的问题(由 git-commit 标记和“...嵌入提交消息中...”) -但是您的示例看起来不太像提交消息,并且您说的是“文件底部”,而不是“消息底部”。假设我的解释是正确的,您可能希望将示例扩展为完整的提交消息,并稍微澄清一下您的措辞。
  • 这个问题是关于提交信息的,我已经尝试相应地澄清它。
  • 供将来参考,另请参阅Start a git commit message with a hashmark (#)

标签: git trac git-commit


【解决方案1】:

我认为您需要使用两件事来完成此操作:

  • 指定清理模式。 git commit 采用 --cleanup=&lt;mode&gt; 选项;您可以使用--cleanup=whitespace 来防止 git 剥离任何 cmets。您可能想要的另一个选择是逐字逐句,这(惊喜)不会触及信息。如果您有兴趣,请参阅man page 了解其他选择。

  • 使用commit-msg 挂钩来编辑消息。如果您以前没有使用过钩子,手册页称为githooks,它们是放置在.git/hooks 中的脚本,它们在适当的时间执行。 commit-msg 钩子使用单个参数执行,该文件包含建议的提交消息。它可以就地编辑消息,如果返回失败(非零),则提交将被中止。因此,将您的自定义剥离脚本编写为.git/hooks/commit-msg,确保它是可执行的,然后您就可以设置了。请注意,不会跟踪 hooks 目录;如果您想与其他人共享此内容,一种常见的方法是将其放在您的存储库中的某个位置,然后将.git/hooks/commit-msg 符号链接到它。

【讨论】:

  • 钩子不是配置的一部分。如果您想将它们放在您创建的新存储库中,您可以使用--template 选项到git initgit clone。这使您可以指定模板目录而不是系统范围的默认目录;默认钩子都是从模板目录的钩子目录中复制的。 (请参阅 git init 手册页 kernel.org/pub/software/scm/git/docs/git-init.html )如果您真的需要,您还可以编辑系统范围的模板(通常在 /usr/share/git-core/templates 中)。
  • 为了更容易记住使用模板,您可以在 .gitconfig 中放置别名 - 类似于 myinit = init --template=&lt;template directory&gt;
  • 除了使用别名之外,有没有办法设置默认的清理模式?我在文档中四处查看无济于事。我要么失明,要么根本不可用
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多