优先考虑本地变更

时间:2018-11-22 20:35:04

标签: git git-merge epub epub3

我正在从网站上抓取页面,将它们弄糊涂,然后将它们编译成电子书。我正在将Git用于代码和HTML内容。

我必须对某些页面进行手动编辑,并且通常会在上游对其进行更新。这给我留下了一个问题,即在网站更新时如何保留我的本地编辑。

例如,我下载了页面A的v1,删除了一个无效的“”,然后提交了更改;稍后,我下载页面A的v2,该页面具有新内容,但仍带有“”字样。我想将新内容合并到页面A的副本中,但也要应用本地更改。

我怀疑有时需要手动解决冲突,但总的来说这应该是自动的。

我已经尝试了合并策略,变基和其他方法,但都无济于事。我想念什么?

编辑:

为帮助澄清我的问题:

git init
wget -O page.html https://example.com/
git add page.html
git commit -a -m "w0"
git checkout -b ebook
sed -i -e 's/http:/https:/' page.html
git commit -a -m "e1"
git checkout master
git merge ebook
wget -O - https://example.com/ | sed -e 's/may/may not/' > page.html
git commit -a -m w1
git checkout ebook
git merge master

最后,将保留最后的本地编辑,但第一次丢失。我知道我在做一些愚蠢的事情,但是...

1 个答案:

答案 0 :(得分:0)

我将维护一个仅跟踪原始网页的分支,我们将其称为web。每次下载更新时,请将其提交到web分支。然后,您需要一个ebook分支来进行更改。更新web分支后,将其合并到您的ebook分支中,以解决出现的所有冲突。最初将ebook创建为初始web的分支。

方案:假设您从W0开始作为Web服务器上的初始状态,然后在提交E1和E2中进行了本地更改。然后,Web服务器更新为W1,您将其合并到ebook中以获得E3。

这将为您提供如下所示的历史记录:

W0 -------- W1    (web branch)
  \           \
   E1 - E2 --- E3   (ebook branch)

当您将下一个更新下载到Web W2时,您将获得此提交图,并假设由于W1还需要使用E4作为其他重新格式化的更改:

W0 -------- W1 -------- W2    (web branch)
  \           \           \
   E1 - E2 --- E3 - E4 --- E5   (ebook branch)

当您将W2合并到E4以得到E5时,Git应该仅将W1和W2之间的更改应用于E4,这应该做您想要的。

请注意:此过程永远不会从web合并到ebook,而永远不会从ebook合并到web。从ebook回到web的合并会撤消预期的效果,如该答案下方的注释中所述。