PHPackages                             code711/siteconfiggitsync - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. code711/siteconfiggitsync

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

code711/siteconfiggitsync
=========================

Sync changes in config/site back into your git repository

3.0.1(2w ago)29.6k↓44.2%1MITPHPPHP ^8.2

Since Feb 26Pushed 2w ago1 watchersCompare

[ Source](https://github.com/codeseveneleven/siteconfiggitsync)[ Packagist](https://packagist.org/packages/code711/siteconfiggitsync)[ RSS](/packages/code711-siteconfiggitsync/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (10)Dependencies (23)Versions (22)Used By (0)

TYPO3 Site config - git synchronisation
=======================================

[](#typo3-site-config---git-synchronisation)

[![Latest Stable Version](https://camo.githubusercontent.com/d7b15a1c9e062fe5babe7d08a86d14c7568692dfa6211f732c00299c7160df6e/68747470733a2f2f706f7365722e707567782e6f72672f636f64653731312f73697465636f6e66696767697473796e632f762f737461626c652e737667)](https://extensions.typo3.org/extension/siteconfiggitsync)[![TYPO3 13](https://camo.githubusercontent.com/2cf6570821614808899422f68a66a381a2de1dd0746ba9cdba6155def1f4f396/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332d6f72616e67652e737667)](https://get.typo3.org/version/13)[![TYPO3 14](https://camo.githubusercontent.com/382ff45949671f1b9c4431781f1961eb04a15376fe22523e03a9893c6d4ec278/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31342d6f72616e67652e737667)](https://get.typo3.org/version/14)[![Total Downloads](https://camo.githubusercontent.com/231e595e0342c980c6c024e50db6f2df843f9c5c4ee30904c912411cbb211372/68747470733a2f2f706f7365722e707567782e6f72672f636f64653731312f73697465636f6e66696767697473796e632f642f746f74616c2e737667)](https://packagist.org/packages/code711/siteconfiggitsync)[![Monthly Downloads](https://camo.githubusercontent.com/0deb07132a6f1cfaa7cf7f3e56623360f7ffa3c1d1d182c6970ea41c9781b71e/68747470733a2f2f706f7365722e707567782e6f72672f636f64653731312f73697465636f6e66696767697473796e632f642f6d6f6e74686c79)](https://packagist.org/packages/code711/siteconfiggitsync)[![PHPSTAN:Level 8](https://camo.githubusercontent.com/9cf3eedeb93d7af9f2259cf85f1426ad523b064238a272d9cc6b69343fb5cb91/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230382d627269676874677265656e2e7376673f7374796c653d666c6174253544)](https://camo.githubusercontent.com/9cf3eedeb93d7af9f2259cf85f1426ad523b064238a272d9cc6b69343fb5cb91/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230382d627269676874677265656e2e7376673f7374796c653d666c6174253544)[![build:passing](https://camo.githubusercontent.com/989e45ca817066fe8c5d1460cb806846261eaf6753be5021bb809440ff2e9c0c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275696c642d70617373696e672d627269676874677265656e2e7376673f7374796c653d666c6174253544)](https://camo.githubusercontent.com/989e45ca817066fe8c5d1460cb806846261eaf6753be5021bb809440ff2e9c0c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275696c642d70617373696e672d627269676874677265656e2e7376673f7374796c653d666c6174253544)

Sometimes it is necessary for a TYPO3 project that the site-config yaml files are managed in git alongside the site-package. Those projects have the problem that site-admins can then not change settings in the site config without manually carrying those changes back over to the git repository in order for them not to be overriden with the next CI/CD run or publish.

This extension aims to alleviate this problem by pushing those changes back to your GitLab instance automatically. In doing so the extension will create a branch, check in the changes that have been made and create a merge-request which you then can manage in GitLab without manually merging the yaml files. And you will be notified about the changes because of the merge-request.

There is no git binary on the server needed, everything is done through the GitLab API. GitHub and GitLab (selfhosted or GitLab.com) are supported.

Changelog
---------

[](#changelog)

### 3.0.1

[](#301)

- relaxed dependency on m4tthumphrey/php-gitlab-api to allow for 11.x and 12.x versions

### 3.0.0

[](#300)

- added TYPO3 14 support (TYPO3 13.4 is still supported)
- requires EXT:siteconfigurationevents 2.x or 3.x, use 3.x on TYPO3 14
- updated to m4tthumphrey/php-gitlab-api 12.x
- renaming/moving a site config is now done with a single git move commit instead of committing a new file and deleting the old one (GitLab only, see [notes and limitations](#notes-and-limitations))
- improved automatic merge:
    - if the merge-request already exists, the open merge-request for that branch is picked up instead of being skipped
    - merge readiness is now determined by GitLabs `detailed_merge_status` and by whether the token user is actually allowed to merge
- added config option 'Remove Source Branch' to set the `remove_source_branch` flag on the merge request (GitLab)
- added config option 'Squash' to set the `squash` flag on the merge request (GitLab)

### 2.1.3

[](#213)

Bugfix in extension configurator:

- branch was not selected in dropdown

### 2.1.2 &amp; 1.2.2

[](#212--122)

Changed logic when the Eventhandlers actually act:

- if TYPO3 is in Production-mode
- if the Environment Variable SITECONFIGGITSYNC\_ENABLE is set to 1

### 2.1.0

[](#210)

- added new feature for automatic merge if possible
- added config option in extension configuration to enable automatic merge

### 2.0.0

[](#200)

- deprecated TYPO3 11 support
- deprecated TYPO3 12 Support
- added Eventlistener for writing settings.yaml
- added support for moving settings.yaml
- added support for deleting settings.yaml

#### 1.1.0

[](#110)

- added GitHub support

#### 1.0.3

[](#103)

- fixed issue [\#1](https://GitHub.com/codeseveneleven/siteconfiggitsync/issues/1)
- fixed issue reading the user-list in the extension configuration interface when a project is not part of a group
- added LoggerAwareInterface to AfterConfigurationWriteListener

#### 1.0.1

[](#101)

Fix README.md

#### 1.0.0

[](#100)

Support TYPO3 12

#### 0.10.0

[](#0100)

Externalised the XCLASS of the SiteConfiguration Class to [EXT:siteconfigurationevents](https://extensions.typo3.org/extension/siteconfigurationevents). Composer installations should pull this extension automatically as a dependency. Refactored the git related actions into event listeners.

#### 0.9.x Initial release

[](#09x-initial-release)

Setup / Installation
--------------------

[](#setup--installation)

### GitLab token

[](#gitlab-token)

after installing this extension with

```
composer req code711/siteconfiggitsync
```

 you will need to create an API Token in your GitLab Project Page with at least 'Developer' permissions.This is done in your GitLab in your Project under 'Settings-&gt;Access Token'. Developer Permissions are needed because only from this level on Branches can be created and Merge-requests can be issued.

[![GitLab Backend](https://camo.githubusercontent.com/2a90f9fb8d073c1a391ed4f1f992589cd5fdbb99f7076d45f0e3d1ceead51b1f/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f6769746c61622e706e67)](https://camo.githubusercontent.com/2a90f9fb8d073c1a391ed4f1f992589cd5fdbb99f7076d45f0e3d1ceead51b1f/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f6769746c61622e706e67)

In the field 'Token name' enter something meaningfull for this task, as it will be written next to commits or merge-requests. For example 'External Site change from TYPO3'.

Set the 'Expiration Date' to your liking.

In 'Select a role' choose 'Developer'

And for the scope select 'api'. The other scopes are not enough for the tasks we want to do.

after pressing the 'Create project access token' button you will be given a series of alphanumeric character. Copy this string of character. This is your token.

[![New Token](https://camo.githubusercontent.com/e01b26a4014e626c0224dec2317be75693d88ba16a7a95a30d015f0c305f9283/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f6e6577746f6b656e2e706e67)](https://camo.githubusercontent.com/e01b26a4014e626c0224dec2317be75693d88ba16a7a95a30d015f0c305f9283/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f6e6577746f6b656e2e706e67)

### GitHub token

[](#github-token)

after installing this extension with

```
composer req code711/siteconfiggitsync
```

 you will need to create an API Token in your GitLab Project Page with at least 'Developer' permissions.The setup for GitHub is from TYPO3 Point of view the same as in the above GitLab setup.

The main difference is how to access your ACCESS\_TOKEN.

In GitHub access tokens are always personal tied to a user. The token can be created inside an organisation or team, but it has to be created as a personal token by one of its members.

To do that access your GitHub dashboard, and click on your profile Icon. Choose the entry "Settings". In the following page choose 'Developer Settings' on the left hand side of the screen. Finally open up the Option "Personal access tokens" and choose the option "Fine-grained tokens"

You should be here then [Fine-grained personal access token](https://GitHub.com/settings/personal-access-token)

If you don't see the organisation or team where your project is located you have to enrol the organisation or team once. This is done from the Organisation Overview screen by choosing "Settings" in to top menu and then "Personal access tokens" - here you will then be able to enrol your organisation. Once you've done that, return to the "Developer Settings" screen, your organisation will then be listed there.

Create a personal access token of the type "Fine-grained token" and restrict it to the repository you want to push your changes to. The following permissions are needed:

- "Contents" - read &amp; write
- "Pull requests" - read &amp; write
- "Metadata" - readonly

save and store the token

### TYPO3 Backend config

[](#typo3-backend-config)

In your TYPO3 backend navigate to Settings-&gt;Extension Configuration and open the accordion for the siteconfiggitsync extension:

[![Extension Config](https://camo.githubusercontent.com/5b547087357dc017c49c4d134aab5496e6a770811276118f4bc8c507d5e8c6b9/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f657874656e73696f6e636f6e6669672e706e67)](https://camo.githubusercontent.com/5b547087357dc017c49c4d134aab5496e6a770811276118f4bc8c507d5e8c6b9/68747470733a2f2f4769744875622e636f6d2f636f6465736576656e656c6576656e2f73697465636f6e66696767697473796e632f7261772f6d61696e2f446f63756d656e746174696f6e2f657874656e73696f6e636f6e6669672e706e67)

Choose 'GitLab' or 'GitHub' in the service dropdown (v1.1)

In the field project url add the complete URL to your projects repository, without any .git. Just as it is in your browser. for example

```
https://GitLab.com/mycompany/customerproject
```

 (same is true for GitHub)In the field API Auth Token enter the token you just generated.

Now press the "Save 'siteconfiggitsync' Configuration" button, and close the window. Re-open the window and navigate again to the siteconfiggitsync accordion and open it. The fields 'main\_branch' and 'Who to assign a merge request' should be filled with respectively the available branches in that project and members who are allowed to merge merge-requests.

Choose the branch which represents the production branch, i.e. from which the branch to commit the changes should be taken.

Optionaly choose a member who gets the merge-requests assigend to. If no member is chosen the merge-requests will not be assigend to anybody, and it depends on your setup if you are notified when one is created.

Now press the "Save 'siteconfiggitsync' Configuration" button again, and you should be ready to accept merge-requests when the site-config is changed through the backend interface.

#### Merge request options

[](#merge-request-options)

- **Automatically merge** (`mergerequest_automerge`, default off): the created branch will try to merge itself with squash and then delete the branch again, which retains the history. If no automatic merge can be done the user will be notified about the merge request instead. This feature has a few dependencies in setup and permissions, and is not guaranteed to succeed - the token user needs permission to merge into the production branch, and the merge-request has to be mergeable (no conflicts, no unmet approval rules or pending pipelines).
- **(Gitlab) Remove Source Branch** (`mergerequest_remove_source_branch`, default on): sets the `remove_source_branch` flag on the merge request, so the automated branch is deleted when the merge-request is merged - also when it is merged manually.
- **(Gitlab) Squash** (`mergerequest_squash`, default on): sets the `squash` flag on the merge request, so all commits of the automated branch end up as a single commit.

Notes and limitations
---------------------

[](#notes-and-limitations)

- on GitLab renaming is done with a git move commit (since 3.0.0). On GitHub renaming is still done by checking in a new file and removing the old one, because the API has no move operation. This might be revisited later
- the 'Remove Source Branch' and 'Squash' merge-request options are GitLab only, GitHub does not offer an equivalent on the pull-request itself
- not all scenarios have been tested. This is a 'works for me' right now
- The GitLab server must be reachable via http or https from the production server. The GitLab api implementation is using guzzlehttp, so a proxy configuration should be possible, but I have not looked into this yet. Help in this regard is welcome
- it should be possible to add bitbucket support. This might be added at a later stage

###  Health Score

54

—

FairBetter than 97% of packages

Maintenance96

Actively maintained with recent releases

Popularity28

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 97.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~65 days

Recently: every ~94 days

Total

20

Last Release

20d ago

Major Versions

0.10.0 → 1.0.02023-04-07

1.1.0 → 2.0.02025-03-05

1.2.1 → 2.1.12025-05-21

1.2.2 → 2.1.22025-07-15

2.1.3 → 3.0.02026-07-26

PHP version history (7 changes)0.9.0PHP 7.4.\*||8.0.\*||8.1.\*

0.10.0PHP 7.4.\*||8.0.\*||8.1.\*||8.2.\*

1.0.4PHP 7.4.\*||8.0.\*||8.1.\*||8.2.\*||8.3.\*

1.1.0PHP 8.0.\*||8.1.\*||8.2.\*||8.3.\*

2.0.0PHP 8.\*

2.1.0PHP ^8.2

1.2.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/35fe42b338d9a56b03685815a4d6b198d7d78be7d75859f0e8978c88f4605afe?d=identicon)[code711](/maintainers/code711)

---

Top Contributors

[![foppelfb](https://avatars.githubusercontent.com/u/7147768?v=4)](https://github.com/foppelfb "foppelfb (44 commits)")[![andyhirsch](https://avatars.githubusercontent.com/u/14921186?v=4)](https://github.com/andyhirsch "andyhirsch (1 commits)")

### Embed Badge

![Health badge](/badges/code711-siteconfiggitsync/health.svg)

```
[![Health](https://phpackages.com/badges/code711-siteconfiggitsync/health.svg)](https://phpackages.com/packages/code711-siteconfiggitsync)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103574.3k69](/packages/friendsoftypo3-content-blocks)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

40543.5k](/packages/wazum-sluggi)[shyim/danger-php

Port of danger to PHP

8591.4k](/packages/shyim-danger-php)[aeliot/todo-registrar

Register TODOs from source code in issue tracker

153.0k](/packages/aeliot-todo-registrar)[typo3/cms-redirects

TYPO3 CMS Redirects - Create manual redirects, list existing redirects and automatically createredirects on slug changes.

167.6M84](/packages/typo3-cms-redirects)[typo3/cms-form

TYPO3 CMS Form - Flexible TYPO3 frontend form framework that comes with a backend editor interface.

147.8M288](/packages/typo3-cms-form)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
