如何防止Spring Config将我的本地git存储库重置为origin / master

时间:2018-12-09 12:40:26

标签: spring git spring-boot spring-config

我正在使用Spring Config在git服务器中共享一些Spring Boot微服务的配置。

效果很好,但是当我旅行时,有时不得不离线工作。
我已经配置了Spring Config微服务本地配置文件,以便从本地git(文件:)获取配置,而不是从HTTP git服务器获取配置,因此我可以更改配置和测试,而无需访问主git服务器。

问题在于,由于我无法执行“ git push”将更改推送到主存储库,Spring Confgig记录了该内容并显示此消息:

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

并重置它,删除我最近一次的本地提交以及最近的配置更改。

如何使Spring Config仅仅获取本地git中最后提交的配置,而忽略是否将其推送到主服务器?

4 个答案:

答案 0 :(得分:0)

实际上,通过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);
            }

解决方案

因此它将始终尝试执行此操作,唯一的解决方法将类似于以下答案: How spring cloud config use local property override remote property

您需要提交:

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

要使用的配置属性。例如:local / my-app.properties。如果确实有一个用于存储所有属性的远程仓库,请确保将其合并到master。

然后,您可以根据需要在Spring Boot应用程序的application.yml / application.properties中更改任何应用程序属性。远程属性文件不会覆盖它。

替代

或者,您可以只删除正在作为开发环境工作的环境的配置文件。在上面的示例中,您只需从远程存储库中删除local / my-app.properties并提交master。这样一来,它就永远不会打扰在那里覆盖本地应用程序属性,因为不存在用于cloud-config的属性文件。

如果不清楚,请发表评论,以便我改进说明。

答案 1 :(得分:0)

我有类似的问题。 (区别是我没有使用Spring Config微服务,而是将Spring配置服务器作为独立的应用程序运行)

但这也应该对您有用: 我没有使用本地git存储库(文件:)启动本地配置服务器,而是使用本地spring配置文件启动了它。

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

因此现在提供了本地存储库的内容,并且访问时无需进行任何重置

答案 2 :(得分:0)

您可以使用与文件系统后端相同的目录,以及与属性文件相同的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文件的形式访问属性文件。

完成。

答案 3 :(得分:-1)

  

如何使Spring Config仅仅获取本地git中最后提交的配置,而忽略是否将其推送到主服务器?

这就是--assume-unchaged的作用。


--assume-unchaged

提高此文件上的--assume-unchaged标志,使其停止跟踪此文件上的更改

  

--[no-]assume-unchanged

     

指定此标志时,为路径记录的对象名称不会更新。

     

相反,此选项设置/取消设置路径的assume unchanged位。

     

assume unchanged位为 on 时,用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在lstat(2)系统调用非常慢的文件系统(例如cifs)上处理大型项目时,这有时会很有帮助。

     

如果需要修改索引中的该文件,Git将失败(正常)。合并提交时;因此,如果假定未跟踪的文件在上游进行了更改,则需要手动处理这种情况。

enter image description here