Как получить файлы в репо, игнорируя локальные изменения

У меня есть несколько файлов в моем репозитории bitbucket, которые являются файлами конфигурации, однако он содержит информацию о конфигурации для запуска, однако для локальных конфигураций используется совершенно другой набор правил, однако я несколько раз напутал и добавил измененные правила и нажал их, и это стало проблемой.

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

Аналогично git update-index --assume-unchanged

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
39
1

Ответы 1

Нет надежного способа сохранить файл в репо, игнорируя локальные изменения в этом файле. Лучшее решение - организовать процесс сборки так, чтобы локальные различия вводились либо (а) вне вашего рабочего дерева, либо (б) в файлах, которые вы не храните в системе управления версиями и, следовательно, можете исключить с помощью .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 может находиться вне системы контроля версий и поддерживаться в безопасной среде (например, на сервере сборки, к которому не все имеют полный доступ). В нашем примере файл конфигурации содержит пароль, поэтому возможность сохранить рабочий пароль (и ваш личный пароль из локального файла) вне системы управления версиями стоит, возможно, даже больше, чем предотвращение случайных фиксаций изменений локальной конфигурации этот случай.

Есть и другие решения, и детали всегда могут отличаться; но дело в том, что лучше рассматривать как проблему сборки, чем проблему управления версиями.

Другие вопросы по теме