Как зафиксировать и получить частичные изменения в файле свойств в Git? - PullRequest
2 голосов
/ 07 марта 2019

Например, в репозитории у меня есть файл свойств, подобный этому:

database.url=https://localhost...
error.message=some message

Таким образом, свойства типа database.url используются для локальной среды разработки и никогда не должны выбираться или фиксироваться. Но другие, такие как error.message, являются общей конфигурацией приложения, которую нужно постоянно извлекать и фиксировать.

Так что каждый раз, когда этот файл изменяется, я всегда получаю эту ошибку:

error: Your local changes to the following files would be overwritten by checkout:
    config/local.properties

Чтобы решить эту проблему, я просто сохраняю свою локальную конфигурацию во временном файле, затем выполняю git checkout -- config/local.properties, после чего я могу теперь извлекать, извлекать, объединять, фиксировать или все, что мне нужно, и затем я могу теперь снова написать свою локальный конфиг.

Это очень скучно, отнимает много времени и подвержено ошибкам. Есть ли лучший способ сделать это? Разделить файл не вариант.

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

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

Как правило, это означает, что вы извлекаете исходную структуру, в которой файл свойств является просто шаблоном с заполнителями для локально определенных значений

database.url=$DBURL
error.message=Some message

Конечно, вы не можете запустить это напрямую.Ваш инструмент сборки объединяет этот шаблон с локально сохраненным файлом свойств (который находится вне рабочего дерева или равен .gitignore d) для создания файла реальных свойств (который сам по себе также находится вне рабочего дерева git или * 1008).* г).

Опять же, есть много вариантов этого.Если у вас уже есть значительный процесс сборки, который генерирует много новых файлов (например, проект Java, или интерфейсный проект, который связан и / или минифицирован, и т. Д.), Тогда это может быть так же просто, как наличие целевого каталога для сборкиотдельно от рабочего дерева, которое зарегистрировано (например, согласно типичной структуре проекта Maven).Или, если вы хотите выполнить рабочее дерево на месте, то файл, который вы регистрируете, может иметь имя my.properties.template, а процесс сборки может генерировать my.properties, поэтому вы .gitignore my.properties.

0 голосов
/ 12 апреля 2019

На данный момент лучший способ, который я нашел, - это использовать git stash перед извлечением или объединением и git stash pop после этого.Возможно, есть лучший способ сделать это, но я буду придерживаться этого, пока не найду лучшее решение.

...