Github 为什么允许协作者创建分支然后发出拉请求,而贡献者需要分叉、克隆然后分支来发出拉请求?

Github 为什么允许协作者创建分支然后发出拉请求,而贡献者需要分叉、克隆然后分支来发出拉请求?,github,Github,我在学习不同的GitHub工作流时遇到了这个我找不到答案的问题。在GitHub中添加此功能而不是允许每个人直接从源站分支并以这种方式为项目贡献力量的原因是什么?工作流中的差异取决于对原始存储库的访问。在这两种情况下,为了提交代码,您通常仍然需要克隆存储库,以便在本地处理它,尽管如果确实需要,您可以避免这样做 为了说明不同之处,我是Git LFS存储库的合作者,但也是libgit2存储库的贡献者。因为我是一名项目维护人员,所以我有权将分支推送到Git LFS存储库,因此如果我愿意,我可以将本地克隆

我在学习不同的GitHub工作流时遇到了这个我找不到答案的问题。在GitHub中添加此功能而不是允许每个人直接从源站分支并以这种方式为项目贡献力量的原因是什么?

工作流中的差异取决于对原始存储库的访问。在这两种情况下,为了提交代码,您通常仍然需要克隆存储库,以便在本地处理它,尽管如果确实需要,您可以避免这样做

为了说明不同之处,我是Git LFS存储库的合作者,但也是libgit2存储库的贡献者。因为我是一名项目维护人员,所以我有权将分支推送到Git LFS存储库,因此如果我愿意,我可以将本地克隆中的分支推送到主存储库,然后打开一个拉请求。我通常选择不这样做,而是选择从我自己的个人分支工作,但如果我选择,我可以这样做,在某些情况下,比如在创建发布分支时

但是,我没有将数据推送到libgit2存储库的权限,因为我不是合作者。如果我尝试,我会被拒绝。这是因为,即使我做出了贡献,我也不会经常这样做,我也不对这个项目负责。授予我将分支推送到主存储库的能力是没有意义的,因为我可以推送干扰其他分支的分支、删除分支或推送与项目规则和要求冲突的分支,而其他用户可能会被误导,以为我的分支在没有得到正式批准的情况下得到了正式批准

所以在这种情况下,我需要创建一个存储库分支,这样我就有了一个空间,我可以控制它来处理我认为合适的代码,然后提交一个pull请求。然后,libgit2的维护人员可以与我合作,确保我的代码符合项目标准,然后将其合并。如果他们决定不接受,那么没有人会误以为我的代码是原始项目的一部分


所有这些都是GitHub和使用pull请求的类似系统所特有的。Git对这个意义上的pull请求一无所知(尽管它有一个完全不同的类似命名功能)。

我假设“合作者”指的是你认识/信任的人,他们通常在专有项目或大学/大学作业项目上为你的项目工作(例如:你的队友/同事/等等),而“贡献者”指的是一些您个人可能不熟悉的开源开发人员

我想到的一个原因是,你并不真的想把你的项目信任给你不认识的人,但你仍然希望他们能够为你的开源项目做出/建议/贡献

在github操作中(比如gitlab runner或bitbucket管道,基本上是在推送/事件时在github容器中运行脚本的功能),有一个称为“github操作机密”的功能。在该功能中,您可以保存密码/ssh密钥等,以供容器/操作使用(例如:您想在push to master分支上执行操作,请运行命令通过ssh将这些更改推送到我的部署服务器,其中用户名/密码/ssh密钥存储在github操作机密中)

当有人分叉您的回购协议时,不会复制Github操作机密。但它仍然可以在分支机构上使用。表明只有您信任的人才应被授予对您的回购协议的写访问权


另一方面,分叉回购的人可以有自己的github行动秘密,而作为分叉回购的“真正”所有者,你无法阅读。

这不是git的问题。这是一个github问题。Git允许在本地存储库上执行涉及远程回购的操作(如果需要的话)。。。但您是本地回购协议的主人和指挥官。@eftshift谢谢,我已经相应地更新了此问题的标签,以便其他人更容易访问。