Github Pages:如何合并两个(分叉的)存储库?

Gihub Pages: How to merge between two (forked) repositories?

我在 Github 页面上托管了一个网站 (example.org)。内容位于我的 "example" 组织的 "production" 存储库的 master 分支中。

我的个人帐户中还有一个该存储库的分支作为存储库 "staging",我在其中实际创建内容(在分支 master 但也有功能分支)并准备发布的所有内容。它还发布在 Github 页面上(作为 personal.github.io/example.org)

这个有点复杂的设置是必需的,因为存储库只能在一个 URL 下的 Git 中心页面上发布一个分支。要为我正在进行的工作获得另一个公开可用的 URL,我需要在我的个人帐户上有分叉。

为了让它工作,我必须删除我的叉子中的 CNAME 文件(否则它会尝试为同一个域发布,这不起作用,因为它已经在使用中)并且为 Jekyll 更改 _config.yml 文件中的相同值(以便网站内部导航正常,跟踪代码)。

(我不能只将这些文件放入 .gitignore,因为那样它们就不会在存储库中,存储库直接用于 Github 页面...)

当我现在尝试使用 "staging" 的更改在 "production" 上创建拉取请求时,这些对 CNAME_config.yml 的更改也被合并回来 - 破坏 example.org正在处理中。

所以现在我正在挑选从 "staging" 到 "production" 的个人提交 - 这真的很痛苦。

有没有办法让我必须在 "staging" 上完成的这个提交不在合并中?

问题的非解决方案,但解决了如何为 Github 页面上托管的内容提供暂存环境的问题:

不要将 Github 页面(和个人分支回购)用于暂存环境,而是 staging 分支和其他一些 Jekyll 主机,如 Netlify:https://eduardoboucas.com/blog/2017/02/22/jekyll-staging-environment.html 这解决了 CNAME 文件问题(因为它与 Netlify 无关)。

需要更改 _config.yml,因为 Jekyll 网站模板的设置方式包括样式表、CSS 等({{ site.baseurl }}/public/css/style.css)并创建内部链接( {{ site.baseurl }}{{ node.url }})。这可以使用相对链接或在链接中使用域根来修复(例如 {{ site.baseurl }}/public/css/style.css 变为 /style.css)。

上述问题的解法分两步:

  1. 将 fork 的域从 personal.github.io/example.org 更改为 staging.example.org 这样 CNAME 文件不必删除但必须具有不同的内容,staging.example.org.

  2. 为了能够在两个存储库中拥有不同的文件,同时他们仍然认为它们已完全合并,您必须执行以下操作:

    假设我们的 production 存储库和 staging 存储库都在本地签出,现在是相同的(并且具有相同的 CNAME_config.yml)。查看 staging,对文件进行更改并提交并推送它们。

    如果我们要对 production 进行正常合并,此更改现在将被合并。

    但现在我们 运行 这些命令:

    git checkout production
    git merge --strategy=ours staging
    git push production production:master
    

    (Source)

    --strategy=ours 确保在此合并期间,production 文件保持不变。但是提交仍然被标记为合并。

    如果需要,我们还可以编辑第 2 步和第 3 步之间的提交消息,以更加描述我们刚刚所做的事情:我们合并了两个分支,但保留 "our"(在此case: production) 文件的版本。

所以对于 git,文件现在已合并,尽管它们实际上保留了它们的内容。只要我们不再触摸它们,这些文件将保持不同但算作 "merged".