我的项目中有一个配置文件,其中包含数据库的连接字符串以及多个应用程序设置,例如:
...
<setting name="ConnectionString"><value>Server=prodServer;Database=myDataBase;</value></setting>
<setting name="AnotherSetting1"><value>Lorem</value></setting>
<setting name="AnotherSetting2"><value>Ipsum</value></setting>
<setting name="AnotherSetting3"><value>dolor </value></setting>
...
在我的开发过程中,我总是改变连接字符串值到我的本地数据库,这会导致 git 将文件标记为“已修改”。
我读到了执行以下操作的选项:
git update-index --assume-unchanged app.config
但是,这意味着如果我对文件进行任何其他更改(例如,更改另一种设置1) 那么 git 也会忽略它。
有没有办法告诉 git 忽略文件中的特定更改,但如果发生任何其他更改则将其标记为已修改?或者这个问题还有其他类似的解决方案吗?
请假设我无法对配置文件本身的体系结构进行任何更改 - 我想要一个仅限本地的解决方案。
filters https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_tt_filter_tt是为这样的东西而设计的。在你的仓库中,
cat >.git/info/saved-connection <<EOD
<setting name="ConnectionString"><value>Server=prodServer;Database=myDataBase;</value></setting>
EOD
cat >.git/info/my-connection <<EOD
<setting name="ConnectionString"><value>Server=myprivateserver;Database=myDataBase;</value></setting>
EOD
git config filter.use-my-connection.smudge 'sed -f ".git/info/use-my-connection.smudge"'
git config filter.use-my-connection.clean 'sed -f ".git/info/use-my-connection.clean"'
cat >.git/info/use-my-connection.smudge <<EOD
/^<setting name="ConnectionString">/ {
w .git/info/saved-connection
r .git/info/my-connection
d
}
EOD
cat >.git/info/use-my-connection.clean <<EOD
/^<setting name="ConnectionString">/ {
w .git/info/my-connection
r .git/info/saved-connection
d
}
EOD
echo >> .git/info/attributes path/to/app.config filter=use-my-connection
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)