Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Versionskontrolle: git

Das Konzept

git ist ein schnelles, skalierbares, verteiltes Revisions- (Versions-) Kontrollsystem, das ursprünglich von Linus Torvalds entwickelt wurde (lesen Sie mehr über den git kernel]. git ermöglicht die Koordination der Arbeit zwischen Mitarbeitern über die Programmierung hinaus in beliebigen Dateien. Die Unterstützung von nichtlinearen Workflows, Geschwindigkeit und Datenintegrität macht git zu einem unverzichtbaren Werkzeug in vielen Branchen und in der Forschung. Bevor Sie mit dem Lesen dieses git Tutorials beginnen, werfen Sie einen Blick auf die schematische Funktionsweise von Repositories, die mit git gehostet werden.

git-scheme

Das Konzept von Git und Grundvokabular. Der REMOTE-Rahmen ist online (dh der Computer einer anderen Person) und der LOCAL-Rahmen ist das, was auf einem Personal Computer passiert, der mit dem Internet verbunden ist. Repositories können aus der Ferne neu erstellt oder gegabelt werden. Remote-Repositories können lokal geklont, lokal geändert und lokale Änderungen in ein Remote-Repository verschoben werden. Mitarbeiter möchten sicherstellen, dass regelmäßig Änderungen an einem entfernten Repository vorgenommen werden. Die Arbeit mit und an verschiedenen Zweigen wird mit der Anzahl der Entwickler immer wichtiger (siehe den Abschnitt über Zusammenarbeit und Zweige unten) und im Moment müssen wir uns nur daran erinnern, dass wir im Hauptzweig arbeiten (dh Upstream Origin / HEAD = Main).

Installieren git

Die mit diesem eBook bereitgestellten Materialien werden am besten mit git-fähigen Umgebungen heruntergeladen und aktualisiert (Vermeiden Sie das Herunterladen von Materialien als zip-Datei).

Linux
Windows
macOS

Obwohl Git ein integrales Merkmal der meisten Linux-Distributionen ist, müssen Debian-Benutzer es möglicherweise noch installieren. Zu diesem Zweck öffnen Terminal und tippen:

sudo apt install git

Die Repositories für diesen Kurs werden hauptsächlich auf GitHub gehostet. Es gibt viele andere *git * Dienstleister da draußen, wie GitLab, plan.io, oder BitBucket].

Erstellen Sie ein Repository

Um ein git-Repository zu erstellen, stellen Sie sicher, dass Sie Zugriff auf einen git-Anbieter haben. Der beliebteste Weg, um Zugang zu einem git-fähigen Server zu erhalten, ist die Registrierung bei einem auf der langen Liste der beliebten git-Anbieter.

Clone (Download) ein Repository

GitHub bietet detaillierte Beschreibungen und Standardprozeduren für die Arbeit mit ihren Repositories (lesen Sie mehr]. Der folgende “Rezept” führt durch den erstmaligen Download von git Materialien:

  1. Öffnen Sie Ihre favorisierte git-fähige Kommandozeile:

    • Windows Optionen: PowerShell, Git Bash oder Command Prompt

    • Linux: Terminal

  2. Clone the course repository (change materials according to the course attended):
    git clone https://github.com/hydro-informatics/materials (or whatever repository you want to clone)

Geschehen.

Pull (Update/Re-Download) ein lokales Repository

git (innerhalb von Git Bash, PyCharm oder Terminal) ist die einzige Option, um lokale Kopien eines Remote-Repositorys konsistent zu aktualisieren. Öffnen Sie dazu eine der oben genannten git-fähigen Befehlszeilen und führen Sie Folgendes aus:

  1. Go to the local directory of the repository with the cd command (e.g., materials):
    cd "D:/Python/materials/" (or wherever materials was cloned).

  2. git status - shows the modifications made.

  3. Merge conflicts may occur when changes were made in the local copy. To keep the local history linear, type:
    git pull --rebase - if locally edited files were modified remotely since the last pull, git will highlight problematic (conflicting) sections with <<<<<<<, =======, and >>>>>>> markers. Manually open the concerned files, resolve the conflicts, and delete the invalid conflict markers. Then mark the files as resolved with git add FILENAME and finalize with git rebase --continue.

Geschehen.

Aktualisieren eines Remote-Repositorys (Push Local Changes)

Nachdem Sie Dateien in einem Repository lokal bearbeitet haben, add - commit - push (in dieser Reihenfolge) Ihre Bearbeitungen in die Remotekopie des Repository mit Versionskontrolle. Um lokale Änderungen an einem Remote-Repository hinzuzufügen * - * zu übertragen * - * zu drücken *, stellen Sie sicher, dass Sie der Eigentümer des Remote-Repositorys oder ein Mitwirkender sind. Öffnen Sie dann ein git-fähiges Terminal und geben Sie ein:

  1. git status - this shows the modifications made.

  2. If the status only lists consciously made changes, type git add .
    Alternatively, if only single files were changed, use git add filename.py instead. Best practice: exclude files that should never be tracked (e.g., temporary or large binary files) with a local .gitignore file.

  3. Commit the changes with git commit -m "Leave a message" - leave a significant and precise short message (e.g., "fix typos in flow calculator").

  4. git pull --rebase - Wenn lokal bearbeitete Dateien seit dem letzten Zug aus der Ferne geändert wurden, hebt git problematische (widersprüchliche) Abschnitte mit <<<<<<<, ======= und >>>>>>>markern hervor. Manuelles Öffnen der betroffenen Dateien, lösen Sie die Konflikte, löschen Sie die ungültigen Konfliktmarker und führen Sie dann git add FILENAME und git rebase --continue aus.

  5. git push

Wenn ein Fehler auftritt, lesen Sie sorgfältig, warum der Fehler aufgetreten ist, und befolgen Sie die Anweisungen zur Fehlerbehebung (z. B. zum Einrichten Ihrer Benutzerkonfiguration mit git config --global user.email “email@example.com”]. Sie können Warnmeldungen bezüglich Zeilenendformaten (WARNUNG ... LF-Endungen ...) für die meisten in diesem eBook vorgestellten Anwendungen ignorieren.

Zusammenarbeit & Branchen

As soon as more than one person works on a repository (or one person works on more than one feature), committing everything directly to the main branch becomes error-prone. Best practice is to keep main always in a working state and to develop new features, fixes, or experiments on dedicated branches. A branch is an independent line of development that starts as a copy of another branch (typically main) and can later be merged back.

Erstellen Sie einen Branch

Um einen neuen Branch zu erstellen und zu diesem zu wechseln, öffnen Sie ein git-fähiges Terminal im lokalen Repository und geben Sie Folgendes ein:

  1. git switch main - stellen Sie sicher, dass Sie vom main-Zweig aus starten (ältere git-Versionen erfordern git checkout main).

  2. git pull - Aktualisieren Sie den lokalen main Branch, um zu vermeiden, dass ein veralteter Zustand abgezweigt wird.

  3. git switch -c fix-hydraulics-chapter - erstellen und direkt zu einem neuen Branch wechseln (hier fix-hydraulics-chapter; ältere git Versionen erfordern git checkout -b fix-hydraulics-chapter). Verwenden Sie kurze, beschreibende Zweignamen wie fix-typos-git-chapter oder feature-sediment-transport.

git branch lists all local branches and marks the currently active branch with a *. Switch between existing branches with git switch BRANCH-NAME.

Ändern (arbeiten an) einem Branch

Die Arbeit an einem Branch ist genau derselbe add - commit - push Workflow wie im Aktualisieren eines Remote-Repositorys (Push Local Changes)-Abschnitt beschrieben, mit einem Unterschied: Der erste Push muss dem entfernten Repository den neuen Branch mitteilen. Somit:

  1. Bearbeiten Sie Dateien, dann git status und git add . (oder git add filename.py).

  2. git commit -m "Leave a message" - Begehen Sie kleine, kohärente Arbeitseinheiten anstelle eines riesigen Begehens am Ende.

  3. git push -u origin fix-hydraulics-chapter - das -u (Upstream)-Flag verbindet den lokalen Zweig mit dem entfernten Zweig, so dass alle späteren Updates nur ein einfaches git push erfordern.

Um einen langlebigen Branch mit den laufenden Entwicklungen in main auf dem Laufenden zu halten, geben Sie regelmäßig ein (mit aktivem Feature Branch):

git fetch origin
git merge origin/main

Resolve possible conflicts as described in the Pull (Update/Re-Download) ein lokales Repository section (here, conclude with git commit rather than git rebase --continue).

Kommentar und Review (Pull Requests)

Die direkte Zusammenführung einer eigenen Niederlassung ohne Review funktioniert für Solo-Projekte, aber in einem Team besteht Best Practice darin, eine *Pull-Anfrage zu öffnen (genannt * Merge Request auf GitLab). Eine Pull Request ist ein Vorschlag, einen Branch in einen anderen zu verschmelzen und stellt den zentralen Ort für den Kommentar zum Code dar:

  1. Drücken Sie den Branch zum Remote-Repository (siehe oben).

  2. Auf GitHub schlägt die Repository-Seite Compare & Pull Request für kürzlich geschobene Branchs vor. Alternativ gehen Sie auf die Registerkarte Pull Requests und klicken Sie auf New Pull Request, dann wählen Sie main als base und den Feature Branch (z.B. fix-hydraulics-chapter) als vergleichen.

  3. Geben Sie der Pull-Anfrage einen genauen Titel und beschreiben Sie **was ** geändert wurde und **warum **. Fordern Sie eine Bewertung von einem oder mehreren Mitarbeitern an (rechtes Menü auf GitHub).

  4. Rezensenten können die Pull-Anfrage als Ganzes (Konversation-Tab) oder einzelne Codezeilen kommentieren (Akten geändert-Tab, bewegen sich über eine Zeile und klicken auf das +-Symbol). Zeilenkommentare können auch zu einer formellen Überprüfung mit den Urteilen *Kommentar *, *Genehmigen * oder *Anforderungsänderungen * zusammengefasst werden.

  5. Um Review-Kommentare zu bearbeiten, müssen Sie einfach neue Änderungen an demselben Branch vornehmen und verschieben. Die Pull-Anfrage wird automatisch aktualisiert, und gelöste Diskussionen können als solche mit dem Resolve conversation-Button markiert werden.

Zusammenführung eines Entwicklungszweigs in Main

Sobald die Pull-Anfrage genehmigt wurde (und automatisierte Überprüfungen bestehen, falls konfiguriert), wenden Sie die neuen Entwicklungen auf main an, indem Sie auf die Schaltfläche Merge Pull Request auf GitHub klicken. Darüber hinaus bietet GitHub Squash und Merge an (kombiniert alle Branch-Commits zu einem einzigen Commit, der die Historie von main ordentlich hält) und Rebase und Merge. Nach dem Zusammenführen löschen Sie den Branch aus der Ferne (GitHub schlägt eine Abzweig-Taste vor) und lokal:

git switch main
git pull
git branch -d fix-hydraulics-chapter

Ohne eine git Provider-Schnittstelle (z.B. für ein rein lokales Repository) kann ein Branch auch manuell zusammengeführt werden:

  1. git switch main - Wechsel zum Zielzweig.

  2. git pull - stellen Sie sicher, dass die lokale main-Niederlassung auf dem neuesten Stand ist (überspringen Sie für rein lokale Repositorys).

  3. git merge fix-hydraulics-chapter - Fügen Sie den Entwicklungszweig zu main zusammen. Lösen Sie mögliche Konflikte (siehe Pull (Update/Re-Download) ein lokales Repository), dann git add die gelösten Dateien und git commit.

  4. git push - veröffentlichen Sie den aktualisierten main Zweig.

  5. git branch -d fix-hydraulics-chapter - delete the merged branch (git refuses to -d-delete branches with unmerged changes, which is a useful safety net).

Geschehen.