Skip to content

Commit ea4eebb

Browse files
committed
📝 Update git section
* Add git history and config-based hooks * Add links to Sourcegraph to find pre-commit hooks
1 parent dff4dce commit ea4eebb

4 files changed

Lines changed: 81 additions & 14 deletions

File tree

docs/productive/git/advanced/exceltocsv.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# SPDX-License-Identifier: BSD-3-Clause
44

55
import sys
6-
76
from io import StringIO
87

98
import pandas as pd

docs/productive/git/advanced/hooks/index.rst

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Git Hooks
66
=========
77

88
Git-Hooks sind Skripte, die bei bestimmten Ereignissen in einem Git-Repository
9-
automatisch ausgeführt werden, :abbr:`u.a. (unter anderem)`:
9+
automatisch ausgeführt werden, :abbr:`u.a. (unter anderem)`:
1010

1111
+---------------+-------------------------------------------------------+
1212
| Befehl | Hooks |
@@ -25,9 +25,9 @@ automatisch ausgeführt werden, :abbr:`u.a. (unter anderem)`:
2525
| | `push-to-checkout`_ |
2626
+---------------+-------------------------------------------------------+
2727

28-
Sie können sich entweder in lokalen oder serverseitigen Repositories befinden.
29-
So können Git-Repositories individuell angepasst und benutzerdefinierte Aktionen
30-
ausgelöst werden.
28+
Sie können sich entweder in lokalen oder serverseitigen Repositories befinden
29+
und erlauben so, Git-Repositories individuell anzupassen und benutzerdefinierte
30+
Aktionen auszulösen.
3131

3232
Git Hooks befinden sich im Verzeichnis :file:`.git/hooks/`. Beim Anlegen eines
3333
Repository werden dort auch bereits einige Beispielskripte angelegt:
@@ -59,11 +59,35 @@ Die integrierten Skripte sind Shell- und Perl-Skripte, es können jedoch
5959
beliebige Skriptsprachen verwenden werden. Dabei bestimmt die Shebang-Zeile
6060
(:samp:`#!/bin/sh`), wie die Datei interpretiert werden soll.
6161

62-
Die Skripte können jedoch nicht in das serverseitige Repository kopiert werden.
62+
Die Skripte werden jedoch mit ``git push`` **nicht** auf den Git-Server kopiert.
63+
Um Skripte in mehreren Repositories verwenden zu können, empfiehlt sich daher
64+
das :doc:`pre-commit`.
6365

6466
.. seealso::
6567
* `Hooks <https://git-scm.com/docs/githooks#_hooks>`_
6668

69+
Konfigurationsbasierte Hooks
70+
----------------------------
71+
72+
.. version-added:: 2.54
73+
74+
Git 2.54 führt nun eine neue Möglichkeit ein, Hooks in euren
75+
Konfigurationsdateien zu definieren: Anstatt eines Skripts in
76+
:file:`.git/hooks/pre-commit` abzulegen, kann nun folgendes angegeben werden:
77+
78+
.. code-block:: ini
79+
80+
[hook "ruff check"]
81+
event = pre-commit
82+
command = ~/bin/ruff check --fix --exit-non-zero-on-fix
83+
84+
Diese Konfiguration kann jedoch nicht nur für jedes Projekt angegeben werden,
85+
sondern auch global oder systemweit in :file:`~/.gitconfig` oder in
86+
:file:`/etc/gitconfig`.
87+
88+
Mit ``git hook list pre-commit`` erfahrt ihr, welche Hooks konfiguriert sind
89+
und woher sie stammen.
90+
6791
.. toctree::
6892
:hidden:
6993

docs/productive/git/advanced/hooks/scripts.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,7 @@ Misc
173173

174174
.. seealso::
175175
* `Supported hooks <https://pre-commit.com/hooks.html>`_
176+
* `Sourcegraph: file:^\.pre-commit-config\.yaml$
177+
<https://sourcegraph.com/search?q=context:global+file:%5E.pre-commit-hooks.yaml>`_
178+
* `Sourcegraph: file:^\.pre-commit-hooks\.yaml$ \"types: [python]\"
179+
<https://sourcegraph.com/search?q=context:global+file:%5E.pre-commit-hooks.yaml%24+%22types:+%5Bpython%5D%22>`_

docs/productive/git/workflows/clean-history.rst

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1-
Commits für ein sauberes Log ändern
2-
===================================
3-
4-
Mit ``git commit --fixup`` und ``git rebase --autosquash`` könnt ihr relativ
5-
einfach eine Reihe von Commits korrigieren. Um dies an einem Beispiel zu
6-
demonstrieren, stelle ich euch folgendes Szenario vor:
1+
Geschichte umschreiben
2+
======================
3+
4+
Es gibt in Git mehrere Befehle zum Umschreiben der Geschcihte. ``git rebase -i``
5+
ist das bekannteste und flexibelste: ihr könnt Commits neu anordnen,
6+
zusammenfassen, bearbeiten und entfernen. diese Flexibilität geht jedoch mit
7+
einiger Komplexität einher: euer `Working Tree
8+
<https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-workingtree>`_
9+
und euer `Index <https://git-scm.com/docs/gitglossary#def_index>`_ werden
10+
aktualisiert und Konflikte können entstehen, die gelöst werden müssen, bevor ihr
11+
mit der Arbeit fortfahren könnt.
12+
13+
Mit ``git commit --fixup`` und ``git rebase --autosquash`` könnt ihr hingegen
14+
relativ einfach eine Reihe von Commits korrigieren. Im Folgenden wollen wir dies
15+
an einem Beispiel demonstrieren:
716

817
#. Wir haben in unserem ``my-feature``-Branch zwei Commits: den einen für die
918
eigentliche Funktion, den anderen für die zugehörigen Tests:
@@ -64,8 +73,10 @@ demonstrieren, stelle ich euch folgendes Szenario vor:
6473
31a140a (my-feature) Add test for my new feature
6574
132ae9b Add new feature
6675
67-
#. Die Änderungen können nun mit ``git push -f`` an unseren entfernten Zweig
68-
gesendet werden.
76+
#. Die Änderungen können nun mit ``git push --force-with-lease`` an unseren
77+
entfernten Zweig gesendet werden. ``--force-with-lease`` gewährleistet, dass
78+
Änderungen im entfernten Zweig :abbr:`ggf. (gegebenenfalls)` nicht
79+
überschrieben werden.
6980

7081
…mit ``git commit --fixup`` und ``git rebase --autosquash``
7182
------------------------------------------------------------
@@ -118,3 +129,32 @@ korrigieren: mit ``git commit--fixup`` und ``git rebase --autosquash``.
118129

119130
Weitere Optionen findet ihr in der `Git Commit-Dokumentation
120131
<https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---fixupamendrewordltcommitgt>`_.
132+
133+
``git history``
134+
---------------
135+
136+
.. version-added:: 2.54
137+
138+
Git 2.54 führt experimentell ``git history`` ein, :abbr:`d. h. (das heißt)`,
139+
dass sich die Schnittstelle noch weiterentwickeln kann. Mit ``git history``
140+
wird die Korrektur von Tippfehlern früherer Commit-Meldungen und das
141+
Aufteilen von Commits in zwei Teile erleichtert:
142+
143+
:samp:`git history reword {SHA}`
144+
öffnet deinen Editor mit der Nachricht des angegebenen Commits und
145+
schreibt diese direkt um, wobei alle Zweige aktualisiert werden, die von
146+
diesem Commit abstammen. Im Gegensatz zu :doc:`../rebase` greift es weder
147+
auf deinen Working Tree noch auf deinen Index zu.
148+
:samp:`git history split {SHA}`
149+
teilt einen Commit interaktiv in zwei Teile, wobei ihr auswählt, welche
150+
Teile in einen neuen übergeordneten Commit ausgelagert werden sollen. Das
151+
Interface entspricht dem von ``git add –p``. Nach der Auswahl der Blöcke
152+
erstellt Git einen neuen Commit mit diesen Änderungen als Vorgänger des
153+
ursprünglichen Commits, der alle nicht ausgewählten Blöcke beibehält, und
154+
schreibt alle nachgelagerten Zweige um, sodass sie auf den aktualisierten
155+
Verlauf verweisen.
156+
157+
.. warning::
158+
``history`` unterstützt keine Historien, die Merge-Commits enthalten, und
159+
es können auch keine Operationen ausgeführt werden, die zu einem
160+
Merge-Konflikt führen würden.

0 commit comments

Comments
 (0)