4.3. 组织和团队

GitHub 在早期没有专门为组织提供账号,很多企业用户或大型开源组织只好使用普通用户账号作为组织的共享账号来使用。后来,GitHub推出了组织这一新的账号管理模式,满足大型开发团队的需要。

  • 组织账号是不能用来登录的,它包含一个Owner(拥有者)用户组,只有属于这个组的用户在登录后,才能切换为组织的管理者。
  • 可以创建任意多的团队(Team)即角色,对属于组织的用户进行管理。Owner Team就是组织中权限最高的角色。
  • 组织和用户一样可以创建项目,但是组织没有SSH公钥配置,也不能以组织的身份操作版本库。
  • 组织没有工作描述之类的个人账号才拥有的属性。

4.3.1. 创建新组织

组织是非登录账号,不能像创建普通登录账号那样直接创建,而是需要以GitHub用户身份登录,然后再创建自己的组织,创建者成为组织天然的管理者。

图4-26就是用户gotgithub登录后,通过点击右上角的账号设置图标进入账号设置界面,然后再点击菜单中的“Organizations”进入组织管理界面。

../images/new-org-1.png

图4-26:账号设置中的组织管理

在初始的组织管理界面中组织列表为空,即尚不属于任何组织。可以选择把当前用户gotgithub的账号转换为一个组织账号(前提是gotgithub的账号不属于任何组织)。提供这一账号迁移功能是因为在GitHub提供组织这一新功能之前,很多公司或团队以个人身份创建GitHub账号,但是以组织的形象出现,对于这类账号,GitHub提供了由个人账号向组织账号迁移的途径。

在这里我们不进行这一迁移,而是以用户gotgithub的身份创建一个新的组织。点击“Create New Organization”按钮,显示创建组织表单,如图4-27所示。

../images/new-org-2.png

图4-27:创建新组织

这里填写组织名为 GotGitOrg。创建组织还要选择一个付费方案,默认会选择免费的没有私有版本库的开源方案。

接下来为新建组织设定拥有者(Owner),如图4-28所示。当前用户,即正在创建组织的用户,理所当然成为组织拥有者之一。还可以为组织指派更多的组织拥有者,多个组织拥有者的权限并无差别,都可以管理组织,甚至可以将其他用户从拥有者团队中删除。

../images/new-org-3.png

图4-28:指派组织拥有者

完成创建后,访问用户账号设置界面中的组织面板,如图4-29所示,列出当前用户所属的组织(GotGitOrg)。可以重新对组织进行设定,或者退出组织。注意因为当前用户已经属于一个以上的组织,所以右侧将当前用户转换为组织的按钮被置灰。

../images/new-org-4.png

图4-29:加入组织后的组织管理界面

4.3.2. 组织管理

当用户gotgithub成为新建组织GotGitOrg的一员后,就可以在用户和组织的界面之间切换。点击页面左上角“github”文字图标进入仪表板界面。

../images/dashboard-header.png

图4-30:用户仪表板界面

仪表板页面左上角“github”文字图标的下面就是用户上下文列表框。点击用户上下文下拉列表,如图4-31所示。

../images/dashborad-context.png

图4-31:用户上下文切换列表

在用户上下文列表中选择组织GotGitOrg作为用户上下文后,则仪表板中显示的菜单和个人账号仪表板菜单略有不同,如图4-32所示。

../images/org-dashboard.png

图4-32:组织GotGitOrg的仪表板界面

组织的仪表板界面与用户仪表板的不同之处在于增加了团队管理(Team)和组织管理(Organization Settings)。选择菜单中的“Team”进入团队管理界面,可以在组织中添加任意数量的团队。添加新团队的界面如图4-33所示。

../images/new-team.png

图4-33:添加新团队iOS-Team

创建一个团队需要提供四个选项(如图4-33):

  1. 团队名称。如:iOS-Team。
  2. 团队成员。如:supergirl和omnidroid两个用户作为团队成员。
  3. 团队权限。有三个选择:只读(Pull Only)、读写(Push & Pull)、读写并管理(Push, Pull & Administrative)。
  4. 授权版本库。可以添加一个或多个版本库,只有对授权的版本库才拥有指定权限。

其中团队授权中的只读授权对于免费组织账号创建的开源项目没有实际意义,因为开源项目人人可读,只有对于付费的组织账号创建的私密版本库才体现出价值。关于付费账号和私密版本库将在后面的章节介绍。接下来介绍如何在组织账号下创建版本库。

4.3.3. 版本库管理

组织拥有独立的项目托管空间,点击页面左上角的“github”文字图标进入组织账号的仪表板界面。刚刚建立的组织账号的版本库尚未创建,点击图4-32所示的“New Repository”按钮,创建版本库(即项目)。

新建版本库的界面如图4-34所示。

../images/new-prj-for-org.png

图4-34:新建项目界面

在组织的托管空间创建项目与在普通用户的空间下创建稍有不同,增加了团队设置下拉框。图4-34显示在创建名为MyiPad项目时,只能为项目指派一个已定义团队,要想为项目指派更多团队可以在项目创建完毕通过项目管理界面添加。

下面来看一看如何为已建立项目指派更多的团队。进入项目管理页面,点击左侧菜单项“Team”显示项目的团队管理界面,可以通过该界面,为项目添加和移除团队,如图4-35所示。

../images/org-prj-admin-teams.png

图4-35:项目的团队管理

属于团队的项目(版本库)可以转移给个人,反之亦然。图4-36展示了如何通过项目管理界面在用户和组织之间转移项目(版本库)。

../images/org-prj-admin-transfer.png

图4-36:项目转移

4.3.4. 个人还是组织

若使用“Fork + Pull”的工作模式,通过个人账号还是组织账号托管版本库,几乎没有什么差别。如果一定要找出点不同,那就是在向托管版本库提交Pull Request时,邮件通知的用户范围有所不同。

  • 对于个人账号,对其托管空间内的版本库发出Pull Request,通知邮件会发送给该个人账号及该版本库设置的所有协作者(如果有的话)的邮箱。
  • 对于组织,对其托管空间内的版本库发出Pull Request,不会向组织的邮箱发送Pull Request,也不会向组织的所有者(Owner团队)发送通知邮件,而是向在版本库中拥有Push权限的团队(非Owner团队)成员发送通知邮件。

因此,如果在组织的托管空间创建版本库,一定要要为版本库指派一个拥有Push权限的团队,以免以“Fork + Pull”模式工作时,Pull Request没有人响应。

若是以共享版本库方式(即集中式协同模式)工作的话,使用组织来托管版本库会比使用个人账号托管有效率得多。

  • 以个人账号托管,需要逐一为版本库设置协作者(Collaborators),如果版本库较多且授权相同,配置过程繁琐且易出错。
  • 以组织方式托管,将用户分组,划分为一个一个的团队(Team),以团队为单位授权则方便得多。
  • 如果是以付费账号创建的私密版本库,使用组织方式管理,会有包括只读、读写等更丰富的授权类型,更符合项目管理的实际。