我有一个使用 codeigniter 作为框架的 git 存储库。主要的 index.php 与开发不同,因为它设置了一个环境变量(“生产”或“开发”。
告诉 git 忽略这两种不同环境中的变化的最佳方法是什么?我不一定要将它添加到 .gitignore 因为它是一个重要文件。有没有办法简单地抑制变化?
我有一个使用 codeigniter 作为框架的 git 存储库。主要的 index.php 与开发不同,因为它设置了一个环境变量(“生产”或“开发”。
告诉 git 忽略这两种不同环境中的变化的最佳方法是什么?我不一定要将它添加到 .gitignore 因为它是一个重要文件。有没有办法简单地抑制变化?
你可以只修改文件而不提交它,但这很烦人。还有一些复杂的方法可以利用多个分支和变基。但这也变得非常混乱。
我找到的最简单的解决方案是在您的生产环境中使用污迹过滤器。有关详细信息,请参阅git book。您可以在结帐时使用涂抹过滤器将某个单词替换为其他单词。
在我的设置中,我使用此过滤器(您可以将其添加到服务器上的 .git/config 文件中):
[filter "htproduction"]
smudge = sed 's/\\$site-mode\\$/$site-mode:production$/'
clean = sed 's/\\$site-mode.*\\$/$site-mode$/'
要激活此过滤器,请将此行添加到 .git/info/attributes (如果该文件不存在,则创建该文件):
index.php filter=htproduction
这样做的效果是,所有出现的都在您的服务器上$site-mode$
替换为。$site-mode:production$
现在在你的 index.php 文件中做这样的事情:
if (strpos("$site-mode$", "production") !== false)){
do_only_on_server();
}
强烈建议您阅读smudge filters,了解发生了什么以及我为什么不这样做if ("$site-mode$" == "$site-mode:production$")
(这不起作用)。
注意:此答案假设您在服务器上运行 linux。此方法也适用于 Windows,但sed
可能不可用。