首页 > 解决方案 > 如何在 repo 上获取文件忽略本地更改

问题描述

我的 bitbucket 存储库中有几个文件是配置文件,但是它包含要上线的配置信息,但是对于本地配置使用了一组完全不同的规则,但是我已经搞砸了几次并添加了更改的规则并推送他们和它成为一个问题。

有没有办法在 repo 上有一个设置文件,它不能被覆盖或触摸/添加或推送。

类似于 git update-index --assume-unchanged

标签: gitgithubbitbucket

解决方案


在忽略对该文件的本地更改的同时,没有一种可靠的方法可以将文件保留在存储库中。最好的解决方案是安排您的构建过程,以便(a)在您的工作树之外引入本地差异,或(b)在您不保留在源代码管理中的文件中,因此可以使用.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,目的是让人们复制它并编辑该副本以制作他们自己的本地 propfile;但关键是本地更改不会直接对源代码控制中的文件进行。

这也意味着您的生产属性文件可以不受源代码控制,并在安全环境中维护(例如,不是每个人都可以完全访问的构建服务器)。在我们的示例中,配置文件包含一个密码,因此能够将生产密码(以及您本地文件中的个人密码)置于源代码控制之外,这可能比避免意外提交本地配置更改的麻烦更有价值这个案例。

还有其他解决方案,细节总是会有所不同;但重点是,作为构建问题解决比源代码控制问题更好。


推荐阅读