Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
- 2.43.1 → 2.52.0 keine Änderungen
-
2.43.0
2023-11-20
- 2.28.1 → 2.42.4 keine Änderungen
-
2.28.0
2020-07-27
- 2.23.1 → 2.27.1 keine Änderungen
-
2.23.0
2019-08-16
- 2.19.1 → 2.22.5 keine Änderungen
-
2.19.0
2018-09-10
- 2.13.7 → 2.18.5 keine Änderungen
-
2.12.5
2017-09-22
- 2.7.6 → 2.11.4 keine Änderungen
-
2.6.7
2017-05-05
- 2.3.10 → 2.5.6 keine Änderungen
-
2.2.3
2015-09-04
BESCHREIBUNG
Git-Benutzer können für die Zwecke der Beschreibung eines kleinen Satzes nützlicher Befehle für das tägliche Git hier grob in vier Kategorien eingeteilt werden.
-
Befehle für individuelle Entwickler (Standalone) sind für jeden unerlässlich, der einen Commit erstellt, selbst für jemanden, der alleine arbeitet.
-
Wenn Sie mit anderen Leuten zusammenarbeiten, benötigen Sie zusätzlich die Befehle, die im Abschnitt Individueller Entwickler (Teilnehmer) aufgeführt sind.
-
Personen, die die Rolle des Integrators spielen, müssen zusätzlich zu den oben genannten einige weitere Befehle lernen.
-
Befehle für die Repository-Administration sind für Systemadministratoren, die für die Pflege und Wartung von Git-Repositories verantwortlich sind.
Individueller Entwickler (Standalone)
Ein eigenständiger individueller Entwickler tauscht keine Patches mit anderen aus, arbeitet alleine in einem einzigen Repository und verwendet die folgenden Befehle.
-
git-init[1] zum Erstellen eines neuen Repositorys.
-
git-log[1] um zu sehen, was passiert ist.
-
git-switch[1] und git-branch[1] zum Wechseln von Branches.
-
git-add[1] zur Verwaltung der Indexdatei.
-
git-diff[1] und git-status[1] um zu sehen, was Sie gerade tun.
-
git-commit[1] um den aktuellen Branch voranzubringen.
-
git-restore[1] zum Rückgängigmachen von Änderungen.
-
git-merge[1] zum Zusammenführen von lokalen Branches.
-
git-rebase[1] zur Pflege von Topic-Branches.
-
git-tag[1] um einen bekannten Punkt zu markieren.
Beispiele
- Verwenden Sie ein Tarball als Startpunkt für ein neues Repository.
-
$ tar zxf frotz.tar.gz $ cd frotz $ git init $ git add . (1) $ git commit -m "import of frotz source tree." $ git tag v2.43 (2)
-
fügt alles unter dem aktuellen Verzeichnis hinzu.
-
erstellt ein leichtgewichtigen, unkommentierten Tag.
-
- Erstellen Sie einen Topic-Branch und entwickeln Sie.
-
$ git switch -c alsa-audio (1) $ edit/compile/test $ git restore curses/ux_audio_oss.c (2) $ git add curses/ux_audio_alsa.c (3) $ edit/compile/test $ git diff HEAD (4) $ git commit -a -s (5) $ edit/compile/test $ git diff HEAD^ (6) $ git commit -a --amend (7) $ git switch master (8) $ git merge alsa-audio (9) $ git log --since='3 days ago' (10) $ git log v2.43.. curses/ (11)
-
erstellt einen neuen Topic-Branch.
-
macht Ihre fehlerhaften Änderungen in
curses/ux_audio_oss.crückgängig. -
Sie müssen Git mitteilen, wenn Sie eine neue Datei hinzugefügt haben; Entfernung und Änderung werden erfasst, wenn Sie später
gitcommit-aausführen. -
um zu sehen, welche Änderungen Sie committen.
-
committet alles, was Sie getestet haben, mit Ihrer Unterschrift.
-
schaut sich alle Ihre Änderungen an, einschließlich des vorherigen Commits.
-
ändert den vorherigen Commit, fügt alle Ihre neuen Änderungen hinzu und verwendet Ihre ursprüngliche Nachricht.
-
wechselt zum Master-Branch.
-
führt einen Topic-Branch in Ihren Master-Branch zusammen.
-
Überprüfen Sie Commit-Logs; andere Formen zur Begrenzung der Ausgabe können kombiniert werden und umfassen
-10(um bis zu 10 Commits anzuzeigen),--until=2005-12-10usw. -
zeigt nur die Änderungen an, die das Verzeichnis
curses/seit dem Tagv2.43betreffen.
-
Individueller Entwickler (Teilnehmer)
Ein Entwickler, der als Teilnehmer an einem Gruppenprojekt arbeitet, muss lernen, wie man mit anderen kommuniziert, und verwendet diese Befehle zusätzlich zu denjenigen, die ein eigenständiger Entwickler benötigt.
-
git-clone[1] vom Upstream, um Ihr lokales Repository zu initialisieren.
-
git-pull[1] und git-fetch[1] von "origin", um mit dem Upstream auf dem Laufenden zu bleiben.
-
git-push[1] zum gemeinsamen Repository, wenn Sie einen CVS-ähnlichen Workflow für gemeinsame Repositories anwenden.
-
git-format-patch[1] zur Vorbereitung von E-Mail-Einreichungen, wenn Sie den Workflow des öffentlichen Forums im Linux-Kernel-Stil anwenden.
-
git-send-email[1] zum Senden Ihrer E-Mail-Einreichungen ohne Beschädigung durch Ihren MUA.
-
git-request-pull[1] zum Erstellen einer Zusammenfassung von Änderungen, die Ihr Upstream abrufen kann.
Beispiele
- Klonen Sie das Upstream und arbeiten Sie daran. Übertragen Sie Änderungen an das Upstream.
-
$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6 $ cd my2.6 $ git switch -c mine master (1) $ edit/compile/test; git commit -a -s (2) $ git format-patch master (3) $ git send-email --to="person <email@example.com>" 00*.patch (4) $ git switch master (5) $ git pull (6) $ git log -p ORIG_HEAD.. arch/i386 include/asm-i386 (7) $ git ls-remote --heads http://git.kernel.org/.../jgarzik/libata-dev.git (8) $ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL (9) $ git reset --hard ORIG_HEAD (10) $ git gc (11)
-
checked einen neuen Branch
minevon master aus. -
wiederholen Sie dies nach Bedarf.
-
extrahieren Sie Patches aus Ihrem Branch, relativ zu master,
-
und senden Sie sie per E-Mail.
-
kehren Sie zu
masterzurück, bereit, um zu sehen, was es Neues gibt. -
gitpullholt standardmäßig vonoriginund führt in den aktuellen Branch zusammen. -
Unmittelbar nach dem Pull die Änderungen anzeigen, die seit dem letzten Mal im Upstream vorgenommen wurden, nur in dem Bereich, der uns interessiert.
-
Überprüfen Sie die Branch-Namen in einem externen Repository (falls nicht bekannt).
-
holt von einem bestimmten Branch
ALLaus einem bestimmten Repository und führt ihn zusammen. -
macht den Pull rückgängig.
-
bereinigt nicht verwendete Objekte aus einem rückgängig gemachten Pull.
-
- In ein anderes Repository pushen.
-
satellite$ git clone mothership:frotz frotz (1) satellite$ cd frotz satellite$ git config --get-regexp '^(remote|branch)\.' (2) remote.origin.url mothership:frotz remote.origin.fetch refs/heads/*:refs/remotes/origin/* branch.master.remote origin branch.master.merge refs/heads/master satellite$ git config remote.origin.push \ +refs/heads/*:refs/remotes/satellite/* (3) satellite$ edit/compile/test/commit satellite$ git push origin (4) mothership$ cd frotz mothership$ git switch master mothership$ git merge satellite/master (5)
-
Die Mutterschiff-Maschine hat ein Frotz-Repository unter Ihrem Home-Verzeichnis; klonen Sie es, um ein Repository auf der Satellitenmaschine zu starten.
-
clone setzt diese Konfigurationsvariablen standardmäßig. Es arrangiert
gitpullso, dass die Branches der Mutterschiff-Maschine abgerufen und in lokalen Remote-Tracking-Branchesremotes/origin/*gespeichert werden. -
arrangiert
gitpushso, dass alle lokalen Branches in ihren entsprechenden Branch der Mutterschiff-Maschine gepusht werden. -
push sichert all unsere Arbeit auf den Remote-Tracking-Branches
remotes/satellite/*auf der Mutterschiff-Maschine. Sie könnten dies als Backup-Methode verwenden. Ebenso können Sie so tun, als ob die Mutterschiff-Maschine von Ihnen "geholt" hätte (nützlich, wenn der Zugriff einseitig ist). -
Auf der Mutterschiff-Maschine die auf der Satellitenmaschine geleistete Arbeit in den Master-Branch integrieren.
-
- Branch von einem bestimmten Tag abzweigen.
-
$ git switch -c private2.6.14 v2.6.14 (1) $ edit/compile/test; git commit -a $ git checkout master $ git cherry-pick v2.6.14..private2.6.14 (2)
-
Erstellt einen privaten Branch, der auf einem gut bekannten (aber etwas veralteten) Tag basiert.
-
Portiert alle Änderungen im Branch
private2.6.14in den Branchmasterohne ein formelles "Merging". Oder Langform
gitformat-patch-k-m--stdoutv2.6.14..private2.6.14|gitam-3-k
-
Ein alternativer Einreichungsmechanismus für Teilnehmer ist die Verwendung von git request-pull oder Pull-Request-Mechanismen (z. B. wie auf GitHub (www.github.com) verwendet, um Ihr Upstream über Ihren Beitrag zu informieren.
Integrator
Eine ziemlich zentrale Person, die als Integrator in einem Gruppenprojekt fungiert, empfängt von anderen gemachte Änderungen, überprüft und integriert sie und veröffentlicht das Ergebnis für andere zur Nutzung. Sie verwendet diese Befehle zusätzlich zu denen, die Teilnehmer benötigen.
Dieser Abschnitt kann auch von denen verwendet werden, die auf git request-pull oder Pull-Requests auf GitHub (www.github.com) reagieren, um die Arbeit anderer in ihre Historie zu integrieren. Ein untergeordneter Leutnant für ein Repository agiert sowohl als Teilnehmer als auch als Integrator.
-
git-am[1] zum Anwenden von Patches, die per E-Mail von Ihren Mitwirkenden gesendet wurden.
-
git-pull[1] zum Zusammenführen von Ihren vertrauenswürdigen Leutnants.
-
git-format-patch[1] zur Vorbereitung und zum Senden von vorgeschlagenen Alternativen an Mitwirkende.
-
git-revert[1] zum Rückgängigmachen von fehlerhaften Commits.
-
git-push[1] zur Veröffentlichung der neuesten Änderungen.
Beispiele
- Ein typischer Git-Tag eines Integrators.
-
$ git status (1) $ git branch --no-merged master (2) $ mailx (3) & s 2 3 4 5 ./+to-apply & s 7 8 ./+hold-linus & q $ git switch -c topic/one master $ git am -3 -i -s ./+to-apply (4) $ compile/test $ git switch -c hold/linus && git am -3 -i -s ./+hold-linus (5) $ git switch topic/one && git rebase master (6) $ git switch -C seen next (7) $ git merge topic/one topic/two && git merge hold/linus (8) $ git switch maint $ git cherry-pick master~4 (9) $ compile/test $ git tag -s -m "GIT 0.99.9x" v0.99.9x (10) $ git fetch ko && for branch in master maint next seen (11) do git show-branch ko/$branch $branch (12) done $ git push --follow-tags ko (13)-
Sehen Sie, was Sie gerade tun, falls etwas.
-
Sehen Sie, welche Branches noch nicht in
masterintegriert wurden. Dasselbe gilt für alle anderen Integrations-Branches, z. B.maint,nextundseen. -
E-Mails lesen, anwendbare speichern und andere speichern, die noch nicht ganz fertig sind (andere E-Mail-Reader sind verfügbar).
-
wenden Sie sie interaktiv mit Ihren Unterschriften an.
-
erstellen Sie Topic-Branches nach Bedarf und wenden Sie sie an, wiederum mit Unterschriften.
-
rebasiert interne Topic-Branches, die noch nicht in den Master integriert oder als Teil eines stabilen Branches veröffentlicht wurden.
-
Starten Sie
seenjedes Mal neu vom nächsten. -
und bündelt Topic-Branches, die noch in Bearbeitung sind.
-
Backportiert einen kritischen Fix.
-
erstellt einen signierten Tag.
-
Stellen Sie sicher, dass master nicht versehentlich über das bereits veröffentlichte hinaus zurückgespult wurde.
-
In der Ausgabe von
gitshow-branchsolltemasteralles haben, wasko/masterhat, undnextsollte alles haben, wasko/nexthat, usw. -
Pusht die neuesten Änderungen, zusammen mit neuen Tags, die auf die gepushte Historie zeigen.
-
In diesem Beispiel verweist die Abkürzung ko auf das Repository des Git-Maintainers unter kernel.org und sieht wie folgt aus:
(in .git/config) [remote "ko"] url = kernel.org:/pub/scm/git/git.git fetch = refs/heads/*:refs/remotes/ko/* push = refs/heads/master push = refs/heads/next push = +refs/heads/seen push = refs/heads/maint
Repository-Administration
Ein Repository-Administrator verwendet die folgenden Werkzeuge, um den Zugriff auf das Repository für Entwickler einzurichten und aufrechtzuerhalten.
-
git-daemon[1] zum Zulassen anonymer Downloads aus dem Repository.
-
git-shell[1] kann als *beschränkte Login-Shell* für Benutzer zentraler gemeinsamer Repositories verwendet werden.
-
git-http-backend[1] bietet eine serverseitige Implementierung von Git-über-HTTP ("Smart HTTP"), die sowohl Fetch- als auch Push-Dienste ermöglicht.
-
gitweb[1] bietet eine Web-Oberfläche für Git-Repositories, die mit dem Skript git-instaweb[1] eingerichtet werden kann.
update hook howto enthält ein gutes Beispiel für die Verwaltung eines zentralen gemeinsamen Repositorys.
Darüber hinaus gibt es eine Reihe weiterer weit verbreiteter Hosting-, Browser- und Review-Lösungen wie
-
gitolite, gerrit code review, cgit und andere.
Beispiele
- Wir gehen davon aus, dass im Folgenden in /etc/services
-
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System
- Führen Sie git-daemon aus, um /pub/scm von inetd zu bedienen.
-
$ grep git /etc/inetd.conf git stream tcp nowait nobody \ /usr/bin/git-daemon git-daemon --inetd --export-all /pub/scm
Die tatsächliche Konfigurationszeile sollte auf einer Zeile stehen.
- Führen Sie git-daemon aus, um /pub/scm von xinetd zu bedienen.
-
$ cat /etc/xinetd.d/git-daemon # default: off # description: The Git server offers access to Git repositories service git { disable = no type = UNLISTED port = 9418 socket_type = stream wait = no user = nobody server = /usr/bin/git-daemon server_args = --inetd --export-all --base-path=/pub/scm log_on_failure += USERID }Überprüfen Sie Ihre xinetd(8) Dokumentation und Einrichtung, dies ist von einem Fedora-System. Andere können abweichen.
- Geben Sie Entwicklern, die git-over-ssh verwenden, nur Push-/Pull-Zugriff.
-
z. B. diejenigen, die verwenden:
$gitpush/pullssh://host.xz/pub/scm/project$ grep git /etc/passwd (1) alice:x:1000:1000::/home/alice:/usr/bin/git-shell bob:x:1001:1001::/home/bob:/usr/bin/git-shell cindy:x:1002:1002::/home/cindy:/usr/bin/git-shell david:x:1003:1003::/home/david:/usr/bin/git-shell $ grep git /etc/shells (2) /usr/bin/git-shell
-
Die Login-Shell ist auf /usr/bin/git-shell gesetzt, was nichts anderes als
gitpushundgitpullerlaubt. Die Benutzer benötigen SSH-Zugriff auf die Maschine. -
In vielen Distributionen muss /etc/shells auflisten, was als Login-Shell verwendet wird.
-
-
$ grep git /etc/group (1) git:x:9418:alice,bob,cindy,david $ cd /home/devo.git $ ls -l (2) lrwxrwxrwx 1 david git 17 Dec 4 22:40 HEAD -> refs/heads/master drwxrwsr-x 2 david git 4096 Dec 4 22:40 branches -rw-rw-r-- 1 david git 84 Dec 4 22:40 config -rw-rw-r-- 1 david git 58 Dec 4 22:40 description drwxrwsr-x 2 david git 4096 Dec 4 22:40 hooks -rw-rw-r-- 1 david git 37504 Dec 4 22:40 index drwxrwsr-x 2 david git 4096 Dec 4 22:40 info drwxrwsr-x 4 david git 4096 Dec 4 22:40 objects drwxrwsr-x 4 david git 4096 Nov 7 14:58 refs drwxrwsr-x 2 david git 4096 Dec 4 22:40 remotes $ ls -l hooks/update (3) -r-xr-xr-x 1 david git 3536 Dec 4 22:40 update $ cat info/allowed-users (4) refs/heads/master alice\|cindy refs/heads/doc-update bob refs/tags/v[0-9]* david
-
Fügen Sie die Entwickler in dieselbe Git-Gruppe ein.
-
und machen Sie das gemeinsame Repository für die Gruppe beschreibbar.
-
Verwenden Sie das update-hook-Beispiel von Carl aus Documentation/howto/ für die Branch-Richtlinienkontrolle.
-
alice und cindy können in master pushen, nur bob kann in doc-update pushen. david ist der Release-Manager und die einzige Person, die Version-Tags erstellen und pushen kann.
-
GIT
Teil der git[1] Suite