【问题标题】:How to disallow git commit -a option如何禁止 git commit -a 选项
【发布时间】:2012-09-27 09:35:02
【问题描述】:

我们是一组开发同一组文件的开发人员。我想确保没有人执行 git commit -a -m 或 git commit -am

包括我在内的开发人员都有git commit -am/ -a -m 这个坏习惯,而且我们有很多特定于机器的配置文件,每次都会提交。我可以要求我们所有人都使用 --assume-unchanged 但我想让开发人员根本无法使用 -a 标志

我可以通过某种方式破解来实现这一点吗?

【问题讨论】:

  • 我无法回答这个问题,但如果目的是专门防止提交 conf 文件,那么创建 .gitignore 可能会有所帮助。

标签: git


【解决方案1】:

我建议你以不同的方式解决这个问题:

  1. 使用.gitignore file 专门排除不能提交的文件或
  2. 使用 pre-commit hook 自动拒绝看起来像是使用 -a 进行的提交。

当你坚持禁用 -a 标志时:好吧,git 是开源的。查找和禁用读取 -a 命令行参数并重新编译的代码应该不会那么难。但这意味着每当发布新版本的 git 时,您都必须再次这样做,所以我真的不建议这样做。

【讨论】:

  • 即使我反对重写 git。我将尝试学习编写 precommit 钩子。有什么好的资源吗?
  • @RanjithR 您可以从查看任何 git 存储库中的 .git/hooks/*.sample 文件开始。但我不知道-a 是否没有暂存所有修改过的文件之前调用那个钩子
  • 我认为 .gitignore 文件会是更好的解决方案。它仍然可以让人们通过使用 -a 来节省时间,但会阻止他们提交任何特定于机器的文件。
  • 问题是 .gitignore 将完全忽略该文件。有时我们会在 conf 文件中添加一些东西,然后我们需要提交它们。然后通知每个人进行备份,我们小心地合并它们。
  • @RanjithR 那么你的接受是否意味着你做了一个预提交挂钩?如果是这样,请将其编辑为其他人查看的答案
【解决方案2】:

您可以编写一个包装器git 脚本来检查命令是否为commit 并设置-a 标志。然后你可以放弃它并将其他所有内容传递给实际的git,或者提示“Bad User!Bad!”。将该脚本放在实际 git 路径之前的路径中,或者为您的 gitwrap 创建一个别名。

@PiotrZierhoffer 发现了这个:

这里有一个例子: Disable -m in git

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2014-12-02
    • 2011-02-17
    • 2017-04-15
    • 2011-04-01
    • 2017-12-30
    • 1970-01-01
    • 2011-08-31
    • 2017-12-09
    相关资源
    最近更新 更多