# Credential Manager einrichten

## Ziel dieser Einrichtung

Der **Git Credential Manager** — kurz *GCM* — verwaltet Zugangsdaten für Git-Server sicher. Unter Windows 11 speichert er Anmeldungen normalerweise im **Windows-Anmeldeinformationsmanager** und verhindert, dass du Benutzername, Token oder Passwort bei jedem `git pull` und `git push` erneut eingeben musst. 🔐

Für GitHub wird der Credential Manager vor allem bei **HTTPS-Remotes** verwendet:

```text
https://github.com/beispielkonto/mein-projekt.git
```

Bei SSH-Remotes übernimmt dagegen der SSH-Agent die Authentifizierung. Dazu mehr im Kapitel über Remotes und Authentifizierung.

> **Wichtig:** GitHub akzeptiert für Git-Operationen über HTTPS kein Kontopasswort mehr. Stattdessen verwendest du eine Browser-Anmeldung über den Credential Manager oder einen Personal Access Token.

---

## Was der Credential Manager tut

Der Credential Manager vermittelt zwischen Git, dem Git-Hoster und der sicheren Windows-Anmeldeverwaltung.

1. Git benötigt Zugang zu einem geschützten Remote-Repository.
2. Git ruft den konfigurierten Credential Helper auf.
3. Der Credential Manager prüft, ob bereits gültige Zugangsdaten existieren.
4. Falls nicht, öffnet er normalerweise den Browser zur Anmeldung.
5. Nach erfolgreicher Anmeldung speichert Windows die erhaltene Berechtigung sicher.
6. Git kann künftig auf das Repository zugreifen, ohne erneut nach Zugangsdaten zu fragen.

Der Ablauf gilt nicht nur für GitHub, sondern unter anderem auch für Azure DevOps, GitLab und Bitbucket — abhängig von deren Konfiguration.

---

## Voraussetzung: Git for Windows mit Credential Manager

Bei der Installation von **Git for Windows** sollte die Option für den **Git Credential Manager** aktiviert sein. In aktuellen Git-for-Windows-Versionen ist dies üblicherweise die empfohlene Standardauswahl.

Prüfe zunächst, ob Git verfügbar ist:

```bash
git --version
```

Prüfe anschließend, welcher Credential Helper konfiguriert ist:

```bash
git config --show-origin --get-all credential.helper
```

Eine typische Ausgabe unter Windows sieht ähnlich aus:

```text
file:C:/Program Files/Git/etc/gitconfig    manager
```

Der Wert `manager` bedeutet, dass Git den modernen Git Credential Manager verwendet.

> Die genaue Dateiposition kann je nach Installation abweichen. Entscheidend ist der Wert `manager`, nicht der exakte Pfad.

---

## Credential Manager aktivieren

Falls keine Ausgabe erscheint oder ein anderer Helper eingetragen ist, kannst du den Credential Manager für dein Benutzerkonto aktivieren:

```bash
git config --global credential.helper manager
```

Danach kontrollierst du die Einstellung erneut:

```bash
git config --global --get credential.helper
```

Erwartete Ausgabe:

```text
manager
```

Die Option `--global` speichert die Einstellung in deiner persönlichen Git-Konfiguration. Unter Windows liegt diese normalerweise in:

```text
C:\Users\<Benutzername>\.gitconfig
```

Du kannst die Konfigurationsquelle vollständig anzeigen lassen:

```bash
git config --global --list --show-origin
```

---

## Sichere Speicherung unter Windows verstehen

Der Credential Manager legt Zugangsdaten nicht im Repository und auch nicht in einer Projektdatei ab. Die sichere Speicherung erfolgt im **Windows-Anmeldeinformationsmanager**.

Du öffnest ihn über die Windows-Suche:

1. Drücke die Windows-Taste.
2. Suche nach `Anmeldeinformationsverwaltung`.
3. Öffne **Anmeldeinformationsverwaltung**.
4. Wähle **Windows-Anmeldeinformationen**.

Dort können Einträge erscheinen, die sich auf GitHub oder andere Git-Dienste beziehen, beispielsweise:

```text
git:https://github.com
```

Die genaue Bezeichnung kann abhängig von GCM-Version, Anmeldeverfahren und Git-Hoster variieren.

### Was du dort tun darfst — und was nicht

| Aktion | Zweck | Empfehlung |
|---|---|---|
| Eintrag ansehen | Gespeicherte Git-Anmeldung prüfen | Unbedenklich |
| Eintrag entfernen | Defekte oder falsche Anmeldung zurücksetzen | Sinnvoll bei Authentifizierungsproblemen |
| Eintrag bearbeiten | Zugangsdaten manuell ersetzen | Nur bei klarer Ursache |
| Token kopieren oder weitergeben | Geheimnis offenlegen | Niemals |
| Zugangsdaten in Dateien speichern | Sicherheitsrisiko | Niemals |

> Entfernst du einen Eintrag, werden keine Repository-Dateien und keine Commits gelöscht. Bei der nächsten geschützten HTTPS-Operation fordert Git lediglich eine neue Anmeldung an.

---

## Die erste Anmeldung bei GitHub durchführen

Die eigentliche Anmeldung erfolgt beim ersten Zugriff auf ein **privates** GitHub-Repository per HTTPS.

Wechsle in ein vorhandenes lokales Repository:

```bash
cd C:\Projekte\mein-projekt
```

Prüfe die Remote-URL:

```bash
git remote -v
```

Eine HTTPS-Verbindung sieht beispielsweise so aus:

```text
origin  https://github.com/beispielkonto/mein-projekt.git (fetch)
origin  https://github.com/beispielkonto/mein-projekt.git (push)
```

Starte dann eine Operation, die Zugriff auf GitHub benötigt:

```bash
git fetch origin
```

Falls noch keine gültige Anmeldung gespeichert ist, passiert in der Regel Folgendes:

1. Git startet den Credential Manager.
2. Ein Browserfenster öffnet sich.
3. Du meldest dich bei GitHub an.
4. GitHub fragt gegebenenfalls nach einer Freigabe für den Git Credential Manager.
5. Nach erfolgreicher Bestätigung kehrst du zur Git Bash zurück.
6. `git fetch` wird ausgeführt.

Bei aktivierter Zwei-Faktor-Authentifizierung bestätigst du die Anmeldung zusätzlich mit deinem zweiten Faktor.

### Alternative: Zugriff mit einem privaten Repository testen

Wenn du noch kein lokales Repository besitzt, kannst du die Verbindung mit einem Repository testen, auf das dein GitHub-Konto Zugriff hat:

```bash
git ls-remote https://github.com/<BENUTZER>/<PRIVATES-REPOSITORY>.git
```

Ersetze die Platzhalter durch deinen GitHub-Benutzernamen und den Namen eines privaten Repositorys.

Bei Erfolg listet Git Referenzen auf, beispielsweise:

```text
a1b2c3d4e5f6...    HEAD
a1b2c3d4e5f6...    refs/heads/main
```

Ein öffentliches Repository ist für diesen Test weniger geeignet, weil es ohne Anmeldung lesbar sein kann.

---

## Browser-Anmeldung und Token unterscheiden

Der Credential Manager kann die Anmeldung oft direkt über den Browser durchführen. Das ist für den Einstieg die komfortabelste und sicherste Methode.

Es gibt jedoch Situationen, in denen Git nach einem Benutzernamen und einem Passwort fragt. Bei GitHub gilt dann:

- Als **Benutzername** verwendest du deinen GitHub-Benutzernamen.
- Als **Passwort** verwendest du einen Personal Access Token.
- Dein normales GitHub-Kontopasswort funktioniert dafür nicht.

Ein Token ist ein geheimes Zugangsmittel. Behandle ihn mindestens so sorgfältig wie ein Passwort.

### Wann ein Token erforderlich sein kann

Ein Personal Access Token kann sinnvoll oder notwendig sein, wenn:

- die Browser-Anmeldung nicht funktioniert,
- du ohne grafische Oberfläche arbeitest,
- ein Unternehmensnetzwerk Browser-Weiterleitungen blockiert,
- ein spezieller Automatisierungszugang eingerichtet wird,
- du einen Git-Hoster verwendest, für den kein vollständiger Browser-Flow verfügbar ist.

Für die alltägliche Arbeit auf einem persönlichen Windows-11-PC sollte die Browser-Anmeldung über GCM normalerweise bevorzugt werden.

---

## Unsichere Credential Helper vermeiden

Git unterstützt mehrere Credential Helper. Nicht alle speichern Geheimnisse gleich sicher.

### Der unsichere `store`-Helper

Dieser Befehl ist für normale Arbeitsumgebungen **nicht geeignet**:

```bash
git config --global credential.helper store
```

Der Helper `store` schreibt Zugangsdaten im Klartext in eine Datei, typischerweise nach:

```text
C:\Users\<Benutzername>\.git-credentials
```

Dort könnten Token im Klartext stehen. Jeder Prozess oder Benutzer mit ausreichendem Dateizugriff könnte sie potenziell auslesen.

Wenn `store` versehentlich konfiguriert wurde, entferne die Einstellung:

```bash
git config --global --unset-all credential.helper
```

Aktiviere danach wieder den Windows Credential Manager:

```bash
git config --global credential.helper manager
```

Falls die Datei `.git-credentials` existiert und sensible Daten enthält, lösche sie erst, nachdem du geprüft hast, dass sie nicht mehr benötigt wird. Widerrufe anschließend den möglicherweise enthaltenen Token auf GitHub.

### Der `cache`-Helper

Der Helper `cache` hält Zugangsdaten nur vorübergehend im Speicher. Er ist unter Linux häufiger anzutreffen, bietet unter Windows aber meist keinen Vorteil gegenüber dem Credential Manager.

```bash
git config --global credential.helper cache
```

Auch diese Einstellung solltest du für diesen Kurs nicht verwenden. Der empfohlene Wert bleibt:

```bash
git config --global credential.helper manager
```

---

## Credential Manager über die Kommandozeile prüfen

Zusätzlich zur Git-Konfiguration kannst du prüfen, ob der Credential Manager grundsätzlich erreichbar ist:

```bash
git credential-manager --version
```

Je nach Git-for-Windows-Version kann die Ausgabe beispielsweise eine Versionsnummer enthalten:

```text
2.x.x
```

Für eine Diagnose stellt GCM in aktuellen Versionen häufig folgenden Befehl bereit:

```bash
git credential-manager diagnose
```

Die Diagnose kann Systeminformationen und Konfigurationsdetails erfassen. Teile die Ausgabe nicht ungeprüft öffentlich, etwa in Issues oder Chat-Nachrichten: Sie kann technische Informationen über deine Umgebung enthalten.

---

## Gespeicherte GitHub-Anmeldung zurücksetzen

Wenn Git wiederholt den falschen Account verwendet, ein Token abgelaufen ist oder eine Anmeldung fehlschlägt, ist ein kontrolliertes Zurücksetzen meist der sauberste Weg.

### Methode 1: Windows-Anmeldeinformationsverwaltung

1. Öffne **Anmeldeinformationsverwaltung** über die Windows-Suche.
2. Wähle **Windows-Anmeldeinformationen**.
3. Suche nach Einträgen für GitHub oder nach Einträgen, die mit `git:` beginnen.
4. Entferne den passenden Eintrag.
5. Führe im Repository erneut `git fetch` oder `git push` aus.
6. Melde dich im Browser mit dem korrekten GitHub-Konto an.

### Methode 2: Zugangsdaten gezielt ablehnen

Du kannst Git auch anweisen, eine bestimmte HTTPS-Anmeldung zu verwerfen:

```bash
printf "protocol=https\nhost=github.com\n\n" | git credential reject
```

In Git Bash funktioniert `printf` direkt. Anschließend fordert Git beim nächsten geschützten Zugriff neue Zugangsdaten an.

> Wenn mehrere GitHub-Konten, Organisationsrichtlinien oder unterschiedliche Hosts beteiligt sind, ist die Windows-Anmeldeinformationsverwaltung oft leichter nachzuvollziehen.

---

## Mehrere GitHub-Konten verwenden

Viele Entwicklerinnen und Entwickler nutzen beispielsweise ein privates GitHub-Konto und ein Organisationskonto. Der Credential Manager kann mehrere Anmeldungen verwalten, aber die Zuordnung muss klar bleiben.

Für HTTPS ist wichtig:

- Git erkennt primär den Host, etwa `github.com`.
- Mehrere Konten auf demselben Host können zu unerwarteten Anmeldungen führen.
- Ein privater Account darf nicht versehentlich für ein Unternehmensrepository verwendet werden.
- Organisationen können zusätzliche Sicherheitsrichtlinien wie SSO verlangen.

Prüfe vor einem Push immer die Zieladresse:

```bash
git remote -v
```

Wenn erforderlich, kannst du für ein Repository eine andere Remote-URL setzen:

```bash
git remote set-url origin https://github.com/<ORGANISATION>/<REPOSITORY>.git
```

Bei regelmäßigem Arbeiten mit mehreren Konten ist SSH häufig übersichtlicher, weil unterschiedliche Schlüssel gezielt verschiedenen Konten zugeordnet werden können. Dieses Thema folgt später im Kurs.

---

## GitHub-Single-Sign-On beachten

Organisationen auf GitHub können Single Sign-On über einen Identitätsanbieter verlangen. In diesem Fall reicht eine allgemeine GitHub-Anmeldung möglicherweise nicht aus.

Typische Hinweise:

- Du kannst dich bei GitHub anmelden, aber ein Organisationsrepository nicht lesen oder pushen.
- GitHub meldet, dass eine SSO-Autorisierung erforderlich ist.
- Ein Token ist vorhanden, aber nicht für die Organisation freigegeben.

Lösung:

1. Öffne GitHub im Browser.
2. Melde dich mit dem richtigen Konto an.
3. Folge der SSO-Aufforderung deiner Organisation.
4. Autorisiere gegebenenfalls den verwendeten Token für die Organisation.
5. Führe `git fetch` oder `git push` erneut aus.

Bei Unternehmenskonten gelten zusätzlich die Sicherheitsvorgaben deiner Organisation. Umgehungen durch private Tokens oder fremde Konten sind keine gute Lösung.

---

## Zusammenspiel mit PhpStorm

PhpStorm kann Git auf zwei Ebenen nutzen:

- **Git-Kommandozeile:** PhpStorm ruft das installierte Git-Programm auf. HTTPS-Vorgänge können dabei den Git Credential Manager verwenden.
- **GitHub-Integration:** PhpStorm kann zusätzlich eine eigene GitHub-Anmeldung verwalten, etwa für Pull Requests, Issues oder Repository-Ansichten.

Das bedeutet:

- Eine erfolgreiche GitHub-Anmeldung in PhpStorm garantiert nicht automatisch, dass Git Bash bereits Zugangsdaten besitzt.
- Eine funktionierende Anmeldung über GCM garantiert nicht automatisch, dass PhpStorm für GitHub-Funktionen angemeldet ist.
- Für `fetch`, `pull` und `push` über HTTPS ist der Credential Manager die zentrale sichere Grundlage.

Prüfe in PhpStorm unter **Datei → Einstellungen → Versionskontrolle → Git**, ob der Pfad zu Git korrekt ist. Verwende dort die Schaltfläche **Test**, um die Git-Installation zu prüfen.

---

## Häufige Probleme und Lösungen

### Git fragt bei jeder Aktion erneut nach Zugangsdaten

Prüfe zuerst den konfigurierten Helper:

```bash
git config --show-origin --get-all credential.helper
```

Falls `manager` fehlt, setze ihn erneut:

```bash
git config --global credential.helper manager
```

Prüfe außerdem, ob du tatsächlich HTTPS verwendest:

```bash
git remote -v
```

Bei einer SSH-URL wie dieser ist der Credential Manager nicht zuständig:

```text
git@github.com:beispielkonto/mein-projekt.git
```

### GitHub lehnt Benutzername und Passwort ab

Verwende nicht dein normales GitHub-Passwort. Starte möglichst erneut den Browser-Flow, indem du die gespeicherten GitHub-Anmeldedaten im Windows-Anmeldeinformationsmanager entfernst.

Falls ein Token verlangt wird, verwende einen gültigen Personal Access Token mit den notwendigen Berechtigungen.

### Der Browser öffnet sich nicht

Mögliche Ursachen sind restriktive Unternehmensrichtlinien, blockierte Browser-Protokolle oder eine beschädigte GCM-Installation.

Prüfe zunächst die Version:

```bash
git credential-manager --version
```

Führe anschließend eine Git-Operation direkt in Git Bash aus:

```bash
git fetch origin
```

Erscheint dort eine konkrete Fehlermeldung, notiere sie vollständig. Aktualisiere bei Bedarf Git for Windows über den offiziellen Installer und achte darauf, dass der Git Credential Manager mitinstalliert bleibt.

### Ein falsches GitHub-Konto wird verwendet

1. Entferne die GitHub-bezogenen Einträge im Windows-Anmeldeinformationsmanager.
2. Kontrolliere die Remote-URL mit `git remote -v`.
3. Führe `git fetch origin` aus.
4. Melde dich im Browser mit dem gewünschten Konto an.

### Push wird trotz erfolgreicher Anmeldung abgelehnt

Eine erfolgreiche Anmeldung bestätigt nur deine Identität. Sie bedeutet nicht automatisch, dass du Schreibrechte besitzt.

Prüfe:

- Ist die Remote-URL korrekt?
- Hast du Schreibrechte für das Repository?
- Pushst du auf einen geschützten Branch?
- Erfordert die Organisation SSO?
- Wurde der Branch auf GitHub inzwischen verändert?

Bei fehlenden Rechten kann eine Meldung wie `Permission denied` oder `Write access not granted` erscheinen. Das ist kein Credential-Manager-Fehler, sondern ein Berechtigungs- oder Workflow-Thema.

---

## Sicherheitsregeln für Zugangsdaten

Behalte diese Regeln als feste Routine bei:

- **Speichere Tokens nie in Quellcodedateien.**
- **Committe niemals Dateien mit Zugangsdaten.**
- **Teile Tokens nicht in Chat-Nachrichten, Screenshots oder Tickets.**
- **Verwende den Credential Manager statt Klartextspeicherung.**
- **Lösche nicht mehr benötigte Tokens auf GitHub.**
- **Aktiviere Zwei-Faktor-Authentifizierung für dein GitHub-Konto.**
- **Widerrufe und ersetze einen Token sofort, wenn er versehentlich veröffentlicht wurde.**

Ein Token, der in einem Commit gelandet ist, gilt als kompromittiert — auch wenn der Commit später gelöscht wird. Die Wiederherstellung und Bereinigung solcher Fälle wird in einem späteren Kapitel ausführlich behandelt.

---

## Abschlussprüfung

Führe diese Prüfungen aus:

```bash
git --version
```

```bash
git config --show-origin --get-all credential.helper
```

```bash
git credential-manager --version
```

Die Credential-Helper-Konfiguration sollte `manager` enthalten.

Prüfe anschließend in einem Repository mit HTTPS-Remote:

```bash
git remote -v
```

```bash
git fetch origin
```

Wenn der Zugriff ohne wiederholte Passwortabfrage gelingt und keine Zugangsdaten im Klartext gespeichert wurden, ist der Credential Manager korrekt eingerichtet. ✅