# Umzug eines Repositories

via git push --mirror

Der manuelle Umzug per `--mirror` ist ideal, wenn du ein reines Git-Repository inklusive aller **Branches, Tags und der kompletten Commit-Historie** übertragen möchtest – ganz ohne GitHub-Tokens oder Metadaten wie PRs und Issues.

Hier ist der genaue Ablauf über das Terminal:

<div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-1.leeres-repository-" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"><span class="only-show-to-message-actions" data-test-id="sequence-export-header">**1.Leeres Repository in Forgejo erstellen:**Auf der Ziel-Plattform.</span>1. Melde dich bei deiner Forgejo-Instanz an.
2. Klicke auf das **+**-Symbol oben rechts und wähle **Neues Repository**.
3. Gib den Repository-Namen ein.
4. **Wichtig:** Initialisiere das Repository **nicht** (keine README, keine `.gitignore` und keine Lizenz anlegen lassen). Es muss vollkommen leer sein.
5. Kopiere die Git-URL des neuen Repositories (z. B. `[https://forgejo.dein-server.de/user/repo.git](https://forgejo.dein-server.de/user/repo.git)` oder per SSH `git@forgejo.dein-server.de:user/repo.git`).

</div></div></div><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"><span class="only-show-to-message-actions" data-test-id="sequence-export-header">**2.Bare-Clone des GitHub-Repositories erstellen:**Lokal auf deinem Computer.</span></div></div></div></div></div></div>Erstelle einen temporären "Bare-Clone" des GitHub-Repositories. Dieser enthält nur die Git-Datenbank ohne Arbeitsverzeichnis:

<div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div></div></div></div><div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="1" id="bkmrk-bash" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-88"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-88"><div _ngcontent-ng-c2273258466="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2273258466-88 ng-star-inserted"><span class="ng-tns-c2273258466-88">Bash</span><div _ngcontent-ng-c2273258466="" class="buttons ng-tns-c2273258466-88 ng-star-inserted"><button aria-label="Code herunterladen" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Code kopieren" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
git clone --bare https://github.com/nutzername/repository.git mirror-temp.git
cd mirror-temp.git

```

<div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="1" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-88"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-88"></div></div></div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-3.repository-zu-forg" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"><span class="only-show-to-message-actions" data-test-id="sequence-export-header">**3.Repository zu Forgejo spiegeln:**</span></div></div></div></div></div></div>Pushe den gesamten Stand (alle Referenzen, Branches und Tags) per Mirror-Option zu Forgejo:

<div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk--2" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div></div></div></div><div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="4" id="bkmrk-bash-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-89"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-89"><div _ngcontent-ng-c2273258466="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2273258466-89 ng-star-inserted"><span class="ng-tns-c2273258466-89">Bash</span><div _ngcontent-ng-c2273258466="" class="buttons ng-tns-c2273258466-89 ng-star-inserted"><button aria-label="Code herunterladen" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Code kopieren" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
git push --mirror https://forgejo.dein-server.de/user/repo.git

```

<div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="4" id="bkmrk--3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-89"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-89"></div></div></div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk--4" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div></div></div></div>*(Wenn du SSH nutzt, verwende die SSH-URL: `git push --mirror git@forgejo.dein-server.de:user/repo.git`)*

<div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-4.aufr%C3%A4umen-und-remo" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"><span class="only-show-to-message-actions" data-test-id="sequence-export-header">**4.Aufräumen und Remote-URL aktualisieren:**Saubermachen und bestehende Arbeitskopie anpassen.</span>1. Lösche den temporären Bare-Ordner wieder:

</div></div></div></div></div></div><div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-90 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="7" id="bkmrk-bash-2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-90"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-90"><div _ngcontent-ng-c2273258466="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2273258466-90 ng-star-inserted"><span class="ng-tns-c2273258466-90">Bash</span><div _ngcontent-ng-c2273258466="" class="buttons ng-tns-c2273258466-90 ng-star-inserted"><button aria-label="Code herunterladen" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Code kopieren" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
cd ..
rm -rf mirror-temp.git

```

<div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-90 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="7" id="bkmrk--5" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-90"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-90"></div></div></div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-wenn-du-bereits-eine" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l">2. Wenn du bereits einen normalen Arbeitsordner des Repositories auf deinem Rechner hast, wechsle hinein und passe die Remote-URL an:

</div></div></div></div></div></div><div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="10" id="bkmrk-bash-3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-91"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-91"><div _ngcontent-ng-c2273258466="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2273258466-91 ng-star-inserted"><span class="ng-tns-c2273258466-91">Bash</span><div _ngcontent-ng-c2273258466="" class="buttons ng-tns-c2273258466-91 ng-star-inserted"><button aria-label="Code herunterladen" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Code kopieren" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
cd dein-projekt-ordner
git remote set-url origin https://forgejo.dein-server.de/user/repo.git
git fetch origin

```

<div _ngcontent-ng-c2273258466="" class="code-block ng-tns-c2273258466-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="10" id="bkmrk--6" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_3acbd7899f951fcc","c_cc161d4411f4ff06",null,"rc_13dd601b739db358",null,null,"de",null,1,null,null,1,0]]"><div _ngcontent-ng-c2273258466="" class="formatted-code-block-internal-container ng-tns-c2273258466-91"><div _ngcontent-ng-c2273258466="" class="animated-opacity ng-tns-c2273258466-91"></div></div></div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk--7" inline-copy-host=""><div class="attachment-container unknown"><div class="sequence-container" data-hveid="0" data-ved="0CAAQse0SahgKEwi63K-v_YaWAxUAAAAAHQAAAAAQlAE" decode-data-ved="1" jslog="308913;track:impression,attention"><div class="sequence-event ng-star-inserted"><div class="sequence-event-content"><div class="sequence-event-description gds-body-l"></div></div></div></div></div></div>### Was macht `--mirror` anders als ein normaler Push?

<div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk-git-push---all-%C3%BCbert" inline-copy-host="">- **`git push --all`** überträgt nur alle lokalen Branches.
- **`git push --mirror`** spiegelt den *exakten* Zustand aller Referenzen: Lokale Branches, Remote-Tracking-Branches, Tags sowie Notizen (`refs/notes/`). Es überschreibt das Ziel-Repository komplett, damit es exakt dem Quell-Repository entspricht.

</div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk--8" inline-copy-host=""><div class="attachment-container unknown"></div></div><div _ngcontent-ng-c3547852805="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color md-content" dir="ltr" id="bkmrk--9" inline-copy-host=""></div>