Now accepting guest editorial from SAP, Oracle, Workday and ServiceNow practitioners.Pitch a guide
The Sign-Off Table

Lesson 4 of 6

gCTS: git inside the Change and Transport System

9 min

Listen to this lesson

0:00 / 15:06

gCTS approaches the problem from the other side. abapGit is a client that a developer runs; gCTS is part of the ABAP platform's change and transport system. SAP describes it as letting you store all versions of ABAP development and Customizing objects in git repositories. You keep developing in ADT and recording changes in transport requests, and gCTS turns released requests into commits.

What gCTS provides

  • Storage of ABAP developments in git repositories on a git server, with several repositories per system (for example one per project and one for Customizing).
  • The gCTS app (SAP Fiori app Git-Enabled Change and Transport Management) for cloning, committing, pushing and pulling.
  • Support for nearly all development and Customizing object types; SAP Note 2888887 lists the restrictions.
  • Updates of target systems by pulling commits, without the shared transport directory and import queues of classic CTS, and support for continuous integration pipelines, which SAP recommends for updating targets.

The process

With gCTS, releasing a request creates a commit that is pushed to the git server; target systems pull commits and import them through generated requests.
The Sign-Off Table · thesignofftable.com/academy/sap-aid-204

By default, gCTS creates a commit in the local repository when a transport is released, then pushes it to the remote. If the push fails, for example because of missing rights on the git server, you push manually. You can also push individual objects before release, or implement a Business Add-In so that releasing a task creates a commit and push, which gives reviewers smaller increments.

vSID, transport layers and roles

gCTS needs a link between the transport system and a repository. Without the gCTS registry, that link is the vSID: a three-character virtual non-ABAP system of type VCS, unique in the transport landscape. The gCTS transport layer is named Z followed by the vSID, so a vSID of CAG gives layer ZCAG. Assigning a package to that layer makes it gCTS-managed; packages on classic layers keep using classic CTS. With the gCTS registry, the registry decides which repository an object goes to, and one vSID can serve all repositories in a system.

Repository roleUsed onCan push?Can pull?
Development (default)Source (development) systemsYesYes
ProvidedTarget systems that only receive contentNoYes

Repository roles when you create a git repository in the gCTS app.

Creating a new vSID needs authorization object S_GCTS_SYS with activity 70 (Administer); without it you can only pick existing vSIDs. On a target system, each pull creates a change request whose number derives from the vSID, and that request is the container that imports and activates the objects.

For Customizing, SAP recommends a separate repository and the gCTS registry. Registered Customizing objects are assigned to the right repository when the request is released, and requests for Customizing no longer need a target system. Client-specific content records its source client in the repository, and the target client must match it. In practice this makes gCTS more attractive for landscapes that move a lot of configuration between systems with the same client layout, and less so for converted landscapes with many clients and legacy request habits.

SAP recommends updating target systems through CI pipelines rather than manual pulls. A pipeline can pull a commit into a test system, run ABAP Unit and ATC there, and report back to the pull request, which turns gCTS into the deployment step of a continuous integration flow. That is a bigger change to release management than adopting abapGit for review, so plan it as its own project with Luis and Sam, not as a side effect of introducing agents.

AspectabapGitgCTS
What it isGit client written in ABAPPart of the ABAP platform's CTS
WhereCommunity: any system 702+; SAP fork: BTP ABAP environment, S/4HANA Cloud Public EditionSAP S/4HANA 1909 and later on premise; also used in S/4HANA Cloud Public Edition for partner delivery
Commit triggerDeveloper stages and commitsRelease of a request (or task, with a BAdI), or a manual push
Moving code to targetsUsually still transports; pulls in dev onlyPull commits into targets, ideally from CI pipelines
CustomizingRepository objects focusSupported; SAP recommends a separate repository and the registry
SupportCommunity version: community. SAP fork: SAPSAP
abapGit and gCTS solve different problems; their file formats aren't interoperable.
The Sign-Off Table · thesignofftable.com/academy/sap-aid-204

Limits to know before you choose gCTS

  • SAP says that to transport requests for SAP Note corrections or modification adjustments you must continue to configure classic CTS (see SAP Note 2821718). A converted ECC system has plenty of both.
  • TMS initial activation is still needed in every system, even if you use gCTS only.
  • Client-specific Customizing pulls have known issues that SAP documents in its troubleshooting guide; test them before you rely on them.
  • gCTS and abapGit artifacts aren't interoperable; SAP describes a one-time path to move abapGit content into a gCTS repository through a transport with the gCTS vSID as target.

What would you do?

Six months later, a consultant proposes gCTS for the core agreement package so that "agent changes are reviewed in git automatically". Luis asks Kenji whether that is what gCTS does. What is the accurate answer?

Key points
  • gCTS is SAP's git integration inside CTS: released requests become commits, and targets pull commits.
  • The vSID (three characters, type VCS) links a package's transport layer Z<vSID> to a repository; the registry is the alternative.
  • Development repositories push and pull; Provided repositories only pull. S_GCTS_SYS activity 70 is needed to create vSIDs.
  • SAP Note corrections and modification adjustments still need classic CTS, which matters in a converted system.

Check your understanding · not graded

Lesson check

  1. 1. By default, when does gCTS create a commit in the local repository?

  2. 2. A package's transport layer is ZCAG. What does that tell you?

  3. 3. Which repository role do you use on a target system that should only receive content?

  4. 4. Why might a converted ECC system keep classic CTS even if it adopts gCTS?