我如何在GitHub上为维基页面创建拉取请求?

206

我看到了一篇与 GitHub 相关的维基页面,但它是不开放编辑的。然后我 fork 了这个项目,在“我的端口”上进行了编辑,并尝试提交 pull request。结果发现,维基不在该项目中,也没有办法提交更改。

除了通过电子邮件,是否还有其他方法可以建议修改此情况下的维基?

此时我发现了一个看起来像是替代方案,在“具有相似标题的问题”下面,但我还不能使用它提交 pull request,所以我不确定子模块是否是这个目的的好方法。我现在看到我可能可以以某种方式分支出它... 那么这是正确的方法吗?


5
在 https://github.com/isaacs/github/issues/846 上报告了此问题。 - Martin Monperrus
1
我知道我在这件事上有些晚了,但是我认为将 .wiki git 仓库作为主项目仓库的子模块似乎是解决这种情况的最佳方法。 - ipatch
在GitHub维基上启用拉取请求的解决方法:http://www.growingwiththeweb.com/2016/07/enabling-pull-requests-on-github-wikis.html - Vadzim
1
最近在 https://github.com/orgs/community/discussions/50163 上报告了更多的信息。 - jpbochi
请投票支持https://github.com/orgs/community/discussions/50163。 - undefined
7个回答

146

GitHub不支持对wiki仓库进行拉取请求,只能对主要的代码仓库进行操作(在我看来有点遗憾但我也能理解)。

以下是一种有趣的方式,可以让项目管理社区更新Wiki的同时仍然保持严密的控制,就像源代码那样:

我的建议工作流程如下:

  1. 手动在您的GitHub帐户中创建Taffy wiki的副本:
    • 在您的GitHub帐户上创建一个新的存储库。我们称其为“Taffy-Wiki”。
    • 将Taffy wiki克隆到您的本地计算机某个位置:git clone git@github.com:atuttle/Taffy.wiki.git
    • 删除原始的“origin”远程并添加您的GitHub仓库作为新的“origin”git remote rm origingit remote add origin git@github.com:<YOUR_USERNAME>/Taffy-Wiki.git
  2. 在本地进行更改,然后将其推送到您的GitHub帐户:git push -u origin master(“-u origin master”仅在第一次需要;之后只需执行git push
  3. 提交一个工单到官方的Taffy问题跟踪器,请求我审查您的更改并合并它们。 请务必包含链接到您的仓库并描述您所做的更改。
  4. 跳转到#2

(来源于如何为Taffy文档做出贡献。)

如果是我,我会在主要的代码仓库(即您复刻的那个)中创建一个问题,建议对wiki进行更新。如果问题未启用,则电子邮件是我能想到的唯一其他选项。


@Chi-YoungJeffreyLii 这些命令不是我自己的,而是来自我引用的博客文章(我在引语下面链接了来源)。它们是命令行 Git 命令,在任何带有 Git 的平台上都应该可以工作,包括 Windows 平台和带有 Bash shell 的 UNIX 或 GNU/Linux 操作系统。 - Calrion
挑剔一下:源远程删除/添加序列可能有点(不必要地)复杂,而且“fork”技术上并不是源,所以名称有误导性。我建议只在本地克隆中为新的个人GitHub存储库(例如命名为“personal”)添加第二个远程,并正常推送到它。这样,人们仍然可以正常从真实的源存储库中获取以与他人的工作同步。 - tne
这对我来说太多了。我只是克隆维基,本地提交我的更改,从该提交创建一个补丁,并在讨论或问题中提交该补丁。 - young_souvlaki
请投票支持https://github.com/orgs/community/discussions/50163。 - undefined

20
我们目前在https://devonfw.com中找到了解决该问题的最佳方案:
  1. 将文档放入Git存储库中,与代码一起放在文档文件夹中。
  2. 通过一些魔法扩展您的Travis CI构建,将所有来自文档文件夹的更改与应用于wiki Git的转换进行分阶段。请参见下面的最后一个示例链接。
  3. 将wiki视为文档的只读视图。请注意,使用github.com,您仍然可以查看并直接编辑文档文件夹中的文件。因此,您仍然可以在几秒钟内通过浏览器修复拼写错误(即使是没有对repo具有权限的PR),但不能通过wiki进行。
  4. 当贡献者fork时,他/她也会在代码中获得文档。他/她可以在一个PR中同时更改两者,并且所有内容都在同一个流程中进行审核,因此合并后,代码和文档保持同步。仍然可以在wiki中阅读文档,具有侧边栏等更好的UX

由于我们是100%的OSS,我们很乐意分享我们努力工作的成果以达到这个伟大的解决方案。以下是示例链接:


这可能是GitHub项目管理其维基的好建议,但它并没有真正回答关于不遵循此模式的项目的贡献者应该做什么的问题。 - jamesdlin
第一个链接已经失效(404)。 - Peter Mortensen
我们已经从Travis-CI切换到github actions: https://github.com/devonfw/devon4j/blob/develop/.github/workflows/github_actions.yml 此外,我可以推荐使用https://antora.org/来创建更高级的网站。 实际上,这更多是针对维护者的提示。原始问题由@Calrion回答。 - Jörg

7
我采用了一种不同的方法,即将完全相同的内容推送到主仓库和维基中。这可能不适合所有人,但Risk-First主要是一个维基,主仓库中有几个Jekyll页面。
这意味着拉取请求/分支过程可以正常工作。然而,在合并拉取请求后,我需要额外的步骤将其拉到我的本地仓库,然后将其推送到主仓库和维基上,Git可以很好地支持多个源URL。
localhost:website robmoffat$ git remote show origin
* remote origin
  Fetch URL: git@github.com:risk-first/website.git
  Push  URL: git@github.com:risk-first/website.wiki.git
  Push  URL: git@github.com:risk-first/website.git
  HEAD branch: master

为了实现这一点,我按照以下步骤合并了两个存储库的提交记录:

如何合并两个 Git 存储库

然后像这样将它们都推送到存储库中:

Git - 将代码推送到两个远程仓库


我支持这种方法 - 它表现得非常好。然而,由于完全不同的原因,我最终将整个项目迁移到了Jekyll上,所以Riskfirst现在已经不再使用这种方法了。 - Rob Moffat

7

你无法提交拉取请求,但是你可以打开一个问题 (issue),粘贴你的维基页面链接,并让他们将你的维基页面合并到他们的维基页面中。

GitHub上的维基是完整的 git 库,因此您可以像对待其他库一样处理它们。因此,以下操作有效。

简而言之:

他们只需要克隆你的维基页面仓库 (git clone YOUR_FORKED_REPO.wiki.git) ,将你所有维基的提交压缩成一个大提交,然后将这个大压缩提交选择到他们的仓库。这将把你所有的维基更改带入他们的维基中。

详细说明:

(摘自 Larry Botha 的 GitHub Gist 这里: 从 forked GitHub 仓库合并维基更改)。

Merge Wiki Changes From A Forked GitHub Repo

This is inspired (or basically copied) from How To Merge GitHub Wiki Changes From One Repository To Another, by Roman Ivanov, and serves to ensure that should something happen to the original article, the information remains nice and safe here.

Terminology

OREPO: original repo - the repo created or maintained by the owner

FREPO: the forked repo that presumably has updates to its wiki, not yet on the OREPO

Contributing

Should you want to contribute to the wiki of a repo you have forked, do the following:

  • fork the repo
  • clone only the wiki to your machine: $ g clone [FREPO].wiki.git
  • make changes to your local forked wiki repo
  • push your changes to GitHub

Once you are ready to let the author know you have changes, do the following:

  • open an issue on OREPO
  • provide a direct link to your wiki's git repo for ease of merging: i.e. [FREPO].wiki.git

Merging Changes

As the owner of OREPO, you have now received a message that there are updates to your wiki on someone else's FREPO.

If wiki changes are forked from latest OREPO wiki, you may do the following:

$ git clone [OREPO].wiki.git
$ cd [OREPO].wiki.git

# squashing all FREPO changes
$ git pull [FREPO].wiki.git master

$ git push origin master

If OREPO wiki is ahead of where FREPO forked from, do the following:

$ git clone [OREPO].wiki.git
$ cd [OREPO].wiki.git
$ git fetch [FREPO] master:[FREPO-branch]
$ git checkout [FREPO-branch]

# Check out to last OREPO commit
$ git reset --hard [last-OREPO-commit-hash]

# Do massive squash of all FREPO changes
$ git merge --squash HEAD@{1}
$ git commit -m "Wiki update from FREPO - [description]"
$ git checkout master

# Cherry-pick newly squashed commit
$ git cherry-pick [OREPO-newly-squashed-commit]
$ git push

@monochromec,我觉得我们还是有些误解。让我给你举个例子:这是一个仓库:https://github.com/microsoft/TypeScript。它的HTTPS URL是https://github.com/microsoft/TypeScript.git。如果你点击它顶部的"Wiki",你会跳转到这里:https://github.com/microsoft/TypeScript/wiki。这个维基是一个*独立的git仓库*。它的HTTPS URL是https://github.com/microsoft/TypeScript.wiki.git。这是一个独立的git仓库。这是我对Typescript仓库的分支:https://github.com/ElectricRCAircraftGuy/TypeScript。 - undefined
参见:在GitHub上,我可以只fork一个wiki吗?。它有详细步骤。虽然可能不够清晰,但所有命令都在那里。 - undefined
感谢您的澄清。我尝试克隆的维基是glances的一个:https://github.com/nicolargo/glances。当我克隆项目存储库时,克隆中的维基仍然是空的。https://github.com/nicolargo/glances.wiki.git 显示404错误页面,https://github.com/monochromec/glances.wiki.git 也是如此。也许我完全走错了方向... - undefined
1
@monochromec,我写了一个适合初学者的答案:在GitHub上,我可以只fork一个wiki吗? - undefined
1
太好了 - 这回答了我的问题。非常感谢你逐步解释! - undefined
显示剩余10条评论

0

如果您可以接受单页长文档(我实际上更喜欢这种方式),您可以劫持README.MD并将维基内容放在那里。

不仅它将作为正常存储库的一部分进行跟踪,而且还将显示在主页上。

它可以以快速参考开始,然后进入更详细的描述/说明,以便常规用户首先了解更通用的信息。


1
这只适用于另一个技术用户将要阅读的文档。如果是为了普通公众,他们不想滚动数英里的文本。 - Alynva

0
除了 @Gabriel Staples 的回答之外,您还可以创建一个 git 补丁文件,并在您在上游仓库上创建问题时附加它。这样他们就可以轻松地应用它...

-3

现在GitHub已经支持此功能,您可以在添加或编辑wiki页面中找到详细信息。

现在它被视为一个“普通”的代码库,具备分支、拉取请求、提交等功能。


回顾这个问题,我早就知道它并不适合发布在stackoverflow上,因为它过于具有github的特殊性质...但是今天我对于那时候如此坚持使用github,还是有些小小的遗憾!我们需要像sourcehut这样促进开源并开放其源代码的git解决方案!尤其是如果它们使用agpl3+。无论如何...感谢您的更新。我不知道为什么现在我还不能接受这个作为答案。 - cregox
3
这是不正确的。Github 不支持直接为 wiki 存储库创建 PR。您必须按照 @Calrion 上面的答案操作,强制替换远程地址为主存储库的远程地址,并将分支推送到该地址。在那时,您可以创建 PR,这将更新您的 wiki。 - b1kjsh
GitHub目前仍不支持在Wiki存储库上处理分支。也就是说,无法进行Pull Request操作。 - Dennis
GitHub仍然不支持处理GitHub Wiki存储库的分支。也就是说,没有可用的拉取请求。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接