Как запретить Spring Config сбрасывать мой локальный git-репозиторий на origin / master - PullRequest
0 голосов
/ 09 декабря 2018

Я использую Spring Config для предоставления в git-сервере конфигурации для некоторых микросервисов Spring Boot.

Это прекрасно работает, но когда я путешествую, мне иногда приходится работать в автономном режиме.
Я настроил локальный профиль микросервиса Spring Config для получения конфигурации из моего локального git (file :), а не HTTPgit server, так что я могу изменять конфигурацию и тестировать, не имея доступа к основному git серверу.

Проблема в том, что я не могу сделать "git push", чтобы отправить изменения в главный репозиторий, Spring Confgigотмечает это и показывает это сообщение:

The local repository is dirty or ahead of origin. Resetting it to origin/master.

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

Как я могу сделать Spring Config просто для получения последней зафиксированной конфигурации в моемигнорирование локального мерзавца, если он передан или нет на главный сервер?

Ответы [ 4 ]

0 голосов
/ 26 июля 2019

Вы можете использовать идентичный каталог как не только бэкэнд файловой системы, но и git-репозиторий для файлов свойств.Вы должны сделать 2 файла bootstrap.properties для сервера конфигурации.Один для файлового бэкэнда, а другой для git-репозитория.Например, я хочу использовать файловую систему для разработки и git-репозиторий для работы.Я создал bootstarp-dev.properties и bootstrap-prd.properties.

## bootstarp-dev.properties
server.port=8887 // If you want to launch both a config server for dev and a config server for prd, you must assign different ports.
spring.cloud.config.server.native.searchLocations=file://PATH_OF_YOUR_DIRECTORY
## bootstarp-prd.properties
server.port=8888
spring.cloud.config.server.git.uri=YOUR_GIT_URL

Если вы запустите сервер конфигурации с параметром -Dspring.profiles.active=dev,native, сервер конфигурации получит доступ к файлам свойств в виде локальных файлов.

Если вы запускаете свой сервер конфигурации с параметром -Dspring.profiles.active=prd, сервер конфигурации получает доступ к файлам свойств в виде файлов git.

Готово.

0 голосов
/ 13 февраля 2019

На самом деле, просматривая исходный код spring-cloud-config, вы увидите:

            if (!isClean(git, label)) {
                this.logger.warn(
                        "The local repository is dirty or ahead of origin. Resetting"
                                + " it to origin/" + label + ".");
                resetHard(git, label, LOCAL_BRANCH_REF_PREFIX + label);
            }

Решение

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

Вам потребуется зафиксировать:

spring:
cloud:
    config:
        allowOverride: true
        overrideNone: false

В свойствах конфигурацииты используешь.например: локальная / my-app.properties.Если у вас есть удаленное хранилище для хранения всех свойств, убедитесь, что оно объединено с master.

Затем вы можете изменить любое свойство приложения по своему усмотрению в application.yml / application.properties в приложении Spring Boot.,Файл удаленных свойств не будет переопределен.

Альтернатива

В качестве альтернативы, вы можете просто удалить файл конфигурации для среды, над которой вы работаете как среда разработки.,В моем примере выше вы можете просто удалить local / my-app.properties из удаленного репо и зафиксировать мастер.Так что он никогда не будет перезаписывать свойства локального приложения оттуда, потому что для cloud-config не существует файлов свойств.

Пожалуйста, прокомментируйте, если что-то неясно, чтобы я мог улучшить инструкцию.

0 голосов
/ 12 июня 2019

У меня была похожая проблема.(разница в том, что я не использую микросервис Spring Config, а запускаю сервер конфигурации Spring в качестве отдельного приложения)

Но это должно работать и для вас: вместо запуска локального сервера конфигурации с локальным репозиторием git(файл :) Я запустил его с родным весенним профилем.

spring:
   profiles:
      active: native
   cloud:
        config:
            server:
                native:
                    searchLocations: file:///path/to/local/git/repository

Так что теперь содержимое локального репозитория обслуживается, и при доступе не выполняется сброс

0 голосов
/ 09 декабря 2018

Как я могу сделать Spring Config только для того, чтобы получить последнюю подтвержденную конфигурацию в моем локальном git, игнорируя, если она отправлена ​​или нет на главный сервер?

Это то, что --assume-unchagedпредназначен для.


--assume-unchaged

Поднимите флаг --assume-unchaged в этом файле, чтобы он не отслеживал изменения в этом файле

--[no-]assume-unchanged

Если указан этот флаг, имена объектов, записанные для путей, не обновляются.

Вместо этого этот параметр устанавливает / отменяет бит assume unchanged для путей.

Когда бит assume unchanged равен на , пользователь обещает не изменятьfile и позволяет Git предполагать, что файл рабочего дерева соответствует тому, что записано в индексе.Если вы хотите изменить файл рабочего дерева, вам нужно сбросить бит, чтобы сообщить Git.Это иногда полезно при работе с большим проектом в файловой системе с очень медленным системным вызовом lstat (2) (например, cifs).

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...