首页 > 解决方案 > 优先考虑本地更改

问题描述

我正在从网站上抓取页面,整理它们,然后将它们编译成电子书。我将 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

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

标签: gitgit-mergeepubepub3

解决方案


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

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

这会给你一个看起来像这样的历史:

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

当您下载到 Web 的下一个更新 W2 时,您将获得此提交图,假设您还具有 E4 作为 W1 所需的额外重新格式化更改:

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

当您将 W2 合并到 E4 以获得 E5 时,Git 应该只将 W1 和 W2 之间的更改应用到 E4,这应该可以满足您的需求。

注意:这个过程只会从webinto合并ebook,永远不会从ebookinto 合并web。如本答案下方的评论中所讨论的,从ebook后面合并将取消预期的效果。web


推荐阅读