不允许合并到与您分支出的分支不同的分支?

Disallow merging into a different branch than you branched from?

我们的存储库配置如下:

master
--> project_branch
----> branch_of_project_branch
--> branch_of_master

IE,我们有一堆项目都是从主分支分支出来的。

当我们对 master 进行更改时,我们在 master 的分支中进行这些更改,然后将它们合并回 master,然后从 master 拉入每个项目分支。

当我们对项目进行更改时,我们会在该项目的分支中进行这些更改,然后将它们合并回该项目分支。

有什么方法可以配置 git 以便我们禁止将更改从一个分支合并到一个不是它的起源的分支中? IE,在上面的例子中,我想禁止 branch_of_project_branch 被合并到 master,或者同样地,禁止 branch_of_master 被合并到 project_branch.

Is there any way to configure git so that we disallow merging changes from a branch into a branch that was not it's origin?

没有

Git中的分支名称没有任何意义,彼此之间也没有关系。每个 Git 存储库都有 自己的 分支名称:如果我克隆你的存储库,我可以将我的存储库更改为具有分支 maestro 而不是 masterdervish 而不是 develop,依此类推。然而,我仍然可以发送您的 Git 提交,并告诉您的 Git 使用您的名字或我的名字。

您在自己的 Git 存储库中的每个分支名称 确实 允许您设置另一个名称,Git 调用 upstream,与那个分支相关联,但这个上游设置是本地的,主要是一个方便的功能。 Git的其他部分——例如默认设置push.default——则鼓励人们使用origin/master作为本地名称为master的分支的上游,因此鼓励合理使用分支名称,但并未在任何地方强制执行:任何人都可以随时覆盖其中任何一个。

无论如何,分支名称都是微不足道的。 Git 中重要的是 提交 。分支名称仅用于 查找 提交。

当您有一台托管 Git 存储库的服务器时,该 服务器 可以接受或拒绝 git push 操作。您可以编写自己的脚本来检查传入的推送请求。这些脚本采用 hooks 的形式,在本例中为 pre-receiveupdate。但是这些钩子只能得到几条信息:

  • 传入提交的哈希 ID;
  • 其他 Git 要求您 Git 使用的名称;和
  • 当前与该名称关联的哈希 ID。

执行git push操作的人可以任意取一个名字发给你的Git,让你的Git使用,所以你在这里看到的分支名称不是必须是 theytheir Git 中的分支名称。但是你不需要关心他们在Git中的分支名称:你的Git永远不会看到他们的分支名称.您的 Git 只能看到您自己的分支名称和提交哈希值。

底线是这样的:提交哈希在所有 Git 存储库中共享。分支名称不是。 同时:每个用户的 Git 存储库是该用户私有的。您无法控制其他人对其私有 Git 存储库的操作。 您只能控制自己对自己存储库的操作。