ubuntuusers.de

Git

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

git_logo.png Git 🇬🇧 ist ein dezentrales Versionsverwaltungssystem. Es wurde 2005 von Linus Torvalds als Ersatz für das damals proprietäre Programm BitKeeper 🇬🇧 geschrieben, da BitKeeper vielen Kernel-Entwicklern durch Lizenzverschärfungen den Zugang zu den Kernelquellen verwehrte. Seit dem Entwicklungsstart hat sich Git äußerst rasant entwickelt.

Git unterscheidet sich von einem traditionellen Programm wie Subversion. Wichtige Eigenschaften sind:

Installation

Folgendes Paket muss installiert [1] werden:

  • git

Befehl zum Installieren der Pakete:

sudo apt-get install git 

Oder mit apturl installieren, Link: apt://git

Optional können zahlreiche Erweiterungen wie z.B. Grafische Oberflächen für Git installiert werden.

PPA

Für die aktuelle Git-Version kann ein "Personal Package Archiv (PPA) [2] genutzt werden.

Adresszeile zum Hinzufügen des PPAs:

  • ppa:git-core/ppa

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams git-core zu entnehmen.

Nach dem Aktualisieren der Paketquellen kann das folgende Paket installiert werden:

  • git (ppa)

Befehl zum Installieren der Pakete:

sudo apt-get install git 

Oder mit apturl installieren, Link: apt://git

Selbst kompilieren

Wenn man die neueste Version von Git verwenden will, kann man Git auch selbst kompilieren.

Befehl zum Installieren der Build-Abhängigkeiten:

sudo apt-get build-dep git 
sudo aptitude build-depends git 

Danach führt man folgende Befehle [3] aus:

git clone git://github.com/git/git
cd git
make
make install 

Dadurch wird Git in ~/bin/ installiert (make install sollte nicht mit Root-Rechten ausgeführt werden). Diese Vorgehensweise wird von Linus Torvalds empfohlen.

Wer git erst kompilieren muss um ein lauffähiges git zu bekommen, kann das Problem durch wget umgehen:

wget https://github.com/git/git/archive/master.zip
unzip master.zip
cd git-master
make
make install 

Anwendung

Hilfe zu allen Git Kommandos

Wenn man einmal nicht weiter weiß kann man für jedes Git Kommando eine Hilfe mit allen verfügbaren Optionen anzeigen lassen.

git <BEFEHL> -h 

Ein Beispiel:

git add -h 

Index oder Staging Area?

Die Staging Area ist ein Sammelbereich für alle Änderungen, bevor sie mit einem Commit in Git übernommen werden. Früher wurde hierfür der Begriff Index verwendet. Dieser Begriff taucht jedoch noch überall in der Git-Dokumentation oder in der Git-Hilfe auf.

Ein Beispiel:

git rm -h 

Selbst in der aktuellen Version von Git, in diesem Fall 2.46.0 (Stand September 2024), taucht noch der alte Begriff "Index" auf. Beide Begriffe, "Index" und "Staging Area", sind jedoch identisch.

Quellcode herunterladen

Will man nur den Quellcode eines Projekts aus dem Git-Repositorium herunterladen, verwendet man den Befehl:

git clone git://ADRESSE  

Um beispielsweise den aktuellen Quellcode des Linux-Kernels in das Verzeichnis linux herunterzuladen, braucht man diesen Befehl:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux 

Falls eine Firewall aktiv ist und der Zugriff über den Port 9418 gesperrt ist, kann man versuchen, über den fast immer offenen Port 443 und somit über das HTTP(S)-Protokoll auf selbiges zuzugreifen. Der entsprechende Befehl sieht folgendermaßen aus:

git clone https://ADRESSE  

Entwicklung mit Git

Einrichtung

Vor Arbeitsbeginn sollte man den eigenen Namen und eine E-Mail-Adresse eintragen:

git config --global user.name NAME
git config --global user.email EMAIL@ADRESSE.de 

Diese Daten erscheinen in der Beschreibung einer Veränderung und dienen der Identifizierung des Autors einer Revision, falls mehrere Entwickler an einem Projekt arbeiten. Enthalten die config-Werte Leerzeichen (z.B. Vorname und Nachname), so müssen sie in Anführungszeichen gesetzt werden, z.B.:

git config --global user.name "VORNAME NACHNAME" 

Überprüfen kann man die Parameter ohne Angabe des Wertes, z.B.:

git config --global user.name 

Um die Lesbarkeit zu erhöhen, sollte man die Ausgaben mit den folgenden Befehlen einfärben:

git config --global color.ui "auto" 

Für Computer mit mehreren Prozessorkernen empfiehlt sich diese Option:

git config --global pack.threads "0" 

Wenn innerhalb eines Repository abwechselnd auf Linux/Mac oder Windows gearbeitet wird empfiehlt es sich, folgende Konfigurationen hinzuzufügen, um Zeilenenden zuverlässig zu handhaben.

Für Linux/Mac

git config --global core.autocrlf input 

Für Windows

git config --global core.autocrlf true 

Wenn ein anderer Editor (Voreinstellung ist Nano), z.B. für mehrzeilige Commits, verwendet werden soll, nutzt man folgende Konfiguration:

Für VSCode

git config --global core.editor "code --wait" 

Für nvim

git config --global core.editor nvim 

Folgender Befehl öffnet den eingestellten Editor mit der Standard-Konfigurationsdatei:

git config --global -e 

Weiterhin empfiehlt es sich, als Standard-Branch main anstatt master zu verwenden (siehe: Empfehlung von GitHub). Um sicherzustellen, dass in neuen Repositories main verwendet wird sollte man folgende Konfiguration hinzufügen:

git config --global init.defaultBranch main 

Grundlagen

Zuerst erstellt man einen Ordner für das Projekt und wechselt in diesen Ordner. Dort führt man nun den Befehl

git init 

aus. Der Befehl erstellt das Git-Repositorium mit den nötigen Angaben. Nun erstellt man den Quellcode des Programms und fügt die Datei(en) mit dem Befehl

git add DATEI 

zum Git-Repository hinzu. Hat man nun wieder etwas am Quellcode verändert, erstellt man mit

git commit -m "ÄNDERUNGSBESCHREIBUNG" 

eine Revision.

Stellt man nach einem Commit fest, dass eine Datei vergessen wurde, kann diese mit den folgenden beiden Befehlen dem vorangegangenen Commit noch hinzugefügt werden:

git add VERGESSENE_DATEI
git commit --amend 

Wobei dieses Vorgehen nicht zu empfehlen ist, wenn das Repository bereits veröffentlicht wurde (siehe folgender Absatz zum Befehl push).

Will man den Quellcode nun auf einen Server laden, führt man diesen Befehl aus:

git push ADRESSE BRANCHNAME 

Hat nun ein anderer Entwickler den Quellcode verändert, kann man die lokale Version mit dem Befehl

git pull 

aktualisieren.

Wenn man nun etwas am Quellcode verändert oder einen Patch eingespielt hat, dies aber rückgängig machen möchte, benutzt man

git restore --staged <Datei> 

um einzelne Dateien aus der Staging Area zu entfernen oder

git restore --staged . 

um alle Dateien aus der Staging Area zu entfernen, bevor man einen Commit durchführt.

Alternativ

git reset --hard 

Dieser Befehl setzen alle unbestätigten lokalen Veränderungen zurück. Mit dem nächsten Befehl kann man auflisten, welche Dateien sich gerade in der Staging Area befinden:

git ls-files 

Möchte man eine Datei aus dem Repository löschen, die man im lokalen Verzeichnis gelöscht hat, verwendet man ebenfalls git add

git add <DATEI> 

Dadurch erkennt Git, dass die Datei im lokalen Verzeichnis nicht mehr vorhanden ist und entfernt sie aus der Staging Area. Mit dem nächsten git commit ist die Datei in der nächsten Revision gelöscht.

Der Befehl git rm löscht die angegebene Datei sowohl aus der Staging Area als auch auf dem Dateisystem! Man kann mehrere Dateien gleichzeitig oder Patterns angeben.

git rm <DATEI>
git rm <DATEI1> <DATEI2> <DATEI3>
git rm *.txt 

Auslassen mit .gitignore

Der Befehl git add . fügt alle Dateien innerhalb des von Git verwalteten Verzeichnisses zur Staging Area hinzu. Hier kann man viel falsch machen und ein Repository mit unnötigen Dateien aufblähen, oder versehentlich Passwörter oder SSH-Keys veröffentlichen. Möchte man bestimmte Dateien oder ganze Verzeichnisse davon ausschließen, muss man die Datei .gitignore anlegen. Das ist zum Beispiel dann sinnvoll, wenn eine IDE ein Verzeichnis anlegt, welches mit dem eigentlichen Projekt nichts zu tun hat, wenn ein Compiler temporäre Dateien oder kompilierte Binaries in einem Verzeichnis ablegt oder wenn man wichtige Informationen wie Passwörter in einer Datei ablegt, die nicht öffentlich verfügbar sein dürfen.

Ein Beispiel, das für jedes Projekt angepasst werden kann:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# generic files to ignore
# backup files (*~) and vim swap file (.swp), MacOS dir file (.DS_Store)
*~
*.lock
*.DS_Store
.*.swp
*.out

# IDE files to ignore (Netbeans, Eclipse)
nbproject/private/
.classpath
.project
.settings

# ignore generated .class files
*.class

# except this file
!.gitignore

Weitere Beispiele für viele Sprachen findet man auf GitHub. Weiterführende Artikel findet ihr dort in der README-Datei.

Branches

Hat man mehrere Entwicklungszweige zu pflegen (bspw. stable und testing), kann man sich der Branches bedienen. Um bestehende Branches anzuzeigen, gibt man diesen Befehl ein:

git branch 

Zum Anzeigen von remote Branches gibt man ein:

git branch -r 

Um nun einen neuen Branch zu erstellen, muss nur der folgende Befehl eingegeben werden:

git branch BRANCHNAME 

Um in eine anderen Branch zu wechseln, verwendet man diesen Befehl:

git checkout BRANCHNAME 

Das Löschen von local und remote Branches geschieht folgendermaßen:

local:

git branch -d THE_LOCAL_BRANCH 

remote:

git push origin :THE_REMOTE_BRANCH 

Patch erstellen

Ein git-Commit kann recht einfach, z.B. mit

git format-patch cfe0a421d7d334499fb5de4ab2c4e2178a4630f3 --stdout > PATCHDATEI.patch 

in einen Patch (namens PATCHDATEI.patch) verwandelt werden. Der Commit-Hash (z.B. cfe0a421d7d334499fb5de4ab2c4e2178a4630f3) ist entsprechend anzupassen. Mit folgendem Befehl kann der Patch dann angewandt werden:

patch -p1 < PATCHDATEI.patch 

Grafische Oberflächen

Es gibt eine Reihe von grafischen Oberflächen für Git. Diese sind im Übersichtsartikel Grafische Oberflächen für Git aufgeführt.

Problembehebung

Git und Subversion

Sollte man gezwungen sein, mit einem Subversion-Server zu arbeiten, kann man zur lokalen Verwaltung trotzdem Git einsetzen. Man muss nur das entsprechende Paket installieren:

  • git-svn

Befehl zum Installieren der Pakete:

sudo apt-get install git-svn 

Oder mit apturl installieren, Link: apt://git-svn

Intern

Extern

Diese Revision wurde am 1. September 2024 21:52 von karzer erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, Versionsverwaltung