Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Gihub页面:如何在两个(分叉的)存储库之间合并?_Git_Github_Jekyll_Github Pages - Fatal编程技术网

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

Git Gihub页面:如何在两个(分叉的)存储库之间合并?,git,github,jekyll,github-pages,Git,Github,Jekyll,Github Pages,我有一个网站(example.org)托管在Github页面上。内容位于我的“示例”组织的“生产”存储库的master分支中 示例/制作:master =>Git example.org 在我的个人帐户中,我还有一个存储库分支,作为存储库“暂存”,在那里我实际创建内容(在分支master中,但也有功能分支),并准备发布的所有内容。它还发布在Github页面上(如personal.Github.io/example.org) personal/example.org:master (示例/生

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

  • 示例/制作:master
  • =>Git example.org
在我的个人帐户中,我还有一个存储库分支,作为存储库“暂存”,在那里我实际创建内容(在分支
master
中,但也有功能分支),并准备发布的所有内容。它还发布在Github页面上(如personal.Github.io/example.org)

  • personal/example.org:master
  • (示例/生产分支:master)
  • =>personal.github.io/example.org
这需要一个有点复杂的设置,因为存储库只能在一个URL下的Github页面上发布一个分支。要为我正在进行的工作获取另一个公开可用的URL,我需要在我的个人帐户上设置fork

为了做到这一点,我必须删除我的fork中的
CNAME
文件(否则它会尝试为同一个域发布,但由于它已经在使用中而无法工作),并更改Jekyll的
\u config.yml
文件中的相同值(因此网站的内部导航工作正常,跟踪代码)

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

当我现在尝试在“production”上创建一个pull请求时,这些从“staging”到
CNAME
\u config.yml
的更改也会在过程中合并到back-breaking example.org

所以现在我正在挑选从“登台”到“生产”的个人提交——这真是一个痛苦


有没有办法让我在“登台”时必须做的这一次提交不在合并范围内?

这不是问题的解决方案,但解决了如何为Github页面上托管的内容提供登台环境的问题:

不要在登台环境中使用Github页面(和个人fork repo),而是使用
staging
分支和其他一些Jekyll主机,如Netlify: 这解决了
CNAME
文件问题(因为它与Netlify无关)


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

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

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

  • 要在两个回购协议中都有不同的文件,而它们仍然认为它们已完全合并,您必须执行以下操作:

    假设我们的
    生产
    回购和
    分期
    回购都在本地签出,目前是相同的(并且具有相同的
    CNAME
    \u config.yml
    )。签出
    staging
    ,对文件进行更改,然后提交并推送它们

    如果我们对
    production
    进行正常合并,那么这个更改现在将被合并

    但现在我们运行以下命令:

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

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

    如果需要,我们还可以编辑第2步和第3步之间的提交消息,使其更具描述性:我们合并了两个分支,但使其保留了文件的“我们”(在本例中为:
    production
    )版本

  • 因此,对于git,文件现在被合并,尽管它们实际上保留了它们的内容。只要我们不再碰它们,这些文件将保持不同,但被视为“合并”