【问题标题】:How to commit and fetch partial changes inside a properties file in Git?如何在 Git 的属性文件中提交和获取部分更改?
【发布时间】:2019-07-29 12:23:26
【问题描述】:

例如,在存储库中,我有一个这样的属性文件:

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,之后我现在可以拉取、签出、合并、提交或任何我需要的东西,然后我现在可以再次编写我的本地配置。

这非常无聊、耗时且容易出错。有更好的方法吗?拆分文件不是一种选择。

【问题讨论】:

    标签: git properties-file


    【解决方案1】:

    到目前为止,我发现解决它的最佳方法是在结帐或合并之前使用git stash,然后在之后使用git stash pop。也许有更好的方法可以做到,但我会坚持下去,直到找到更好的解决方案。

    【讨论】:

      【解决方案2】:

      如何最好地解决这个问题取决于您的构建工具,但一般原则是本地配置值不应该在您的存储库中 - 并且包括工作树,除非您可以使用 .gitignore 绕过它们(其中,由于不能分割文件,所以不能直接这样做)。

      通常这意味着您签出到一个源结构,其中属性文件只是一个模板,其中包含用于本地定义的值的占位符

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

      当然你不能直接运行它。您的构建工具将此模板与本地存储的属性文件(位于工作树之外或.gitignored)组合以生成真实属性文件(其本身也位于 git 工作树之外或@987654324 @d)。

      同样有很多变化。如果您已经有一个相当大的构建过程,会生成大量新文件(例如,Java 项目,或捆绑和/或缩小的前端项目等),那么它可能就像拥有构建的目标目录一样简单与签入的工作树分开(例如,根据典型的 Maven 项目结构)。或者,如果您想就地执行工作树,那么您签入的文件可能会命名为 my.properties.template,并且构建过程可能会生成 my.properties,因此您的 .gitignore my.properties

      【讨论】:

      • 对于一个 maven 项目来说,这看起来像是一个有趣的解决方案,不幸的是我做不到,我正在使用 Hybris 和 Ant,并且我有一些架构限制来执行这样的更改
      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2020-08-05
      • 2016-07-05
      • 2012-09-30
      • 1970-01-01
      • 2016-06-08
      相关资源
      最近更新 更多