我的项目中有一个配置文件,它包含一个到数据库的连接字符串,以及几个应用程序设置,例如:
...
<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>
...
Run Code Online (Sandbox Code Playgroud)
在开发过程中,我总是将ConnectionString值更改为本地数据库,这会导致git将文件标记为"已修改".
我读到了执行以下操作的选项:
git update-index --assume-unchanged app.config
但是,这意味着如果我对文件做任何其他更改(例如,更改AnotherSetting1),那么git也会忽略它.
有没有办法告诉git忽略文件中的特定更改,但是如果发生任何其他更改,则将其标记为已修改?或者是否有另一个类似的解决方案?
请假设我无法对配置文件本身的架构进行任何更改 - 我想要一个仅限本地的解决方案.
过滤器是为这样的东西制作的.在你的回购中,
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
Run Code Online (Sandbox Code Playgroud)