是否可以指定某些更改永远不应该在git中提交



我正在处理一个访问FTP服务器上传图像的项目。在本地开发时,它无法访问FTP服务器,因为它只能在特定的虚拟私有云中访问。

为了在本地测试它,我需要重写部分代码以跳过FTP上传。显而易见的答案是为环境变量或其他东西添加某种检查,并根据环境的不同上传或不上传。然而,当我请求允许进行此更改时,由于优先级低,它一直被推迟。

问题是,我知道最终我会做出这些临时更改,然后意外地提交它们。我以前做过一次,但幸运的是,我及时意识到了自己的错误,恢复了更改。

有没有什么方法可以让我做出必要的临时更改,然后立即对相关文件进行git prevent-commit filename.php或类似的更改,这样,如果我将来试图提交这些更改,或者类似的事情,git就会对我大喊大叫?

这本质上是一个Git常见问题解答:如何告诉Git忽略被跟踪的文件?重要的是要强调;真实的";这样做的方法。但是,在索引条目上设置--skip-worktree标志对于您的特定目的来说已经足够接近了。您需要记住,有时取消设置标志。另请参阅Git-';假设不变';和';跳过工作树';

TL;DR

预提交挂钩的设计正是为了做到这一点:拒绝任何具有某些可测试特性的未来提交。

详细信息

您可以创建一个预提交挂钩来拒绝任何包含一些未提交标记的提交。预提交挂钩在实际创建提交之前在本地机器上运行,因此如果它们失败,您甚至无法编写提交消息。

以下是最简单的预提交挂钩,它将拒绝任何在提交的更改中发现DO-NOT-COMMIT的提交:

#!/bin/sh
exec 1>&2 # redirect output to stderr
if git diff --cached | grep DO-NOT-COMMIT; then
echo "DO-NOT-COMMIT found - rejecting commit"
exit 1
fi

将此文件保存为沙盒中的.git/hooks/pre-commit,使其可使用chmod +x .git/hooks/pre-commit执行,下次您尝试在任何地方使用DO-NOT-COMMIT提交文件时,Git会根据您的意愿对您大喊大叫。

然后,我们修改该程序进行本地测试,用# DO-NOT-COMMIT注释开始您的更改,您就知道您不会意外地提交它。

在每个沙箱中安装此

预提交挂钩的麻烦在于,它们必须在每个沙箱中单独安装和启用。因此,如果你正在为自己寻找解决方案,那么在你的沙盒中安装预提交挂钩,你就可以开始了。但是,如果你在整个组织范围内寻找东西,它们不是合适的工具。在这种情况下,将需要服务器端挂钩。

但这也可能是一个特性:预提交挂钩是本地的,完全在您的控制之下。无需获得任何人的许可即可为自己启用它们。

相关内容

最新更新