强制 Git 拒绝包含特定内容的提交

3

如何在GIT中添加代码注释以防止提交?

原因是有时我会为修复某个问题而同时使用两种不同的策略,例如两个不同的类。那么如果我能在类中添加// DONT COMMIT这样的注释就好了,这样我就不会意外地提交两个并行的类。


1
你可以在自己的预提交钩子脚本中设置基本上任意的限制。否则,我认为这个功能不存在于Git的预制部分中。你还应该考虑允许提交但禁止推送,因为创建本地临时提交以存储不打算推送到任何中央位置的尝试是完全可以的。 - Joachim Sauer
1
你可以编写一个pre-commit hook,扫描暂存的文件,如果发现标记,则拒绝提交。或者你可以改变你的工作习惯,不要在同一个分支上同时处理两件不同的事情 :-) - axiac
2个回答

5
一个功能简单的预提交钩子:pre-commit
#!/usr/bin/env bash


# The text that refuses the commit
# Change it to match your needs; keep it enclosed in single quotes
MARKER='// DONT COMMIT'


# Verify the staged files for the presence of the marker text
if git diff --cached --name-only | xargs grep -q "$MARKER"; then
  echo 'Cannot commit because the "no-commit" marker has been found in one of the staged files.' 1>&2
  # Refuse to commit
  exit 1
fi

将其放入项目中的文件.git/hooks/pre-commit中,并使该文件可执行(chmod +x .git/hooks/pre-commit)。

它只是一个存根,可能在所有情况下都不能按预期工作。扩展它以符合您的需求。

您可以通过在git commit命令行中传递选项-n(或--no-verify)来告诉Git跳过钩子。


0

我不知道你怎么做到的...但我认为你可以通过其他方式获得类似的功能。

  1. 添加一个单独的版本的.py文件,将其添加到.gitignore中(git会忽略此处列出的每个文件)。在测试时,您可以从新的.py中导入此试用类。
  2. 使用git进行此操作。如果您正在尝试新功能,为什么不为您正在测试的内容创建一个新分支: git checkout -b trying_new_class_definition

这样,您就可以通过交换分支来交换两个定义。

如果您更新了主代码库,则可能需要将其重新基于试用分支: git checkout trying_new_class_definition

git rebase master


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