Игнорировать изменения после добавления git-f


Я только что скачал (не клонированный!) КАКЕФП 2.2.4. Каталог содержит файл .gitignore:

# only the relevant part here
/app/Config
/app/tmp

Теперь я выполнил эту команду, потому что каталоги (и их начальное содержимое) Config и tmp в противном случае никогда бы не были зафиксированы:

git add -f Config
git add -f tmp

У меня нет проблем с каталогом tmp, потому что там не изменяются файлы, будут созданы только новые файлы!

Напротив, мне пришлось изменить некоторые файлы (например, конфигурация базы данных) в папке Config. Но Git теперь хочет, чтобы я git add снова изменил эти файлы!

Как я могу игнорировать эти изменения?

Я также мог бы повторно запустить все репозиторий Git, потому что я не слишком много создавал/изменял.


Мои модификации CakePHP для решения актуальной проблемы

Мой новый *.gitignore файл для CakePHP:

# removed: /app/Config/

# start edit
/app/Config/*
!/app/Config/Schema/
!/app/Config/*.default.php
# end edit

/app/tmp
/lib/Cake/Console/Templates/skel/tmp/
/plugins
/vendors
/build
/dist
.DS_Store
/tags

Я также добавил все файлы в /app/Config с . по умолчанию:

  • Acl.ini.default.php.

  • Acl.default.php.

  • Bootstrap.default.php.

  • Core.default.php.

  • База данных.php.по умолчанию --> database.default.php

  • Email.php.по умолчанию --> database.default.php

Редактировать: Лучше иметь *.default.php, чем *.php.default, потому что это предотвращает вывод файла в браузер в случае сбоя mod_rewrite (хотя это очень маловероятно).

Author: ComFreek, 2012-12-26

1 answers

Git не отслеживает каталоги; только файлы. Поэтому, когда вы запускаете git add -f Config, git просто добавляет все файлы в рабочее дерево под Config, а не сам каталог. Поскольку эти файлы затем отслеживаются Git (таким образом, переопределяя правила игнорирования), их изменение приведет к тому, что Git сочтет рабочее дерево грязным.

Эти правила для Config и tmp существуют в файле .gitignore CakePHP, потому что Git может эффективно игнорировать весь каталог; нет необходимости явно создавать пустой каталоги, так как CakePHP предположительно создаст их автоматически.

Если по какой-то причине вы хотите, чтобы Git знал, что там должен быть каталог, но игнорировал его содержимое, то вы можете добавить файл .gitignore внутри Config и tmp, содержащий правило *, которое скажет ему игнорировать все, что находится в этом каталоге. Однако, поскольку файл .gitignore существует, он будет поддерживать сам каталог.


Обновление: Если вы хотите сохранить "значение по умолчанию" конфигурация в Git, которая должна быть настроена для каждой рабочей копии, вам лучше зафиксировать файл конфигурации шаблона под другим именем, который можно скопировать в новый (игнорируемый) файл, когда хранилище клонировано и заполнено параметрами конфигурации, зависящими от среды.

На мой взгляд, сами конфигурационные файлы не должны находиться под контролем версий, поскольку они должны быть адаптированы к среде, в которой используется рабочая копия, поэтому таким образом следует сохранять копии шаблонов кажется естественным решением (это то, что делает Wordpress).

 3
Author: Will Vousden, 2012-12-26 14:38:33