如何在repo上获取文件忽略本地更改

时间:2018-05-01 11:25:05

标签: git github bitbucket

我的bitbucket repo上有几个文件是配置文件,但它包含配置信息才能上线但是一组完全不同的规则被用于本地配置,但是我已经搞砸了几次并添加了更改规则并推动它们成为一个问题。

是否有任何方法可以在回购中设置文件,并且无法覆盖或触摸/添加或推送。

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

1 个答案:

答案 0 :(得分:0)

在忽略对该文件的本地更改时,没有可靠的方法将文件保留在repo中。最佳解决方案是安排构建过程,以便(a)在工作树之外,或(b)在您不保留在源代码管理中的文件中引入本地差异,因此可以使用{{ 1}}。

例如,假设您有一个文件.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 propfile,目的是让人们复制它并编辑副本以创建自己的本地propfile;但关键是本地更改不会直接发送到源代码管理中的文件。

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

还有其他解决方案,细节总是有所不同;但关键是,作为构建问题而不是源控制问题,它更好。