Git - 忽略对配置文件的特定修改

Vit*_*lyB 3 git

我的项目中有一个配置文件,它包含一个到数据库的连接字符串,以及几个应用程序设置,例如:

...
<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忽略文件中的特定更改,但是如果发生任何其他更改,则将其标记为已修改?或者是否有另一个类似的解决方案?

请假设我无法对配置文件本身的架构进行任何更改 - 我想要一个仅限本地的解决方案.

jth*_*ill 6

过滤器是为这样的东西制作的.在你的回购中,

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)