【问题标题】:Gihub Pages: How to merge between two (forked) repositories?Github Pages:如何在两个(分叉的)存储库之间合并?
【发布时间】:2018-02-20 23:48:55
【问题描述】:

我有一个托管在 Github Pages 上的网站 (example.org)。内容位于我的“示例”组织的“生产”存储库的master 分支中。

  • example/production:master
  • => Git 示例.org

我的个人帐户中也有该存储库的一个分支,作为存储库“登台”,我在其中实际创建内容(在分支 master 中,但也包括功能分支)并准备所有内容以供发布。它也发布在 Github Pages 上(作为personal.github.io/example.org)

  • 个人/example.org:master
  • (fork of example/production:master)
  • =>personal.github.io/example.org

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

为了使它起作用,我必须删除我的 fork 中的 CNAME 文件(否则它会尝试为同一个域发布,因为它已经在使用中,所以它不起作用)并且还更改了相同的值Jekyll 的_config.yml 文件(因此网站上的内部导航有效,跟踪代码)。

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

当我现在尝试在“生产”上创建一个拉取请求时,从“暂存”这些更改到 CNAME_config.yml 也被合并回来 - 在这个过程中破坏了 example.org。

所以现在我正在挑选从“分期”到“生产”的个人提交——这真的很痛苦。

有没有办法让我在“暂存”时必须做的这个提交退出合并?

【问题讨论】:

    标签: git github jekyll github-pages


    【解决方案1】:

    上述问题的解决方法有两个步骤:

    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 步之间的提交消息,使其更具描述性:我们合并了两个分支,但使其保持“我们的”(在这种情况下:@987654334 @) 文件的版本。

    所以对于 git,文件现在被合并了,尽管它们实际上保留了它们的内容。只要我们不再碰它们,这些文件就会保持不同但算作“合并”。

    【讨论】:

      【解决方案2】:

      不是问题的解决方案,而是如何为托管在 Github Pages 上的内容提供暂存环境的问题的解决方案:

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 2015-09-08
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 2016-03-23
        • 2011-01-02
        相关资源
        最近更新 更多