你可以用很多方式來解決這個問題。我可以想到兩個:git-merge-file
和舊的patch
。 git-merge-file
方法提供了一些交互性,而patch
方法不提供。
與
git-merge-file
解決方案比方說你有一個原始文件,您可以使用它創建一個本地版本的文件,config.local
config.example
。現在,當上遊更新config.example
時,您可以按照以下步驟來合併任何新更改。
$ git fetch
$ git show master:config.example > config.example.base
$ git show origin/master:config.example > config.example.latest
$ git merge-file config.local config.example.base config.example.latest
這將更新config.local
與通常的衝突標誌,它然後你會與你最喜歡的合併工具來解決(ediff
在Emacs是不錯的,我敢肯定,有類似模式的VIM)。例如,下面的三個文件,
config.example.base:
Original:
some config
config.example.latest:
Original:
some config
Upstream:
new upstream config
config.local:
Original:
some config
My changes:
some other config
將被合併這樣的:
Original:
some config
<<<<<<< config.local
My changes:
some other config
=======
Upstream:
new upstream config
>>>>>>> config.example.latest
你很可能這個腳本毫不費力。順便說一句,git-merge-file
可以在任何3個文件上操作,它們不需要版本控制在git
下。這意味着可以使用它來合併任何三個文件!
解決方案與patch
:
假設相同的文件名,config.local
和config.example
,下面應該工作。
$ git fetch
$ git diff master..origin/master -- config.example | sed -e 's%\(^[-+]\{3\}\) .\+%\1 config.local%g' > /tmp/mypatch
$ patch < /tmp/mypatch
是的,我知道如何得到差異,但現在交互應用到'配置'是我的實際問題: -/ –
您是否嘗試過將配置文件複製到config.example中,使用您的標準從原點合併的工具,然後將其移回配置並重置爲您提交到config.example的更改之前?如果文件不是太不同步,你應該至少得到一些幫助,以便改變什麼。 – 1337joe