Gihub页面:如何合并两个(分叉的)存储库?

时间:2017-09-12 13:24:31

标签: git github jekyll github-pages

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

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

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

  • personal / example.org:master
  • (示例分叉/制作:大师)
  • => personal.github.io/example.org

这需要一些复杂的设置,因为存储库只能在一个URL下的Github页面上发布一个分支。要获得我正在进行的工作的另一个公开URL,我需要在我的个人帐户上设置分支。

为了使这个工作,我必须删除我的fork中的CNAME文件(否则它会尝试发布同一个域,它不能正常使用)并且也会更改它Jekyll的_config.yml文件中的值(因此网站上的内部导航工作,跟踪代码)。

(我不能把这些文件放到.gitignore中,因为它们不会存放在存储库中,直接用于Github Pages ...)

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

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

有没有办法保持这个提交我必须做的“暂存”合并?

2 个答案:

答案 0 :(得分:0)

不解决问题,但解决了如何为Github页面上托管的东西设置暂存环境的问题:

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

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

答案 1 :(得分:0)

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

  1. 将分叉的域名从personal.github.io/example.org更改为staging.example.org,这样CNAME文件就不必删除,但必须包含不同的内容staging.example.org

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

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

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

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

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

    Source

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

    如果我们想要,我们也可以在第2步和第3步之间编辑提交消息,使其更具描述性:我们合并了两个分支,但使其保持“我们的”(在这种情况下:{{ 1}})文件的版本。

  3. 因此,对于git,文件现在已合并,尽管它们实际上保留了它们的内容。只要我们不再触摸它们,这些文件就会保持不同,但算作“合并”。