14981
Kommentar:
|
19170
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 8: | Zeile 8: |
Hubert Högl, 2012, 2015, 2018, 2019, 2020 <Hubert.Hoegl@hs-augsburg.de> URL: http://hhoegl.informatik.hs-augsburg.de/hhwiki/GitSpicker |
Hubert Högl, 2012, 2015, 2018, 2019, 2020, 2021, 2023 <Hubert.Hoegl@hs-augsburg.de> URL: https://hhoegl.informatik.hs-augsburg.de/hhwiki/GitSpicker |
Zeile 19: | Zeile 19: |
Die Gitlab Installation im Fachbereich Informatik der Hochschule Augsburg erreicht man unter https://gitlab.informatik.hs-augsburg.de. Siehe den Abschnitt `Gitlab`_. |
|
Zeile 75: | Zeile 78: |
Zeile 92: | Zeile 94: |
Repository initialisieren ------------------------- Projektverzeichnis anlegen, z.B. mit ``mkdir ~/Projekt``. Danach Dateien anlegen und das Repository initialisieren mit :: $ git init $ git add <file> # oder $ git add . Nun gibt es in ``~/Projekt`` ein Unterverzeichnis ``.git``, darin werden alle für das Repository wichtigen Dateien gespeichert. Wichtig ist die Konfigurationsdatei ``.git/config``. Dateien ignorieren durch Anlegen der Datei ``.gitignore`` (siehe ``git help gitignore``). **Achtung:** In `Gitlab <https://gitlab.informatik.hs-augsburg.de>`_ legt man ein Repository auf der Web-Oberfläche von Gitlab an. Nach dem Anlegen klont man das Repository lokal auf der Festplatte und fügt Dateien mit ``git add ...`` hinzu, commited diese mit ``git commit ...`` und schreibt diese mit ``git push ...`` auf den Server. Der Schritt ``git init`` darf also nicht gemacht werden! Clone ----- :: $ git clone <url> $ git clone -l <path> # path on local machine (-l, --local) |
|
Zeile 127: | Zeile 158: |
Initialisieren -------------- :: $ git init $ git add <file> $ git add . Dateien ignorieren durch ``.gitignore`` (siehe ``git help gitignore``) |
|
Zeile 152: | Zeile 171: |
:: $ git commit -a # stage all changed files (-a) $ git commit -a -s # sign-off commit message (-s, --signoff) $ git commit -a -s -m <msg> # commit message <msg> |
Änderungen im Arbeitsverzeichnis müssen zunächst mit ``git add ...`` hinzugefügt werden (auch wenn eine Datei bereits existiert) und dann mit ``git commit ...`` in das lokale Repository aufgenommen werden. Bei existierenden Dateien lässt man fasst immer das separate ``git add ..`` weg und ruft statt dessen ``git commit -a ...`` auf. Die ``-a`` Option nimmt alle Dateien mit Änderungen auf. Mit der ``-m`` Option wird die Commit-Meldung angegeben. Ohne die ``-m`` Option wird ein Editor aufgerufen, in dem man die Commit-Meldung eingeben kann. Neu angelegt Dateien muss man immer zunächst mit ``git add ...`` aufnehmen. :: $ git commit -a # stage all changed files (-a) $ git commit -s -a # sign-off commit message (-s, --signoff) $ git commit -am <commit_msg> # commit message <msg> $ git add <neue_datei> $ git commit -am <commit_message> Der verwendete Editor für die Commit-Meldung wird in der folgenden Reihenfolge festgestellt: 1. GIT_EDITOR Umgebungsvariable 2. core.editor Konfigurationsvariable (``git config --global core.editor "..."``) 3. VISUAL Umgebungsvariable 4. EDITOR Umgebungsvariable |
Zeile 166: | Zeile 202: |
Hier ist ein Beispiel für die Ausgabe. Die lange Folge von Hex-Ziffern ist der "Hash". :: commit 15e423b0d895812deb64fcff22be2d4bf1788dba (HEAD -> master, origin/master, origin/HEAD) Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de> Date: Fri Oct 23 18:32:52 2020 +0200 updated _tmux.conf commit 4d9f95acea7fbf5ca571964593363c5256d021ed Author: Hubert Hoegl <hhoegl@gorilla.informatik.hs-augsburg.de> Date: Fri Oct 23 17:07:42 2020 +0200 extended buttons=... help commit 33e35b22d188b77819b65f21e80730639e3d11f3 Date: Thu Oct 22 20:57:58 2020 +0200 Moved doc to separate repo estool-doc ... |
|
Zeile 213: | Zeile 270: |
Diff ---- :: $ git diff $ git diff --cached $ git diff HEAD $ git diff HEAD^ $ git diff HEAD^^^ $ git diff a494fcd0 |
|
Zeile 218: | Zeile 286: |
In folgendem Beispiel wird dem Commit 1931ec4 (abgekürzter SHA-1) die | In folgendem Beispiel wird dem Commit 1931ec4 (abgekürzter SHA-1 Hashwert) die |
Zeile 231: | Zeile 299: |
Branches auflisten :: $ git branch -a # lokale als auch "remote-tracking" branches ausgeben Branch erzeugen |
|
Zeile 243: | Zeile 319: |
Zeile 267: | Zeile 345: |
Konflikte --------- Unterscheide folgende Fälle 1. Merge beginnt erst gar nicht Hier ist das beste Rezept, das Kommando ``git stash ...`` zu verwenden. 2. Merge beginnt, bricht dann aber mittendrin ab Hier sollte man nicht ``stash``, sondern ``git reset ...`` verwenden. Relevante Kommandos: :: $ git log --merge $ git reset $ git reset --mixed $ git merge --abort $ git commit -am "commit message" $ git reset --hard <hash> # roll back to specified commit hash $ git reset --hard HEAD # roll back to HEAD $ git stash [list | apply | pop | drop] |
|
Zeile 277: | Zeile 382: |
Clone ----- :: $ git clone <url> $ git clone -l <path> # path on local machine (-l, --local) |
|
Zeile 382: | Zeile 479: |
Zeile 388: | Zeile 490: |
Siehe z.B. den Artikel "How to use Tig to browse Git logs" https://opensource.com/article/19/6/what-tig * lazygit - https://github.com/jesseduffield/lazygit Siehe z.B. den Artikel "Make advanced Git tasks simple with Lazygit" https://opensource.com/article/20/3/lazygit |
|
Zeile 405: | Zeile 512: |
* qgit https://github.com/tibirna/qgit | |
Zeile 427: | Zeile 534: |
Git im WWW (gitlab) ------------------- * Gitlab https://gitlab.com (freie Software in der Community Edition CE) * Gitlab CE, im RZ gehostet: https://r-n-d.informatik.hs-augsburg.de * Github https://github.com (nicht frei) |
.. _Gitlab: Gitlab ------- Die Gitlab Instanz der Fakultät für Informatik findet man unter https://gitlab.informatik.hs-augsburg.de. Es ist eine freie "Community Editition" (CE). **Der Zugang funktioniert nur über eine VPN Verbindung von ausserhalb der Hochschule!** **Es ist ein einmaliger Login mit Hochschul-Zugangsdaten notwendig, damit man als User angelegt wird!** |
Zeile 441: | Zeile 549: |
1. git clone ssh://git@r-n-d.informatik.hs-augsburg.de:2222/hubert.hoegl/estool.git 2. git clone https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/estool.git Bei der ersten Kommandozeile (ssh) erfolgt die Ausführung sofort, falls der öffentlichen ssh Schlüssel in gitlab eingetragen wurde. Bei der zweiten Kommandozeile (https) muss der Anwender immer den Login und das Passwort angeben, was auf die Dauer sehr umständlich ist. |
1. git clone ssh://git@gitlab.informatik.hs-augsburg.de:2222/hhoegl/estool.git 2. git clone https://gitlab.informatik.hs-augsburg.de/hhoegl/estool.git Bei der ersten Kommandozeile (ssh) erfolgt die Ausführung sofort, falls man seinen öffentlichen ssh Schlüssel in gitlab eingetragen wurde. Bei der zweiten Kommandozeile (https) muss der Anwender immer den RZ-Login und das Passwort angeben, was auf die Dauer sehr umständlich ist. |
Zeile 452: | Zeile 560: |
enthält das Verzeichnis ``.ssh/``. Darin befindet sich mein öffentlicher ssh Schlüssel ``id_rsa.pub``. | enthält das Verzeichnis ``~/.ssh/``. Darin befindet sich mein öffentlicher ssh Schlüssel ``id_rsa.pub``. |
Zeile 460: | Zeile 568: |
das Textfeld kopieren, das man beim Eintrag "SSH Keys" auf gitlab findet. Es gibt zwei Hilfetexte auf gitlab, für den Fall dass der Schlüssel schon existiert und für den Fall dass der Schlüssel noch angelegt werden muss: Schlüssel existiert schon: https://r-n-d.informatik.hs-augsburg.de:8080/help/ssh/README#review-existing-ssh-keys Schlüssel existiert noch nicht: https://r-n-d.informatik.hs-augsburg.de:8080/help/ssh/README#generating-a-new-ssh-key-pair Wenn man von unterschiedlichen Rechner arbeitet, dann sollte man den öffentlichen |
das Textfeld kopieren, das man beim Eintrag "SSH Keys" auf gitlab findet. Das kann man genauer in dem Hilfetext auf Gitlab nachlesen: https://gitlab.informatik.hs-augsburg.de/help/user/ssh.md. Wenn man von unterschiedlichen Rechnern arbeitet, dann sollte man den öffentlichen |
Zeile 469: | Zeile 573: |
Die Gitlab Version findet man durch Aufrufen des folgenden Links heraus: https://gitlab.informatik.hs-augsburg.de/help |
|
Zeile 480: | Zeile 588: |
frei lesbar unter http://git-scm.com/book/en/v2 (Englisch), http://git-scm.com/book/de/v2 (Deutsch) |
frei lesbar unter http://git-scm.com/book/en/v2 (Englisch), http://git-scm.com/book/de/v2 (Deutsch) |
Zeile 507: | Zeile 614: |
#. René Preißel, Bjørn Stachmann, Git, 5. Auflage, dpunkt Verlag 2019, https://learning.oreilly.com/library/view/git-5th-edition/9781098123154/ #. Git Tutorial von Atlassian, "Getting Git Right" https://www.atlassian.com/git darin ein Vergleich von Workflows https://www.atlassian.com/git/tutorials/comparing-workflows #. Offizielle Dokumentation von Gitlab Community Edition https://docs.gitlab.com/ce/ #. Joost Evertse, Mastering Gitlab 12, Packt 2019. https://learning.oreilly.com/library/view/mastering-gitlab-12/9781789531282/ #. Adam O'Grady, GitLab Quick Start Guide, Packt 2018 https://learning.oreilly.com/library/view/gitlab-quick-start/9781789534344/ |
|
Zeile 511: | Zeile 639: |
#. Git Tutorial von Atlassian https://www.atlassian.com/git darin ein Vergleich von Workflows https://www.atlassian.com/git/tutorials/comparing-workflows #. Joost Evertse, Mastering Gitlab 12, Packt 2019. https://learning.oreilly.com/library/view/mastering-gitlab-12/9781789531282/ #. Adam O'Grady, GitLab Quick Start Guide, Packt 2018 https://learning.oreilly.com/library/view/gitlab-quick-start/9781789534344/ |
#. Phil's Git Cheatsheet https://www.philipdaniels.com/gitcheatsheet/ |
Git Spicker
Hubert Högl, 2012, 2015, 2018, 2019, 2020, 2021, 2023 <Hubert.Hoegl@hs-augsburg.de>
URL: https://hhoegl.informatik.hs-augsburg.de/hhwiki/GitSpicker
Dieser Text ist ein Überblick zu den wichtigsten Git Kommandos. Er verwendet hauptsächlich Kommandos auf Linux Shell. Windows Anwender sollten "Git for Windows" installieren (https://gitforwindows.org), darin ist die Linux-ähnliche Kommandozeile "gitbash" enthalten. Am Schluss werden auch grafische Werkzeuge für verschiedene Betriebssysteme erwähnt als auch der Web-Dienst Gitlab.
Ich habe git in der Version 2.25.1 verwendet. Das Kommando git --version gibt die Version aus.
Die Homepage von git ist https://git-scm.com.
Die Gitlab Installation im Fachbereich Informatik der Hochschule Augsburg erreicht man unter https://gitlab.informatik.hs-augsburg.de. Siehe den Abschnitt Gitlab.
Im Linux Paketmanager gibt es mehrere Pakete: git, git-doc, git-man sind die wichtigsten.
Inhalt
1 Hilfe
Wenn man auf der Kommandozeile git eingibt, dann bekommt man u.a. eine gruppierte Übersicht zu den verfügbaren Subkommandos:
start a working area (see also: git help tutorial) clone Clone a repository into a new directory init Create an empty Git repository or reinitialize an existing one work on the current change (see also: git help everyday) add Add file contents to the index mv Move or rename a file, a directory, or a symlink reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index examine the history and state (see also: git help revisions) bisect Use binary search to find the commit that introduced a bug grep Print lines matching a pattern log Show commit logs show Show various types of objects status Show the working tree status grow, mark and tweak your common history branch List, create, or delete branches checkout Switch branches or restore working tree files commit Record changes to the repository diff Show changes between commits, commit and working tree, etc merge Join two or more development histories together rebase Reapply commits on top of another base tip tag Create, list, delete or verify a tag object signed with GPG collaborate (see also: git help workflows) fetch Download objects and refs from another repository pull Fetch from and integrate with another repository or a local branch push Update remote refs along with associated objects
Zu allen Git Subkommandos gibt es Manual-Seiten. Diese bekommt man immer durch folgende Eingaben
$ git <subcommand> --help $ git help <subcommand>
Mit git help -a bekommt man eine Liste aller Subkommandos.
Mit git help -g bekommt man einen Liste der Git Guides, auch Concept Guides genannt:
attributes Defining attributes per path everyday Everyday Git With 20 Commands Or So glossary A Git glossary ignore Specifies intentionally untracked files to ignore modules Defining submodule properties revisions Specifying revisions and ranges for Git tutorial A tutorial introduction to Git (for version 1.5.1 or newer) workflows An overview of recommended workflows with Git
Einen Guide betrachtet man mit git help <concept>.
2 Repository initialisieren
Projektverzeichnis anlegen, z.B. mit mkdir ~/Projekt. Danach Dateien anlegen und das Repository initialisieren mit
$ git init $ git add <file> # oder $ git add .
Nun gibt es in ~/Projekt ein Unterverzeichnis .git, darin werden alle für das Repository wichtigen Dateien gespeichert. Wichtig ist die Konfigurationsdatei .git/config.
Dateien ignorieren durch Anlegen der Datei .gitignore (siehe git help gitignore).
Achtung: In Gitlab legt man ein Repository auf der Web-Oberfläche von Gitlab an. Nach dem Anlegen klont man das Repository lokal auf der Festplatte und fügt Dateien mit git add ... hinzu, commited diese mit git commit ... und schreibt diese mit git push ... auf den Server. Der Schritt git init darf also nicht gemacht werden!
3 Clone
$ git clone <url> $ git clone -l <path> # path on local machine (-l, --local)
4 Konfigurieren
$ git config -l # show configuration variables defined in .git/config user.email=Hubert.Hoegl@hs-augsburg.de user.name=Hubert Hoegl push.default=simple core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.srv.url=ssh://hhoegl.informatik.hs-augsburg.de:2222/data/tgit/00repos/oss remote.srv.fetch=+refs/heads/master:refs/remotes/srv/master branch.master.remote=srv branch.master.merge=refs/heads/master # set some variables $ git config --global user.name <your name> $ git config --global user.email <your e-mail> $ git config --global core.editor <your preferred editor, eg. vi> $ git config --global sendemail.smtpserver <your smtp server> $ git config --global sendemail.smtpserverport <your smtp server port> $ git config --global sendemail.smtpuser <your user name> $ git config --global sendemail.smtppass <your password> All possible variables are described in man page ``git config --help``.
Die Konfiguration kann man auch in ~/.gitconfig schreiben.
5 Status
$ git status $ git status -uno # don't show untracked files
6 Commit
Änderungen im Arbeitsverzeichnis müssen zunächst mit git add ... hinzugefügt werden (auch wenn eine Datei bereits existiert) und dann mit git commit ... in das lokale Repository aufgenommen werden. Bei existierenden Dateien lässt man fasst immer das separate git add .. weg und ruft statt dessen git commit -a ... auf. Die -a Option nimmt alle Dateien mit Änderungen auf. Mit der -m Option wird die Commit-Meldung angegeben. Ohne die -m Option wird ein Editor aufgerufen, in dem man die Commit-Meldung eingeben kann. Neu angelegt Dateien muss man immer zunächst mit git add ... aufnehmen.
$ git commit -a # stage all changed files (-a) $ git commit -s -a # sign-off commit message (-s, --signoff) $ git commit -am <commit_msg> # commit message <msg> $ git add <neue_datei> $ git commit -am <commit_message>
Der verwendete Editor für die Commit-Meldung wird in der folgenden Reihenfolge festgestellt:
- GIT_EDITOR Umgebungsvariable
- core.editor Konfigurationsvariable (git config --global core.editor "...")
- VISUAL Umgebungsvariable
- EDITOR Umgebungsvariable
7 Log
$ git log $ git log --pretty=oneline -3 # on one line, max. 3 commits, see 'git log --help'
Hier ist ein Beispiel für die Ausgabe. Die lange Folge von Hex-Ziffern ist der "Hash".
commit 15e423b0d895812deb64fcff22be2d4bf1788dba (HEAD -> master, origin/master, origin/HEAD) Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de> Date: Fri Oct 23 18:32:52 2020 +0200 updated _tmux.conf commit 4d9f95acea7fbf5ca571964593363c5256d021ed Author: Hubert Hoegl <hhoegl@gorilla.informatik.hs-augsburg.de> Date: Fri Oct 23 17:07:42 2020 +0200 extended buttons=... help commit 33e35b22d188b77819b65f21e80730639e3d11f3 Date: Thu Oct 22 20:57:58 2020 +0200 Moved doc to separate repo estool-doc ...
8 Änderungen herausfinden
Alle Änderungen von allen Commits im Patch-Format auf die Standardausgabe ausgeben:
$ git log -p # in early days this was 'git whatchanged'
Aktuelle Änderungen des letzten Commit
$ git show # identisch mit git show HEAD
Änderungen von einem bestimmten Commit ausgeben:
$ git show 1931ec4d8592cd5599771dd65f1a5d0dfc7237cb
Man kann die lange ID des Commit (ein SHA-1 Hash) auch abkürzen, solange sie eindeutig ist. Im konkreten Beispiel würde auch folgendes funktionieren:
$ git show 1931ec4
Welche Commits sind noch nicht mit push auf das entfernte Repository übertragen worden?
$ git log remotes/origin/hhoegl..hhoegl commit 9330d1aba6a7a9d64795e4af906c1a995e5eddd9 Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de> Date: Thu Apr 26 10:13:38 2012 +0200 GPIO > 15 aktiviert
Vorsicht: Wenn man die beiden Argumente links und rechts vom .. vertauscht, funktioniert es nicht.
9 Diff
$ git diff $ git diff --cached $ git diff HEAD $ git diff HEAD^ $ git diff HEAD^^^ $ git diff a494fcd0
10 Tag
In folgendem Beispiel wird dem Commit 1931ec4 (abgekürzter SHA-1 Hashwert) die Markierung "release-1" gegeben:
$ git tag release-1 1931ec4
11 Branch
Branches auflisten
$ git branch -a # lokale als auch "remote-tracking" branches ausgeben
Branch erzeugen
$ git branch <branch-name> # create new branch... $ git checkout <branch-name> # and switch to the new branch
oder in einem Schritt:
$ git checkout -b <branch-name>
Branch löschen:
$ git branch -d <other-branch>
Man kann das Löschen auch erzwingen mit --delete --force, kurz -D.
12 Pull
$ git pull $ git pull origin master # pull from remote 'origin', branch 'master' $ git pull --rebase origin master # rebase instead of merge
13 Merge
$ git checkout master # switch to "receiving" branch $ git pull # fetch and merge changes $ git merge <other-branch> # merge <other-branch> into master
14 Konflikte
Unterscheide folgende Fälle
Merge beginnt erst gar nicht
Hier ist das beste Rezept, das Kommando git stash ... zu verwenden.
Merge beginnt, bricht dann aber mittendrin ab
Hier sollte man nicht stash, sondern git reset ... verwenden.
Relevante Kommandos:
$ git log --merge $ git reset $ git reset --mixed $ git merge --abort $ git commit -am "commit message" $ git reset --hard <hash> # roll back to specified commit hash $ git reset --hard HEAD # roll back to HEAD $ git stash [list | apply | pop | drop]
15 Push
$ git push <remote> <local-branch> $ git push <remote> <local-branch>:<remote-branch>
16 Patches
Normalerweise erstellt git für jeden Commit einen eigenen Patch.
Einen einzigen Patch für alle Commits zwischen dem aktuellen Entwicklungsbranch und dem Branch master erstellt man so:
$ git format-patch master --stdout > my.patch
Man kann auch zusätzlich die Option -s (sign-off) verwenden. Mit -o <dir> gibt man das Verzeichnis an, in das der Patch abgelegt werden soll, wenn man nicht auf Standardausgabe ausgibt.
In der Schreibweise
$ git format-patch master..develop
werden zwei Branches angegeben, zwischen denen die Patches erzeugt werden.
Patch anwenden
$ git apply --check my.patch # just check, don't apply $ git apply my.patch # apply w/o sign-off $ git apply --stat my.patch # print patch status $ git am --signoff < my.patch # apply with sign-off ("apply mailbox")
Letzteres Kommando führt zu einer "Signed-off-by" Meldung bei git log. Die sieht so aus:
Signed-off-by: Your Name <your@email.com>
Man kann auch noch die Option --whitespace=strip angeben.
Der Name und die Email-Adresse können in den Umgebungsvariablen GIT_COMMITTER_NAME und GIT_COMMITTER_EMAIL abgelegt werden.
17 Commit Meldungen nachträglich ändern
Die Spitze ("tip") des aktuellen Zweiges ("branch") ändern.
$ git commit --amend -m "New commit message"
Änderungen, die weiter zurück liegen, werden mit git rebase gemacht. Möchte man den vorletzten Commit bearbeiten, muss man sich mit folgendem Kommando die letzten zwei Commits besorgen:
$ git rebase -i HEAD~2
Danach landet man in einem Editor mit folgendem Text:
pick f58e28b Ein paar Aenderungen in .config pick b71ec7a GPIO > 15 aktiviert # Rebase 4ad3a02..b71ec7a onto 4ad3a02 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted.
Wenn man die zwei Zeilen mit "pick" löscht und aus dem Editor herausgeht, dann erscheint "Nothing to do". Wenn man eine der Zeilen von "pick" auf "reword" ändert, dann kann man die Commit Meldung abändern.
18 Archivierung
$ git archive -l $ git archive --prefix=glunz/ HEAD | gzip >glunz-20080628.tar.gz $ git archive --prefix=glunz/ v0.1 | gzip >glunz-0.1.tar.gz
19 Grafische Werkzeuge
Text-basiertes User Interface (mit ncurses), für Linux
- tig - text-mode interface for Git https://jonas.github.io/tig Siehe z.B. den Artikel "How to use Tig to browse Git logs" https://opensource.com/article/19/6/what-tig
- lazygit - https://github.com/jesseduffield/lazygit Siehe z.B. den Artikel "Make advanced Git tasks simple with Lazygit" https://opensource.com/article/20/3/lazygit
Git GUIs
- git-gui Einfaches GUI mit Tkinter (Linux Paket git-gui, Aufruf mit git gui)
- git-cola https://git-cola.github.io (meine Empfehlung, für Linux, Windows, Mac)
- smartgit https://www.syntevo.com/smartgit/
- git-eye https://www.collab.net/downloads/giteye
- GitKraken https://www.gitkraken.com
- Tortoise git https://tortoisegit.org (nur Windows)
- Git for Windows https://gitforwindows.org, kommt mit Git GUI und Git BASH!
Grafische Repository-browser
20 Umgebungsvariable
Eine Liste aller Variablen findet man in man git. Hier sind einige gebräuchliche angegeben:
- PREFIX
- HOME
- GIT_EXEC_PATH
- GIT_PAGER
- GIT_EDITOR
- GIT_DIR
- GIT_WORK_TREE
- GIT_AUTHOR_NAME
- GIT_AUTHOR_EMAIL
- GIT_AUTHOR_DATE
- GIT_COMMITTER_NAME
- GIT_COMMITTER_EMAIL
- GIT_COMMITTER_DATE
21 Gitlab
Die Gitlab Instanz der Fakultät für Informatik findet man unter https://gitlab.informatik.hs-augsburg.de. Es ist eine freie "Community Editition" (CE). Der Zugang funktioniert nur über eine VPN Verbindung von ausserhalb der Hochschule! Es ist ein einmaliger Login mit Hochschul-Zugangsdaten notwendig, damit man als User angelegt wird!
Schlüsselpaar auf gitlab eintragen
Unter Gitlab kann man ein Repository entweder mit einem SSH URL oder mit einem HTTP URL klonen. Siehe das folgende Beispiel:
- git clone ssh://git@gitlab.informatik.hs-augsburg.de:2222/hhoegl/estool.git
- git clone https://gitlab.informatik.hs-augsburg.de/hhoegl/estool.git
Bei der ersten Kommandozeile (ssh) erfolgt die Ausführung sofort, falls man seinen öffentlichen ssh Schlüssel in gitlab eingetragen wurde.
Bei der zweiten Kommandozeile (https) muss der Anwender immer den RZ-Login und das Passwort angeben, was auf die Dauer sehr umständlich ist.
Wenn Sie auf gitlab eingeloggt sind, dann klicken Sie auf "Settings" in Ihrem Account. Auf der linken Seite sehen Sie dann die Spalte "User Settings". Darin befindet sich der Eintrag "SSH Keys", auf den Sie klicken. Sie sollen nun Ihren öffentlichen Schlüssel von dem Account auf dem Sie üblicherweise arbeiten auf gitlab übertragen.
Ein Beispiel: Ich arbeite auf dem Rechner "x230". Mein Home-Verzeichnis (ausgedrückt durch die Tilde ~) enthält das Verzeichnis ~/.ssh/. Darin befindet sich mein öffentlicher ssh Schlüssel id_rsa.pub.
hhoegl@x230:~$ ls ~/.ssh/ id_rsa id_rsa.pub known_hosts
Ich muss nun die Datei in einem Editor öffnen und in die Zwischenablage kopieren. Von dort kann man sie in das Textfeld kopieren, das man beim Eintrag "SSH Keys" auf gitlab findet. Das kann man genauer in dem Hilfetext auf Gitlab nachlesen: https://gitlab.informatik.hs-augsburg.de/help/user/ssh.md.
Wenn man von unterschiedlichen Rechnern arbeitet, dann sollte man den öffentlichen Schlüssel von allen diesen Rechnern auf gitlab speichern.
Die Gitlab Version findet man durch Aufrufen des folgenden Links heraus: https://gitlab.informatik.hs-augsburg.de/help
22 Literatur
Offizielle Git Dokumentation
Scott Chacon, Ben Straub, Pro Git
frei lesbar unter http://git-scm.com/book/en/v2 (Englisch), http://git-scm.com/book/de/v2 (Deutsch)
Git Magic
Git Immersion
A Visual Git Reference
Git Tutorial von Lars Vogel
Git from the bottom up
Intro to Distributed Version Control (Illustrated)
http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated
- René Preißel, Bjørn Stachmann, Git, 5. Auflage, dpunkt Verlag 2019, https://learning.oreilly.com/library/view/git-5th-edition/9781098123154/
Git Tutorial von Atlassian, "Getting Git Right"
darin ein Vergleich von Workflows https://www.atlassian.com/git/tutorials/comparing-workflows
Offizielle Dokumentation von Gitlab Community Edition
Joost Evertse, Mastering Gitlab 12, Packt 2019.
https://learning.oreilly.com/library/view/mastering-gitlab-12/9781789531282/
Adam O'Grady, GitLab Quick Start Guide, Packt 2018
https://learning.oreilly.com/library/view/gitlab-quick-start/9781789534344/
Brent Beer, Introducing Github, O'Reilly 2018.
https://learning.oreilly.com/library/view/introducing-github-2nd/9781491981801/
Phil's Git Cheatsheet