tech#github#enterprise#ghes#copilot#emu#governance

GitHub Enterprise Cloud vs. Server: User Management, Copilot, and Related Features

Published 👁
GitHub Enterprise Cloud vs. Server: User Management, Copilot, and Related Features

Why I decided to write this article

The introduction of Data Residency for GitHub Enterprise Cloud has made it easier for organizations to choose where their code and user data are stored.

Even so, requirements such as “source code must not leave our managed environment” and “the entire network must remain on-premises” are still common. In those cases, the self-hosted GitHub Enterprise Server (GHES) is one option.

As a Cloud Solution Architect (CSA) who primarily works with cloud environments, I honestly was not very familiar with how GHES handles users or where the management boundaries fall when it is used with GitHub Copilot.

In this article, I use GitHub’s official documentation to explore the following questions:

⚠️ Scope of verification
I do not have access to a working GHES environment, so I have not verified the information in this article on an actual instance. This is a summary, written for my own understanding, of research that I asked GitHub Copilot to collect and organize from GitHub’s official documentation as of July 27, 2026 (latest referred to GHES 3.21). GHES feature availability varies by version, license agreement, and network architecture. Before a production deployment, always consult the official documentation for the version you plan to use and confirm the details with GitHub Sales or Support.

Table of Contents

Key takeaways

Here is a high-level summary of what I found.

TopicGitHub Enterprise CloudGitHub Enterprise Server
Code storage locationOperated by GitHub. With Data Residency, data is stored in the selected regionStored on a GHES instance managed by your organization
Service operationsHandled by GitHubYour organization manages upgrades, backups, availability, and capacity
UsersPersonal accounts or EMULocal accounts within GHES, authenticated through built-in authentication, CAS, LDAP, or SAML
Automated provisioningIdP + SCIM with EMUSAML + SCIM can create and suspend GHES accounts
EMUAvailableNot available. SCIM on GHES is not EMU
Copilot managementManaged through a cloud enterprise or organizationCopilot contracts, identities, and policies are managed in the cloud
Copilot in an IDEAvailableUsers with a cloud-side Copilot license can use Copilot with locally cloned GHES repositories
Copilot cloud agentAvailable for organizations and repositories on GitHub.comNo documented configuration targets repositories that exist only on GHES
Actions executionGitHub-hosted or self-hosted runnersSelf-hosted runners only. External object storage is also required
CodespacesAvailableNo documented offering for GHES repositories

The most important point is that choosing GHES does not bring Copilot on-premises.

GHES can keep development data such as code, issues, and pull requests in an environment managed by your organization. Copilot inference, licensing, and policies, however, are GitHub cloud services. The resulting architecture combines two management planes: repositories on GHES and AI in the cloud.

1. Cloud and Server differ in what they can keep isolated

GitHub Enterprise includes GitHub Enterprise Cloud (GHEC), operated by GitHub, and GitHub Enterprise Server (GHES), operated by the customer.

GitHub Enterprise Cloud

GitHub Enterprise Server

GHES does not, however, always operate in complete isolation.

For example, enabling GitHub Connect links GHES to an enterprise account on GitHub Enterprise Cloud and can provide license synchronization, Dependabot, Actions on GitHub.com, and unified search. GitHub Connect itself does not transfer repositories, issues, or pull requests to the cloud. It does send connection information and license usage counts, however, and enabled features may also send user IDs and email addresses, Action names and YAML, search terms, and search results.

Two details are particularly important:

In other words, choosing GHES does not automatically keep every communication and every type of data on-premises. For each feature, you need to identify what data is sent and in which direction.

2. GHES user management and EMU

Authentication methods available on GHES

GHES users have accounts created within the GHES instance. The available authentication methods are:

With built-in authentication, users create an account after receiving an invitation or through sign-up. With CAS, LDAP, or SAML, GHES can create an account just in time (JIT) when an authenticated user first accesses the instance.

SAML + SCIM enables IdP-driven provisioning and suspension

Current GHES releases can combine SAML SSO and SCIM to manage the following lifecycle operations from an IdP:

The official documentation lists the following partner IdPs:

GitHub recommends using the same partner IdP for authentication and provisioning. SCIM requires SAML or SAML with built-in authentication; it cannot be combined with CAS or LDAP.

Adding SCIM to an existing SAML environment also requires careful migration planning. After SCIM is enabled, existing SAML users cannot sign in until their identities have been provisioned through SCIM. GHES links existing accounts by matching the SCIM userName to the GHES username. Before migration, plan for phased assignments, username matching, and an emergency administrator account that uses built-in authentication.

EMU is not available on GHES

This is the easiest distinction to misunderstand.

Enterprise Managed Users (EMU) is an account model for GitHub Enterprise Cloud. It does not exist on GHES.

SAML + SCIM on GHES lets an IdP create and suspend accounts within the GHES instance. Although parts of the operational model may resemble EMU, they are different systems.

AspectEMU on GHECSAML + SCIM on GHES
Account locationManaged users on GitHub.com or GHE.comUsers within your organization’s GHES instance
ScopeWithin the EMU enterpriseWithin that GHES instance
Relationship to Data ResidencyRequired for GHE.comNone
Account used to authenticate to CopilotCan be used directlyA separate cloud-side account is required

GHES SCIM can meet a requirement to provision users automatically from an IdP. If the requirement is to govern Copilot and other cloud features under the same managed identity model on GitHub Cloud, however, you must separately design either personal accounts or EMU on the cloud side.

3. Management boundaries when GHES users use Copilot

GitHub Copilot does not perform inference inside the GHES appliance. Users connect to GitHub’s Copilot service from an IDE extension or the CLI.

As a result, a developer who uses Copilot with a GHES repository typically has two identities:

  1. A GHES account for signing in to GHES and accessing repositories
  2. A cloud-side GitHub account that receives the Copilot license and authenticates to Copilot from the IDE

Even if the two accounts use the same corporate email address or IdP, GitHub manages them as separate accounts.

A dedicated enterprise for Copilot Business

For companies that do not already manage users in a cloud-side organization or enterprise, GitHub’s official documentation describes an option to create a dedicated enterprise solely for managing Copilot Business licenses. This is not mandatory for companies using GHES; it is one way to centralize Copilot management.

The dedicated enterprise can use either of these identity models:

Users can be added directly to the enterprise without being placed in an organization, and Copilot Business licenses can be assigned to individual users or enterprise teams. This approach avoids assigning a GitHub Enterprise license to every user solely to provide Copilot.

Developer
  ├─ GHES account ── Access repositories, issues, and pull requests on company GHES
  └─ Cloud account ── Receive Copilot Business license and policies
                         └─ Connect to the Copilot service from an IDE or CLI

It is therefore easiest to think of Copilot licenses and policies as being managed through AI Controls in the cloud-side enterprise settings, not through the GHES enterprise settings.

The GitHub Enterprise plan includes both GitHub Enterprise Cloud and GitHub Enterprise Server. If your agreement already includes a cloud-side enterprise, whether to use it for Copilot management or create a separate Copilot-only enterprise depends on your contract and identity architecture. Confirming this with your GitHub sales representative is the safest approach.

The differences between Copilot Business and Copilot Enterprise also include features that assume repositories and pull requests are hosted on GitHub.com. If the authoritative copy of your code exists only on GHES, not every higher-tier feature may be available. Do not choose a plan by name alone; verify feature by feature whether the capabilities you need apply to GHES repositories.

4. Can Copilot policies differ by organization?

The short answer is yes, if you create organizations on the cloud side. An organization is not always necessary, however.

Without an organization

With an organization

GitHub’s official setup guidance for a dedicated Copilot Business enterprise tells administrators not to create an organization during the initial setup. If you only need to manage Copilot licenses, assigning users and teams directly under the enterprise is the simplest place to start.

On the other hand, repository-based centralized configuration, such as distributing server-managed settings from a .github-private repository, requires an organization. The users who create and manage that organization need GitHub Enterprise licenses. Managed settings can also be deployed through MDM or file distribution.

Watch for policy conflicts across multiple organizations

If the same user receives a Copilot license from multiple organizations with different policies, most features apply the least restrictive policy.

Some policies instead apply the most restrictive setting. These include suggestions matching public code, semantic indexing for repositories outside GitHub, the Copilot Metrics API, and Copilot code review for members who do not have a license.

Placing a user in a tightly controlled organization does not necessarily make all of that user’s Copilot access equally restrictive. If strict governance is required, explicitly enforce the relevant policies at the enterprise level instead of broadly delegating them to organizations.

5. Some Copilot policies do not apply everywhere

Copilot is available in several contexts, including IDEs, the CLI, GitHub.com, the Copilot cloud agent, and Copilot code review. The same policy does not necessarily apply to every feature.

Representative examples include:

Policy or controlUnsupported features or other limitations
Content exclusionNot supported in Copilot CLI, the Copilot cloud agent, or Edit Mode and Agent Mode in Copilot Chat for IDEs
Copilot can search the webDoes not control internet access for the Copilot cloud agent
Custom modelsNot supported by the Copilot cloud agent or Copilot code review
MCP Registry URL or restrictions on registry serversDoes not apply to the Copilot cloud agent
Suggestions matching public codeDoes not apply in the same way outside inline suggestions, including in the CLI and GitHub.com Chat

Content exclusion requires particular care.

Cloud-side enterprise and organization settings can specify any Git remote URL, including a GHES URL, to exclude particular files or paths from Copilot context. The exclusion applies to inline suggestions and supported Copilot Chat features, but it does not apply to Edit Mode or Agent Mode in Copilot Chat, Copilot CLI, or the Copilot cloud agent.

It is dangerous to assume that configuring an exclusion policy removes a file from every Copilot feature. During rollout, allow features individually and consult the policy support matrix for each capability you plan to enable.

6. Can the Copilot cloud agent be used with GHES?

It is important to distinguish between the following two capabilities.

Agent Mode in an IDE

Agent Mode can read local files, run commands, and modify code within an IDE. It can be used with a locally cloned GHES repository as long as the developer can authenticate to Copilot with a cloud-side account.

As noted above, content exclusion is not supported in Agent Mode. Client-side controls for network access, terminal execution, MCP, approval flows, and related capabilities must be designed separately.

Copilot cloud agent

The Copilot cloud agent accepts delegated work from GitHub issues or Chat, then creates a branch, makes changes, runs tests, and opens a pull request from a temporary development environment powered by GitHub Actions.

The official administration procedures assume the following GitHub.com resources:

GitHub’s official documentation states that the Copilot cloud agent works only with repositories hosted on GitHub. Its administration procedures assume an enterprise, organization, and repositories on GitHub.com, and the GHES 3.21 documentation does not contain a feature page for the Copilot cloud agent. This article therefore treats repositories that exist only on GHES as unsupported by the Copilot cloud agent.

For now, the following interpretation is the safest:

If the Copilot cloud agent is a requirement, first decide where the authoritative repository will reside and what may be copied to the cloud. Then confirm the latest GHES support status with GitHub Sales or Support.

AspectAgent Mode in an IDECopilot cloud agent
Execution locationDeveloper’s local environmentTemporary development environment powered by GitHub Actions
Target codeLocally cloned repositoryTarget repository hosted on GitHub.com
GHES repositorySupported when cloned locallyA repository that exists only on GHES is unsupported
OutputDirect changes to local filesA branch and pull request containing the proposed changes
Content exclusionDoes not applyDoes not apply
Main control pointsClient settings, managed settings, execution approvals, MCPEnterprise, organization, and repository permissions; agent firewall; MCP

7. Key constraints in other GitHub products

GitHub Actions

GitHub Actions is available on GHES, but its operating model differs significantly from the cloud service.

GHES bundles several widely used official Actions, but they are snapshots from the time of the release. In a fully isolated environment, you must mirror not only the Actions themselves but also tool caches fetched by setup-*, package manager sources, container registries, and other dependencies.

GitHub Codespaces

Codespaces is a cloud-hosted development environment operated by GitHub. The GHES 3.21 documentation does not contain a Codespaces feature page, and I could not find a documented configuration for creating Codespaces from GHES repositories.

If you need a similar experience with GHES, consider local development environments based on Dev Containers, an internal VDI, or another self-hosted development environment.

Dependabot

Dependabot alerts and updates are available on GHES, but they have additional configuration requirements.

GitHub Code Security and Secret Protection

GHES supports the major Code Security and Secret Protection capabilities:

AI-assisted features and new administration interfaces that first appear on GitHub.com may not arrive on GHES at the same time. During evaluation, do not rely on the product name “GitHub Enterprise” alone. Confirm that the official documentation for the GHES version you plan to use includes a page for the specific feature.

The trade-off between GitHub Connect and complete isolation

FeatureCan operate entirely within GHESRequires cloud or outbound connectivity
Repositories, issues, and pull requestsYesNo
Major bundled ActionsYesNo
Actions from GitHub.com or MarketplaceCan be imported through manual synchronizationAutomatic use requires GitHub Connect and outbound connectivity
Dependabot alertsVulnerability data is evaluated within GHESGitHub Connect is required to synchronize the Advisory Database
Dependabot updatesRun on a self-hosted runnerTypically require connectivity to a package registry
Copilot in an IDEEdits local filesRequires the Copilot service and a cloud-side account
Copilot cloud agent and CodespacesCannot operate entirely within GHESAssume a cloud-side organization, repositories, and compute environment

When choosing GHES, do not reduce the decision to cloud versus on-premises. For each feature, decide whether you will allow complete isolation, limited outbound connectivity, or combined cloud use.

8. What to confirm before deployment

The following questions can help structure your requirements.

Data and network

Identity and licensing

Copilot

Operations

Summary

This research reminded me that the difference between GitHub Enterprise Cloud and GitHub Enterprise Server is about much more than where the code is stored.

GHES lets an organization keep repositories, issues, pull requests, and user accounts in an environment it manages. SAML + SCIM is not EMU, but it can still manage GHES account creation, suspension, and team membership from an IdP.

Copilot, on the other hand, is a cloud service. GHES users need a separate cloud-side account and license to use Copilot, and Copilot policies are managed through the cloud-side enterprise or organization.

Organizations can separate policies, but a dedicated Copilot enterprise also allows direct license assignment without an organization. For users who belong to multiple organizations, most policies apply the least restrictive setting. Policies that require strict governance are therefore better enforced at the enterprise level.

Agent Mode in an IDE and the Copilot cloud agent are also different capabilities. Agent Mode can work with a locally cloned GHES repository, while the Copilot cloud agent assumes a cloud-side organization, repository, and GitHub Actions environment. Copying code to the cloud to use the Copilot cloud agent conflicts with the original requirement to keep code on-premises.

When evaluating GHES, it may help to consider three questions:

  1. Which data must never leave your environment?
  2. Which features can use limited outbound connectivity?
  3. Which development experiences are worth allowing combined cloud use?

Choosing GHES does not simply mean “not using the cloud.” It means explicitly deciding, feature by feature, which boundaries your organization will own and which it will entrust to cloud services.

Official sources

GitHub Enterprise Server and identity management

GitHub Copilot

Actions and Security