Я не думаю, что есть одно решение, которое работает для всех случаев, так как это может зависеть от чувствительности данных в файлах конфигурации или используемого вами языка программирования и многих других факторов. Но я думаю, что важно сохранять файлы конфигурации для всех сред под контролем источника, поэтому вы всегда можете знать, когда это было изменено, и кем и что еще более важно, иметь возможность восстановить его, если что-то пойдет не так. И они будут.
Итак, вот как я это делаю. Это обычно для проектов nodejs, но я думаю, что он работает и для других фреймворков и языков.
Что я делаю, это создать каталог configs
в корне проекта, а в этом каталоге хранить несколько файлов для всех сред (а иногда и отдельных файлов для среды каждого разработчика), которые отслеживаются в контроле источника. И есть фактический файл, который код использует named config
в корне проекта. Это единственный файл, который не отслеживается. Таким образом, это выглядит так
root
|
|- config (not tracked)
|
|- configs/ (all tracked)
|- development
|- staging
|- live
|- James
Когда кто-то проверяет проект, он копирует файл конфигурации, который он хочет использовать в файле untrecked config
, и он может редактировать его по своему усмотрению, но также ответственный за копирование этих изменений до того, как он приложит к другим файлам среды по мере необходимости.
И на серверах неизведанный файл может просто быть копией (или ссылкой) отслеживаемого файла, соответствующего этой среде. В JS вы можете просто иметь 1 строку, чтобы потребовать этот файл.
Этот поток может быть сначала немного сложным, но он имеет большие преимущества: 1. Вам никогда не придется беспокоиться о том, что файл конфигурации удаляется или изменяется на сервере без резервного копирования 2. То же самое, если у разработчика есть некоторая настраиваемая конфигурация на его машине, и его машина перестает работать по какой-либо причине. 3. Перед любым развертыванием вы можете различать файлы конфигурации для development
и staging
, например и посмотреть, нет ли чего-то, что не хватает или сломано.
Следующая команда дает мне все файлы, которые не содержат шаблон foo
:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
другая альтернатива, когда grep не имеет-L опции (IBM AIX, например), с только grep и оболочка:
for file in * ; do grep -q 'my_pattern' $file || echo $file ; done
Если ваш grep имеет параметр -L
(или - файлы без совпадений
)):
$ grep -L "foo" *
I had good luck with
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
My attempts with grep -v
just gave me all the lines without "foo".
Вам действительно понадобится:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$
Взгляните на ack
. Он автоматически выполняет исключение .svn
, предоставляет регулярные выражения Perl и представляет собой простую загрузку одной программы Perl.
Эквивалент того, что вы ищете, должен быть в ack
:
ack -L foo