0

我有一个使用 codeigniter 作为框架的 git 存储库。主要的 index.php 与开发不同,因为它设置了一个环境变量(“生产”或“开发”。

告诉 git 忽略这两种不同环境中的变化的最佳方法是什么?我不一定要将它添加到 .gitignore 因为它是一个重要文件。有没有办法简单地抑制变化?

4

1 回答 1

2

你可以只修改文件而不提交它,但这很烦人。还有一些复杂的方法可以利用多个分支和变基。但这也变得非常混乱。

我找到的最简单的解决方案是在您的生产环境中使用污迹过滤器。有关详细信息,请参阅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可能不可用。

于 2012-11-29T00:34:21.807 回答