Skip to content

Commit f01e750

Browse files
committed
📝 Update git section
* Add diff source and destination prefix * Add diff with exiftool * Add git list-changed * Add default branch config for init * Add git-symbolic-ref * Add Git Credential Store for Linux * Update shallow clones * Add shell configs and command line tools * Extend git stash section
1 parent b7214df commit f01e750

21 files changed

+1367
-359
lines changed

CHANGELOG.rst

+12
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ Added
2525
* 📝 Add csv.Sniffer methods
2626
* 📝 Add the removal of git lfs
2727

28+
Changed
29+
~~~~~~~
30+
31+
* 📝 Update git section
32+
33+
* Add diff source and destination prefix
34+
* Add default branch config for init
35+
* Add git-symbolic-ref
36+
* Add Git Credential Store for Linux
37+
* Update shallow clones
38+
* Add shell config and command line tools
39+
2840
`24.3.0 <https://github.com/cusyio/Python4DataScience-de/compare/24.2.0...24.3.0>`_: 2024-11-19
2941
-----------------------------------------------------------------------------------------------
3042

docs/productive/git/advanced/batch.rst

+30-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,20 @@ die Kombination von `git ls-files <https://git-scm.com/docs/git-ls-files>`_ und
2020
Beispiel
2121
~~~~~~~~
2222

23-
:samp:`$ git ls-files -z -- "*.py" | xargs -0 git update-index --chmod=+x`
23+
To execute commands for the changed file list, you can use the shell `Command
24+
Substitution
25+
<https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html>`_:
26+
27+
:samp:`$ uv run codespell $(git list-changed '*.py')`
28+
Die Shell führt das ``git list-changed`` in Klammern aus und fügt dessen
29+
Ausgabe in den äußeren Befehl ein. ``codespell`` erhält also die Liste der
30+
geänderten Textdateien als Argument.
31+
:samp:`uv run pytest $(git diff --staged --name-only "tests/*test_*.py")`
2432
ändert für alle Dateien mit dem Suffix ``.py`` ggf. die Berechtigungen von
2533
``100644`` zu ``100755``, sodass sie ausführbar werden.
2634

35+
.. _git-name-only:
36+
2737
Alle im Arbeits- oder Bühnenbereich geänderten Dateien
2838
------------------------------------------------------
2939

@@ -35,10 +45,28 @@ Alle im Arbeits- oder Bühnenbereich geänderten Dateien
3545
:samp:`git diff --staged --name-only "*.{SUFFIX}"`
3646
filtert darüberhinaus noch nach einer bestimmten Dateiendung.
3747

48+
.. _list-changed:
49+
50+
:samp:`git diff --name-only --diff-filter d`
51+
schließt gelöschte Dateien aus.
52+
53+
Dies ist bei mir der häufigste Fall, weswegen ich mir hierfür einen Alias
54+
``list-changed`` angelegt habe: ``git config --global alias.list-changed
55+
'diff --name-only --diff-filter d'``.
56+
3857
Beispiel
3958
~~~~~~~~
4059

41-
:samp:`pytest $(git diff --staged --name-only "tests/test_*.py")`
60+
Um Befehle für die geänderte Dateiliste auszuführen, könnt ihr die
61+
Shell-`Command Substitution
62+
<https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html>`_
63+
verwenden:
64+
65+
:samp:`$ uv run codespell $(git list-changed '*.py')`
66+
Die Shell führt das in Klammern gesetzte ``git list-changed`` aus und fügt
67+
dessen Ausgabe in den äußeren Befehl ein. ``codespell`` erhält also die
68+
Liste der geänderten Textdateien als Argument.
69+
:samp:`uv run pytest $(git diff --staged --name-only "tests/*test_*.py")`
4270
ruft :doc:`python-basics:test/pytest/index` auf, um anschließend nur
4371
diejenigen Testmodule auszuführen, die im Arbeitsverzeichnis geändert
4472
wurden.

docs/productive/git/advanced/binary-files.rst

+88-19
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Git für Binärdateien
32
====================
43

@@ -25,16 +24,16 @@ Excel-Dateien verwenden:
2524
:language: python
2625
:lines: 5-
2726

28-
Nun fügt ihr noch in der globalen Git-Konfiguration in der Datei :file:`~/.gitconfig`
29-
den folgenden Abschnitt hinzu:
27+
Nun fügt ihr noch in der globalen Git-Konfiguration in der Datei
28+
:file:`~/.config/git/config` den folgenden Abschnitt hinzu:
3029

3130
.. code-block:: ini
3231
3332
[diff "excel"]
3433
textconv=python3 /PATH/TO/exceltocsv.py
3534
binary=true
3635
37-
Schließlich wird in der globalen :file:`~/.gitattributes`-Datei unser
36+
Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser
3837
``excel``-Konverter mit :file:`*.xlsx`-Dateien verknüpft:
3938

4039
.. code-block:: ini
@@ -58,15 +57,15 @@ Hierfür wird zusätzlich ``pdftohtml`` benötigt. Ihr installiert es mit
5857
5958
$ brew install pdftohtml
6059
61-
Anschließend fügt ihr den folgenden Abschnitt der globalen Git-Konfiguration in der
62-
Datei :file:`~/.gitconfig` hinzu:
60+
Anschließend fügt ihr den folgenden Abschnitt der globalen Git-Konfiguration in
61+
der Datei :file:`~/.config/git/config` hinzu:
6362

6463
.. code-block:: ini
6564
6665
[diff "pdf"]
6766
textconv=pdftohtml -stdout
6867
69-
Schließlich wird in der globalen :file:`~/.gitattributes`-Datei unser
68+
Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser
7069
``pdf``-Konverter mit :file:`*.pdf`-Dateien verknüpft:
7170

7271
.. code-block:: ini
@@ -76,10 +75,10 @@ Schließlich wird in der globalen :file:`~/.gitattributes`-Datei unser
7675
Nun wird beim Aufruf von ``git diff`` die PDF-Datei zunächst konvertiert und
7776
dann ein Diff über den Ausgaben des Konverters durchgeführt.
7877

79-
… für Word-Dokumente
80-
--------------------
78+
… für Dokumente
79+
---------------
8180

82-
Auch Unterschiede in Word-Dokumenten lassen sich anzeigen. Hierfür kann `Pandoc
81+
Auch Unterschiede in Dokumenten lassen sich anzeigen. Hierfür kann `Pandoc
8382
<https://pandoc.org/>`_ verwendet werden, das einfach installiert werden kann
8483
mit
8584

@@ -100,22 +99,34 @@ mit
10099
Herunterladen und Installieren der aktuellen :file:`.msi`-Datei von `GitHub
101100
<https://github.com/jgm/pandoc/releases/>`_.
102101

103-
Anschließend wird der globalen Git-Konfiguration :file:`~/.gitconfig` folgender
104-
Abschnitt hinzugefügt:
102+
Anschließend wird der globalen Git-Konfiguration :file:`~/.config/git/config`
103+
folgender Abschnitt hinzugefügt:
105104

106105
.. code-block:: ini
107106
108-
[diff "word"]
109-
textconv=pandoc --to=markdown
110-
binary=true
111-
prompt=false
107+
[diff "pandoc-to-markdown"]
108+
textconv = pandoc --to markdown
109+
cachetextconv = true
112110
113-
Schließlich wird in der globalen :file:`~/.gitattributes`-Datei unser
114-
``word``-Konverter mit :file:`*.docx`-Dateien verknüpft:
111+
Schließlich wird in der globalen :file:`~/.config/git/attributes`-Datei unser
112+
``pandoc-to-markdown``-Konverter mit :file:`*.docx`, :file:`*.odt` und
113+
:file:`*.rtf`-Dateien verknüpft:
115114

116115
.. code-block:: ini
117116
118-
*.docx diff=word
117+
*.docx diff=pandoc-to-markdown
118+
*.odt diff=pandoc-to-markdown
119+
*.rtf diff=pandoc-to-markdown
120+
121+
.. tip::
122+
:doc:`Jupyter Notebooks <jupyter-tutorial:notebook/index>` schreiben in eine
123+
JSON-Datei :ref:`*.ipynb <jupyter-tutorial:was-ist-eine-ipynb-datei>`, die
124+
ziemlich dicht und insbesondere bei Diffs schwer zu lesen ist. Die
125+
Markdown-Darstellung von Pandoc vereinfact dies:
126+
127+
.. code-block:: ini
128+
129+
*.ipynb diff=pandoc-to-markdown
119130
120131
Die gleiche Vorgehensweise kann auch angewandt werden, um nützliche Diffs von
121132
anderen Binärdateien zu erhalten, :abbr:`z.B. (zum Beispiel)` ``*.zip``,
@@ -124,3 +135,61 @@ Metainformationen von Bildern mit ``exiv2``. Zudem gibt es
124135
Konvertierungswerkzeuge für die Umwandlung von :file:`*.odt`, :file:`*.doc` und
125136
anderen Dokumentenformaten in einfachen Text. Für Binärdateien, für die es
126137
keinen Konverter gibt, reichen oft auch Strings aus.
138+
139+
.. _exiftool:
140+
141+
… für Medien-Dateien
142+
--------------------
143+
144+
`ExifTool <https://exiftool.org>`_ kann verwendet werden um die Metadaten der
145+
Medien-Dateien in Text zu konvertieren.
146+
147+
.. tab:: Debian/Ubuntu
148+
149+
.. code-block:: console
150+
151+
$ sudo apt install libimage-exiftool-perl
152+
153+
.. tab:: macOS
154+
155+
.. code-block:: console
156+
157+
$ brew install exiftool
158+
159+
.. tab:: Windows
160+
161+
.. code-block:: ps1
162+
163+
> choco install exiftool
164+
165+
.. seealso::
166+
* `Installing ExifTool <https://exiftool.org/install.html>`_
167+
168+
Anschließend könnt ihr in der globalen Git-Konfigurationsdatei
169+
:file:`~/.config/git/config` folgenden Abschnitt hinzufügen:
170+
171+
.. code-block:: ini
172+
173+
[diff "exiftool"]
174+
textconv = exiftool --composite -x 'Exiftool:*'
175+
cachetextconv = true
176+
xfuncname =
177+
"^-.*$"
178+
179+
Schließlich wird in der :file:`~/.config/git/attributes` der
180+
``exiftool``-Konverter mit Datei-Endungen von Medien-Dateien verknüpft:
181+
182+
.. code-block:: ini
183+
184+
*.avif diff=exiftool
185+
*.bmp diff=exiftool
186+
*.gif diff=exiftool
187+
*.jpeg diff=exiftool
188+
*.jpg diff=exiftool
189+
*.png diff=exiftool
190+
*.webp diff=exiftool
191+
192+
.. seealso::
193+
``exiftool`` kann noch viele weitere Medien-Dateien verarbeiten. Eine
194+
vollständige Liste erhaltet ihr in `Supported File Types
195+
<https://exiftool.org/#supported>`_.
Loading
266 KB
Loading

0 commit comments

Comments
 (0)