У меня есть несколько файлов в моем репозитории bitbucket, которые являются файлами конфигурации, однако он содержит информацию о конфигурации для запуска, однако для локальных конфигураций используется совершенно другой набор правил, однако я несколько раз напутал и добавил измененные правила и нажал их, и это стало проблемой.
Есть ли способ иметь установленный файл в репо, и его нельзя перезаписать, коснуться / добавить или нажать.
Аналогично git update-index --assume-unchanged
Нет надежного способа сохранить файл в репо, игнорируя локальные изменения в этом файле. Лучшее решение - организовать процесс сборки так, чтобы локальные различия вводились либо (а) вне вашего рабочего дерева, либо (б) в файлах, которые вы не храните в системе управления версиями и, следовательно, можете исключить с помощью .gitignore
.
Например, предположим, что у вас есть файл app.config
. Ему нужен один набор значений в локальных сборках и другой набор значений на производственном сервере (или, возможно, даже больше наборов значений в разных серверных средах). Предположим, что текущая копия в системе управления версиями выглядит так:
db-server = devdb.mydomain.com
db-user = svcDevDb
db-password = s3cr3t
Вы могли сделать следующее:
app.config
из коммитов в будущем: git rm --cached app.config
app.config
в ваш файл .gitignore
app.config-template
, содержащий заполнители для значений, которые будут различаться в разных средах.Это может выглядеть как
db-server = ${db-hostname}.mydomain.com
db-user = ${db-user}
db-password = ${db-password}
...
$ mkdir propfiles
$ cat > propfiles/dev
db-hostname = devdb
db-user = svcDevDb
db-password = s3cr3t
app.config
, заполнив шаблон; и это становится частью вашего процесса сборки. (Может показаться, что я замалчиваю здесь сложную часть, но любой достойный фреймворк должен либо делать это за вас, либо иметь плагин, который это делает.)Итак, вы add
эти изменения и commit
их. Теперь при сборке для среды dev
вы указываете, что значения должны быть взяты из propfiles/dev
. Для локальных сборок вы можете создать свой собственный файл local
; вы можете сохранить его вне рабочего дерева или добавить propfiles/local
в .gitignore
. Вы можете создать файл настроек local-defaults
для системы управления версиями с намерением, чтобы люди скопировали его и отредактировали копию, чтобы создать свой собственный локальный файл настроек; но дело в том, что локальные изменения не вносятся напрямую в файлы, находящиеся в системе управления версиями.
Это также означает, что ваш рабочий файл propfile может находиться вне системы контроля версий и поддерживаться в безопасной среде (например, на сервере сборки, к которому не все имеют полный доступ). В нашем примере файл конфигурации содержит пароль, поэтому возможность сохранить рабочий пароль (и ваш личный пароль из локального файла) вне системы управления версиями стоит, возможно, даже больше, чем предотвращение случайных фиксаций изменений локальной конфигурации этот случай.
Есть и другие решения, и детали всегда могут отличаться; но дело в том, что лучше рассматривать как проблему сборки, чем проблему управления версиями.