PHPackages                             contao-community-alliance/vcs-synchronizer - 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. contao-community-alliance/vcs-synchronizer

Abandoned → [bit3/vcs-synchronizer](/?search=bit3%2Fvcs-synchronizer)ArchivedLibrary

contao-community-alliance/vcs-synchronizer
==========================================

Keep multiple VCS repositories in sync.

08PHP

Since Nov 11Pushed 11y ago3 watchersCompare

[ Source](https://github.com/contao-community-alliance-archive/vcs-synchronizer)[ Packagist](https://packagist.org/packages/contao-community-alliance/vcs-synchronizer)[ RSS](/packages/contao-community-alliance-vcs-synchronizer/feed)WikiDiscussions develop Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

[![Version](https://camo.githubusercontent.com/f2a0a15e80469e2c002a7540e8a2b221b7c39b1dfb5c6d1a4d8a11ef0bed14c0/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f6e74616f2d636f6d6d756e6974792d616c6c69616e63652f7663732d73796e6368726f6e697a65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/contao-community-alliance/vcs-synchronizer)[!\[Stable Build Status\](http://img.shields.io/travis/contao-community-alliance/vcs-synchronizer/master.svg?style=flat-square&amp;label=stable build)](https://travis-ci.org/contao-community-alliance/vcs-synchronizer)[!\[Upstream Build Status\](http://img.shields.io/travis/contao-community-alliance/vcs-synchronizer/develop.svg?style=flat-square&amp;label=dev build)](https://travis-ci.org/contao-community-alliance/vcs-synchronizer)[![License](https://camo.githubusercontent.com/6c33b6670d8e5c0da2be5ecadb49e7863645a6138222eaaa7955c4cf28f0ddeb/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f636f6e74616f2d636f6d6d756e6974792d616c6c69616e63652f7663732d73796e6368726f6e697a65722e7376673f7374796c653d666c61742d737175617265)](https://github.com/contao-community-alliance/vcs-synchronizer/blob/master/LICENSE)[![Downloads](https://camo.githubusercontent.com/09925664eca9c4f5984bc2dc2291141f4f8d03820a4efb1c439c699b96c16617/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636f6e74616f2d636f6d6d756e6974792d616c6c69616e63652f7663732d73796e6368726f6e697a65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/contao-community-alliance/vcs-synchronizer)

VCS Synchronizers
=================

[](#vcs-synchronizers)

This repository contains multiple synchronizers to synchronize multiple VCS repositories (of the same type).

Symmetric vs. Asymmetric synchronisation
----------------------------------------

[](#symmetric-vs-asymmetric-synchronisation)

Symmetric synchronisation means that each repository is compared and synchronized against each other. If a conflict is detected - two remotes have divergent branches - no repository of the concerned branch is synchronized.

Asymmetric synchronisation means that one - the primary - repository is compared and synchronized against all the others repositories. If a conflict is detected - one remote branch is ahead of the primary - the branch in the concerned repository is not synchronized.

Working repository
------------------

[](#working-repository)

The synchronizers work on a local *working repository*. But they won't create them for you! This let you keep control of what happened.

Here is an example, how you could create the local *working repository*.

```
use ContaoCommunityAlliance\BuildSystem\Repository\GitRepository;

$path = tempnam(sys_get_temp_dir());
unlink($path);
mkdir($path);

$repository = new GitRepository($path);
$repository->init()->execute();
$repository->remote()->add('github', 'git@github.com:contao-community-alliance/vcs-synchronizer.git')->execute();
$repository->remote()->add('bitbucket', 'git@bitbucket.org:contao-community-alliance/vcs-synchronizer.git')->execute();
```

GIT Synchronizers
=================

[](#git-synchronizers)

Symmetric branch synchronizer
-----------------------------

[](#symmetric-branch-synchronizer)

**CLI usage**

```
./bin/git-branches-symmetric-sync -b github -b bitbucket /path/to/repository
```

**PHP usage**

```
use ContaoCommunityAlliance\BuildSystem\VcsSync\Synchronizer\GitSymmetricBranchSynchronizer;

$synchronizer = new GitSymmetricBranchSynchronizer(
    // the working repository
    $repository,
    // the remotes to synchronize
    ['github', 'bitbucket']
);
$synchronizer->setLogger($logger);
$synchronizer->sync();
```

Asymmetric branch synchronizer
------------------------------

[](#asymmetric-branch-synchronizer)

**CLI usage**

```
./bin/git-branches-asymmetric-sync -b github -b bitbucket -p github /path/to/repository
```

**PHP usage**

```
use ContaoCommunityAlliance\BuildSystem\VcsSync\Synchronizer\GitAsymmetricBranchSynchronizer;

$synchronizer = new GitAsymmetricBranchSynchronizer(
    // the working repository
    $repository,
    // the remotes to synchronize
    ['github', 'bitbucket'],
    // the primary remote
    'github'
);
$synchronizer->setLogger($logger);
$synchronizer->sync();
```

Asymmetric tag synchronizer
---------------------------

[](#asymmetric-tag-synchronizer)

**CLI usage**

```
./bin/git-tags-asymmetric-sync -b github -b bitbucket -p github /path/to/repository
```

**PHP usage**

```
use ContaoCommunityAlliance\BuildSystem\VcsSync\Synchronizer\GitAsymmetricTagSynchronizer;

$synchronizer = new GitAsymmetricTagSynchronizer(
    // the working repository
    $repository,
    // the remotes to synchronize
    ['github', 'bitbucket'],
    // the primary remote
    'github'
);
$synchronizer->setLogger($logger);
$synchronizer->sync();
```

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/8672569?v=4)[California College of Arts](/maintainers/cca)[@cca](https://github.com/cca)

---

Top Contributors

[![tristanlins](https://avatars.githubusercontent.com/u/343404?v=4)](https://github.com/tristanlins "tristanlins (10 commits)")

### Embed Badge

![Health badge](/badges/contao-community-alliance-vcs-synchronizer/health.svg)

```
[![Health](https://phpackages.com/badges/contao-community-alliance-vcs-synchronizer/health.svg)](https://phpackages.com/packages/contao-community-alliance-vcs-synchronizer)
```

PHPackages © 2026

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