我的bitbucket repo上有几个文件是配置文件,但它包含配置信息才能上线但是一组完全不同的规则被用于本地配置,但是我已经搞砸了几次并添加了更改规则并推动它们成为一个问题。
是否有任何方法可以在回购中设置文件,并且无法覆盖或触摸/添加或推送。
类似于git update-index --assume-unchanged
答案 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可以不受源代码控制,并且可以在安全的环境中维护(例如,并非每个人都具有完全访问权限的构建服务器)。在我们的示例中,配置文件包含密码,因此能够将生产密码(以及您的个人密码从本地文件中)保留在源代码控制之外,这可能比避免在本地配置更改中意外提交的麻烦更有价值。这种情况。
还有其他解决方案,细节总是有所不同;但关键是,作为构建问题而不是源控制问题,它更好。