Игнор в Mercurial?
стандартная практика — создать config.local.php, который будет мержится с перезаписью с основным конфигом.
и его уже пихать в игнор.
Эта задачка не должна решаться системой контроля версий.
Вместо этого надо создать несколько конфигов под каждый сервак и сделать пачку
if () { подключаем_конфиг_1 }
elseif () { конфиг_2 }
…

На хабре была статья как это сделать. Не могу найти, но вкратце как я реализовал это в своём велосипеде:
Есть иерархия файлов-настроек:
/settings.php
/settings/live.php
/settings/dev.php
/settings/dev/htmler.php
/settings/dev/resurection.php
/settings/dev/resurection/notebook-hp.php

Все файлы у меня синхронизируются между компами и если я запускаю на своём стационаре, то подключается каскад файлов:
/settings.php
/settings/dev.php
/settings/dev/resurection.php

А если запускаю на ноуте, то дополнительно подключится ещё
/settings/dev/resurection/notebook-hp.php

При этом, settings.php содержит абсолютно все настройки в виде массива. Дочерние файлы могут переопределять некоторые настройки.
Например, /settings/dev.php содержит всего одну строчку:
$settings['debugMode'] = true;

Кстати, на боевой сервак я всё заливаю через меркуриал и в меркуриале есть ветка live которая разворачивается на серваке и является «дырявой версией». В неё не попадают некоторые файлы в т.ч. настройки для моего локальной тачки. Там только два файла:
/setting.php
/settings/live.php.