Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
8501dc5db2 | |||
70f27bdff0 | |||
15e2d624e8 | |||
6b1aedc62c | |||
|
ea32310b5f | ||
|
42d36d2e9f | ||
|
f93e0dfc73 | ||
|
f74c0aa105 |
332
Git.tex
332
Git.tex
@ -390,41 +390,43 @@ sollte nat"urlich "uber LAN (und nicht via WLAN) mit dem Netz verbunden sein, da
|
||||
Daten"ubertragung m"oglichst hastig erfolgen kann. Eine FritzBox zum Beispiel hat
|
||||
Gigabitinterfaces, da kann man schon mal gut was "uber die Leitung jagen (wobei des Raspberries
|
||||
Interface langsamer ist).\\
|
||||
Als GIT-Serversoftware empfehle ich an dieser Stelle gogs\footnote{https://gogs.io/}.\\
|
||||
Als GIT-Serversoftware empfehle ich an dieser Stelle gitea\footnote{https://gitea.io/}.\\
|
||||
Wenn du dich damit besch"aftigen willst, solltest du aber "uber gute Linuxkenntnisse
|
||||
verf"ugen.\\
|
||||
Mit gogs hast du eine Weboberfl"ache, "ahnlich wie bei GitHub, unter der du deine Projekte
|
||||
Mit gitea hast du eine Weboberfl"ache, "ahnlich wie bei GitHub, unter der du deine Projekte
|
||||
recht einfach verwalten kannst. Du hast auch die M"oglichkeit, private Projekte dort anzulegen
|
||||
und mit Hilfe der Benutzerverwaltung kannst du auch Einfluss darauf nehmen, was deineTeammitgleider
|
||||
und mit Hilfe der Benutzerverwaltung kannst du auch Einfluss darauf nehmen, was deine Teammitgleider
|
||||
alles so d"urfen.
|
||||
|
||||
\subsection{gogs}
|
||||
Gogs ist ein kleines, aber feines Projekt, das ein Webfrontend f"ur einen git-Server bereitstellt.
|
||||
\subsection{gitea}
|
||||
Gitea ist ein kleines, aber feines Projekt, das ein Webfrontend f"ur einen git-Server bereitstellt.
|
||||
Es ist in der Programmiersprache go geschrieben und ben"otigt nur minimale Resourcen.
|
||||
|
||||
\subsubsection{Vorbereiten der Datenbank}
|
||||
Bevor du dir gogs herunterl"adst und installierst, solltest du das Datenbanksystem
|
||||
ausw"ahlen, das gogs sp"ater benutzen soll. Du kannst zwischen MariaDB/MySQL und PostgreSQL
|
||||
w"ahlen. Gut, es giobt noch SQLite, MSSQL oder TiDB nutzen, aber die ersten beiden will man
|
||||
Bevor du dir gitea herunterl"adst und installierst, solltest du das Datenbanksystem
|
||||
ausw"ahlen, das gitea sp"ater benutzen soll. Du kannst zwischen MariaDB/MySQL und PostgreSQL
|
||||
w"ahlen. Gut, es gibt noch SQLite, MSSQL oder TiDB nutzen, aber die ersten beiden will man
|
||||
nicht wirklich und TiDB ist wohl noch zu speziell. Achte darauf, dass MySQL/MariaDB auch
|
||||
tats"achlich auf dem Netzwerkinterface horcht, das du bei der Installation angibst!\\
|
||||
|
||||
\paragraph{PostgreSQL}
|
||||
|
||||
Am einfachsten loggst du dich per ``sudo su - postgres'' als Benutzer postgres in deiner
|
||||
Shell auf deinem GIT-Server ein, dann erzeugst du per ``createuser -P -d gogs'' einen Benutzer
|
||||
f"ur die Datenbank ``gogs''.\\
|
||||
Im n"achsten Schritt loggst du dich auf der Shell per ``psql -h localhost template1 gogs''
|
||||
in das Datenbanksystem ein. Hier reicht nun ein ``CREATE DATABASE gogs;'', um die Datenbank
|
||||
f"ur gogs anzulegen.
|
||||
Shell auf deinem GIT-Server ein, dann erzeugst du per ``createuser -P -d gitea'' einen Benutzer
|
||||
f"ur die Datenbank ``gitea''.\\
|
||||
Im n"achsten Schritt loggst du dich auf der Shell per ``psql -h localhost template1 gitea''
|
||||
in das Datenbanksystem ein. Hier reicht nun ein ``CREATE DATABASE gitea;'', um die Datenbank
|
||||
f"ur gitea anzulegen.
|
||||
|
||||
\paragraph{MariaDB/MySQL}
|
||||
|
||||
Du loggst dich mit dem administrativen Benutzer in MariaDB/MySQL, den du bei der Installation
|
||||
eingerichtet hast, in das Datenbanksystem ein. Das ist oft der Datenbankbenutzer ``root''
|
||||
(nicht zu verwechseln mit dem Systembenutzer ``root''). Also ``mysql -p -u root''. Nun
|
||||
erfolgt ein ``GRANT ALL PRIVILEGES ON gogs.* to 'gogs'@'localhost' IDENTIFIED BY
|
||||
'geheimes passwort';''. Dann loggst du dich aus, loggst dich per ``mysql -p -u gogs''
|
||||
wieder ein und f"uhrst ein ``CREATE DATABASE gogs CHARACTER SET utf8mb4;'' aus,
|
||||
um die Datenbank f"ur gogs anzulegen.
|
||||
erfolgt ein ``GRANT ALL PRIVILEGES ON gitea.* to 'gitea'@'localhost' IDENTIFIED BY
|
||||
'geheimes passwort';''. Dann loggst du dich aus, loggst dich per ``mysql -p -u gitea''
|
||||
wieder ein und f"uhrst ein ``CREATE DATABASE gitea CHARACTER SET utf8mb4;'' aus,
|
||||
um die Datenbank f"ur gitea anzulegen.
|
||||
\\
|
||||
\textbf{Hinweis:} Sollte bei Benutzung von MariaDB w"ahrend der Installation im
|
||||
Webbrowser die Fehlermeldung ``Datenbankeinstellungen sind nicht korrekt: Error 1071: Specified key was too long; max key length is 767 bytes'', dann folgende Befehle in der
|
||||
@ -437,20 +439,195 @@ set global innodb_file_format=Barracuda;
|
||||
\subsubsection{Installation}
|
||||
Bevor du dir gleich die Software runterl"adst, lege bitte einen Benutzer ``git'' auf deinem
|
||||
Server an, sofern der Benutzer noch nicht existiert.\\
|
||||
Von https://gogs.io/docs/installation/install\_from\_binary l"adt man sich die passende Version
|
||||
Von https://gitea.io/ l"adt man sich die passende Version
|
||||
f"ur seinen Server runter und entpackt diese. Das entstandene Verzeichnis wird dann in das
|
||||
Benutzerverzeichnis des Benutzers ``git'' verschoben und diesem zu eigen gemacht (chown).\\
|
||||
Im Verzeichnis gogs/scripts findest du Beispiele, um gogs auf deinem System bei Systemstart
|
||||
automatisch zu starten. Das geht zum Beispiel via init oder systemd.\\
|
||||
Um gitea beim Systemstart zu starten, benötigst du die passenden Skripte.\\
|
||||
Nat"urlich solltest du die Dateien entsprechend f"ur dein System anpassen, sonst stimmen
|
||||
die Pfade unter Umst"anden nicht.
|
||||
|
||||
\paragraph{systemd}
|
||||
In ``/etc/systemd/system/'' legst du (z.B. mit vim) die Datei ``gitea.service'' mit
|
||||
folgendem Inhalt an:
|
||||
|
||||
\begin{verbatim}
|
||||
[Unit]
|
||||
Description=Gitea
|
||||
After=syslog.target
|
||||
After=network.target
|
||||
After=mariadb.service mysqld.service postgresql.service
|
||||
After=memcached.service redis.service
|
||||
|
||||
[Service]
|
||||
# Modify these two values and uncomment them if you have
|
||||
# repos with lots of files and get an HTTP error 500 because
|
||||
# of that
|
||||
###
|
||||
#LimitMEMLOCK=infinity
|
||||
#LimitNOFILE=65535
|
||||
Type=simple
|
||||
User=git
|
||||
Group=git
|
||||
WorkingDirectory=/home/git/gitea
|
||||
ExecStart=/home/git/gitea/gitea web
|
||||
Restart=always
|
||||
Environment=USER=git HOME=/home/git
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
\end{verbatim}
|
||||
|
||||
Dann folgen ein ``systemctl enable gitea'', danach ein ``systemctl start gitea''.
|
||||
|
||||
\paragraph{SystemV init}
|
||||
|
||||
Es gibt ja immer noch Puristen, die das alte init-System
|
||||
von SystemV verwenden. Dafür benötigt man die Datei
|
||||
``/etc/init.d/gitea'', die Executrechte benötigt.
|
||||
|
||||
\begin{verbatim}
|
||||
#! /bin/sh
|
||||
### BEGIN INIT INFO
|
||||
# Provides: gitea
|
||||
# Required-Start: $syslog $network
|
||||
# Required-Stop: $syslog
|
||||
# Should-Start: mysql postgresql
|
||||
# Should-Stop: mysql postgresql
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: A self-hosted Git service written in Go.
|
||||
# Description: A self-hosted Git service written in Go.
|
||||
### END INIT INFO
|
||||
|
||||
# Author: Danny Boisvert
|
||||
|
||||
# Do NOT "set -e"
|
||||
|
||||
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
||||
DESC="Gitea"
|
||||
NAME=gitea
|
||||
SERVICEVERBOSE=yes
|
||||
PIDFILE=/var/run/$NAME.pid
|
||||
SCRIPTNAME=/etc/init.d/$NAME
|
||||
WORKINGDIR=/home/git/gitea
|
||||
DAEMON=$WORKINGDIR/$NAME
|
||||
DAEMON_ARGS="web"
|
||||
USER=git
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||
|
||||
# Exit if the package is not installed
|
||||
[ -x "$DAEMON" ] || exit 0
|
||||
|
||||
# Load the VERBOSE setting and other rcS variables
|
||||
. /lib/init/vars.sh
|
||||
|
||||
# Define LSB log_* functions.
|
||||
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||
# and status_of_proc is working.
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
#
|
||||
# Function that starts the daemon/service
|
||||
#
|
||||
do_start()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been started
|
||||
# 1 if daemon was already running
|
||||
# 2 if daemon could not be started
|
||||
sh -c "USER=$USER start-stop-daemon --start --quiet \\
|
||||
--pidfile $PIDFILE --make-pidfile \\
|
||||
--test --chdir $WORKINGDIR --chuid $USER \\
|
||||
--exec $DAEMON -- $DAEMON_ARGS > /dev/null \\
|
||||
|| return 1"
|
||||
sh -c "USER=$USER start-stop-daemon --start --quiet \\
|
||||
--pidfile $PIDFILE --make-pidfile \\
|
||||
--background --chdir $WORKINGDIR --chuid $USER \\
|
||||
--exec $DAEMON -- $DAEMON_ARGS \\
|
||||
|| return 2"
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
do_stop()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been stopped
|
||||
# 1 if daemon was already stopped
|
||||
# 2 if daemon could not be stopped
|
||||
# other if a failure occurred
|
||||
start-stop-daemon --stop --quiet --retry=TERM/1/KILL/5 \\
|
||||
--pidfile $PIDFILE --name $NAME
|
||||
RETVAL="$?"
|
||||
[ "$RETVAL" = 2 ] && return 2
|
||||
start-stop-daemon --stop --quiet --oknodo \\
|
||||
--retry=0/1/KILL/5 --exec $DAEMON
|
||||
[ "$?" = 2 ] && return 2
|
||||
# Many daemons don't delete their pidfiles when they exit.
|
||||
rm -f $PIDFILE
|
||||
return "$RETVAL"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
[ "$SERVICEVERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||
do_start
|
||||
case "$?" in
|
||||
0|1) [ "$SERVICEVERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$SERVICEVERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
stop)
|
||||
[ "$SERVICEVERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1) [ "$SERVICEVERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$SERVICEVERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||
;;
|
||||
restart|force-reload)
|
||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1)
|
||||
do_start
|
||||
case "$?" in
|
||||
0) log_end_msg 0 ;;
|
||||
1) log_end_msg 1 ;; # Old process is still running
|
||||
*) log_end_msg 1 ;; # Failed to start
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# Failed to stop
|
||||
log_end_msg 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
\end{verbatim}
|
||||
|
||||
Um das Skript zu aktivieren, führt man ``update-rc.d gitea defaults'' aus und
|
||||
startet gitea per ``/etc/init.d/gitea start''.
|
||||
|
||||
\subsubsection{Konfigurationsdatei}
|
||||
Um sp"ater noch ein wenig Feintuning vorzunehmen, kann man im Verzeichnis ``custom/conf''
|
||||
die Datei ``app.ini'' "andern, die bei der Installation automatisch angelegt wird.\\
|
||||
Ein Beispiel f"ur eine app.ini:
|
||||
|
||||
\begin{verbatim}
|
||||
APP_NAME = Gogs
|
||||
APP_NAME = Gitea
|
||||
RUN_USER = git
|
||||
RUN_MODE = prod
|
||||
|
||||
@ -460,11 +637,11 @@ ROOT = /home/git/repositories
|
||||
[database]
|
||||
DB_TYPE = postgres
|
||||
HOST = 127.0.0.1:5432
|
||||
NAME = gogs
|
||||
USER = gogs
|
||||
NAME = gitea
|
||||
USER = gitea
|
||||
PASSWD = GEHEIM
|
||||
SSL_MODE = disable
|
||||
PATH = data/gogs.db
|
||||
PATH = data/gitea.db
|
||||
|
||||
[server]
|
||||
DOMAIN = git.hauke-zuehl.de
|
||||
@ -495,7 +672,7 @@ PROVIDER = file
|
||||
[log]
|
||||
MODE = file
|
||||
LEVEL = Info
|
||||
ROOT_PATH = /home/git/gogs/log
|
||||
ROOT_PATH = /home/git/gitea/log
|
||||
|
||||
[security]
|
||||
INSTALL_LOCK = true
|
||||
@ -508,20 +685,29 @@ kannst aber gerne MariaDB oder MySQL verwenden.
|
||||
|
||||
\subsubsection{Der erste Start}
|
||||
|
||||
Du startest gogs zun"achst "uber die Kommandozeil per ``./gogs web'' und gibst dann in
|
||||
Du startest gitea zun"achst "uber die Kommandozeil per ``./gitea web'' und gibst dann in
|
||||
deinem Webbrowser die URL ``http://localhost:3000'' ein.\\
|
||||
Du wirst nun durch die Konfiguration der Datenbank und von gogs gef"uhrt. Bei der Domain
|
||||
Du wirst nun durch die Konfiguration der Datenbank und von gitea gef"uhrt. Bei der Domain
|
||||
solltest du den Server- oder einen ordentlichen Domainnamen eingeben. Hast du also zum
|
||||
Beispiel einen kleinen RaspberryPi zu Hause, auf dem gogs laufen soll, und dieser heisst
|
||||
Beispiel einen kleinen RaspberryPi zu Hause, auf dem gitea laufen soll, und dieser heisst
|
||||
``pi.deinzuhause.net'' dann gibst du eben diesen Namen bei der Domain und der Application
|
||||
URL ein.\\
|
||||
Den Datenbankbenutzer f"ur gogs und die entsprechende Datenbank solltest du nun auch
|
||||
Den Datenbankbenutzer f"ur gitea und die entsprechende Datenbank solltest du nun auch
|
||||
anlegen, sonst kracht es bei der Einrichtung der Tabellen.\\
|
||||
Hast du soweit alles eingetragen, kannst du dich anmelden und deine Projekte mit gogs
|
||||
Hast du soweit alles eingetragen, kannst du dich anmelden und deine Projekte mit gitea
|
||||
verwalten.\\
|
||||
Der erste Benutzer, der sich registriert bei gogs, wird "ubrigens als Administrator
|
||||
angelegt, also Obacht! Von nun kannst du gogs in aller Ruhe erforschen und
|
||||
eigene Repositores anlegen, Organiosationen und Teams erzeugen, usw.!
|
||||
Der erste Benutzer, der sich registriert bei gitea, wird "ubrigens als Administrator
|
||||
angelegt, also Obacht! Von nun kannst du gitea in aller Ruhe erforschen und
|
||||
eigene Repositores anlegen, Organisationen und Teams erzeugen, usw.!
|
||||
|
||||
\subsection{Gogs}
|
||||
|
||||
Gitea ist ein sog. ``fork'' von gogs, d.h, jemand fand die Entwicklung von gogs nicht so
|
||||
toll, hat das Projekt geklont und fortgeführt.\\
|
||||
\\
|
||||
Gogs dagegen ist zur Zeit ein wenig eingeschlafen, sodass hier nicht weiter darauf eingegangen wird.
|
||||
Wer aber gogs verwenden möge, kann dies nach der Installationsanleitung von
|
||||
gitea durchführen.
|
||||
|
||||
\section{GIT from scratch}
|
||||
Ich habe keine bessere "Uberschrift gefunden, aber wenn du keine Lust auf GitHub oder gogs oder
|
||||
@ -945,7 +1131,7 @@ Wenn ich das alles gemacht habe, sieht der Verzeichnisbaum so aus:
|
||||
|
||||
Du siehst den Unterschied!\\
|
||||
|
||||
Git w"urde jetzt also alle ``neuen'' Datein unterhalb von build finden
|
||||
Git w"urde jetzt also alle ``neuen'' Dateien unterhalb von build finden
|
||||
und nat"urlich daraus schliessen, dass man diese auch ins Repo
|
||||
aufnehmen will:
|
||||
\begin{verbatim}
|
||||
@ -1000,6 +1186,84 @@ uninteressant oder unwichtig sind. Diese k"onnen dann nach
|
||||
und nach in die .gitignore aufgenommen werden, wobei nat"urlich
|
||||
auch Wildcards verwendet werden k"onnen.
|
||||
|
||||
\chapter{Hooks}
|
||||
Stell dir vor, du sitzt als Softwareentwickler in deinem Büro,
|
||||
es ist Freitag nachmittag, kurz vor Feierabend, gute 30 Grad Celsius
|
||||
warm und dein Chef kommt herein und trägt dir auf, das auf der
|
||||
Firmenwebseite die Zeile ``Über uns'' in Fettschrift
|
||||
angezeigt werden soll. Also änderst du die Zeile
|
||||
|
||||
\begin{verbatim}
|
||||
echo "Über uns";
|
||||
\end{verbatim}
|
||||
|
||||
um in
|
||||
\begin{verbatim}
|
||||
echo "<h2>Über uns</h2>"
|
||||
\end{verbatim}
|
||||
|
||||
in der Datei ``header.php''.\\
|
||||
Du lädst die Seite in das Git-Repo, lädst die geänderte Datei auf
|
||||
das Produktivsystem, fährst deinen Rechner runter und gehst in
|
||||
den Feierabend.\\
|
||||
\\
|
||||
Montag morgen kommst du in die Firma und darfst erst einmal zum Chef
|
||||
kommen, der dir erzählt, dass statt der Firmenwebseite das ganze
|
||||
Wochenende nur eine weisse Seite zu sehen war. Das demonstriert er dir
|
||||
eindeutig auf seinem Laptop. Deine Gesichtsfarbe wechselt von
|
||||
sommerlich gebräunt zum Rot eines Herbstapfels, hin zu einem weiss,
|
||||
wogegen die Wandfarbe eines bekannten Farbherstellers grau wirkt!\\
|
||||
\\
|
||||
Was war passiert?\\
|
||||
\\
|
||||
Ganz einfach: Ungetestet wurde eine fehlerhafte PHP-Datei auf den Server
|
||||
kopiert und aufgrund des fehlenden Semikolons am Ende der Befehlszeile,
|
||||
wurde das Skript von PHP beendet. Hättest du also besser vorher
|
||||
ein ``php -l header.php'' ausgeführt, um das Skript syntaktisch
|
||||
überprüfen zu lassen.\\
|
||||
Damit du Depp also beim nächsten Mal nicht wieder wie ein Vollidiot
|
||||
zum Chef musst, solltest du dir einfache Tests automatisieren, denn
|
||||
dafür hast du ja einen Computer.\\
|
||||
\\
|
||||
Der Trick: Hooks! In diesem Falle hilft ein sog. ``client hook''.
|
||||
|
||||
\section{Client hooks}
|
||||
So genannte ``client hooks'' sind kleine Programme, die lokal
|
||||
auf deinem Arbeitsrechner laufen und die sich in den Ablaufprozess
|
||||
von git einklinken (deshalb auch ``hook'').
|
||||
\chapter{Ein paar kleinere Tricks}
|
||||
|
||||
\section{Wenn es schnell gehen muss}
|
||||
Es gibt durchaus Situationen, in denen man alle Branches in einem Rutsch
|
||||
auf den git-Server pushen will, dann verwende man ``git push --all origin''.
|
||||
|
||||
Für Tags gilt analog ``git push --tags origin''.
|
||||
|
||||
\section{Repository von einem Server zu einem anderen umziehen}
|
||||
Manchmal ändert sich der Name des Servers, auf dem die Repos gepackt
|
||||
werden, z.B. wenn der Name des Unternehmens sich ändert, oder wenn
|
||||
man von GitHub zu einem eigenen git-Server migriert. Gründe gibt
|
||||
es genug.
|
||||
|
||||
Jedenfalls muss man erst einmal dafür Sorge tragen, dass das Repo auf
|
||||
dem alten Server vollständig ist und keiner im Team mehr dorthin
|
||||
einen Push durchführt. Ausserdem muss das eigene Repo ebenfalls komplett
|
||||
auf dem aktuellsten Stand sein. Der Umzug geht dann ganz unspektakulär
|
||||
per ``git git remote set-url origin <neue URL>'' von sich. Ein aktuelles
|
||||
Beispiel für dieses Repo:
|
||||
\begin{verbatim}
|
||||
git remote set-url origin opengit@opengit.hauke-zuehl.de: \
|
||||
hauke/Git-Einfuehrung.git
|
||||
\end{verbatim}
|
||||
|
||||
\section{Zweige miteinander vergleichen}
|
||||
``git diff'' in einem Zweig anzuwenden, um Unterschiede anzeigen zu
|
||||
lassen, ist für Dich ein Kiderspiel, aber nehmen wir mal an, du bist
|
||||
im Zweig ``develop'' und willst die Änderungen gegenüber den Masterzweig
|
||||
wissen. Dann gibst du einfach mal ``git diff master'' ein.
|
||||
Das geht natürlich mit jedem anderen Zweig dieses Repositories, den du
|
||||
einmal ausgecheckt (und nicht gelöscht) hast.
|
||||
|
||||
\chapter{GIT in IDEs}
|
||||
Die meisten IDEs bringen inzwischen Unterst"utzung f"ur GIT mit.\\
|
||||
|
||||
|
11
README.md
11
README.md
@ -3,3 +3,14 @@
|
||||
Eine einfache Einführung, simpel erklärt, in das Versionskontrollsystem
|
||||
GIT.
|
||||
|
||||
## Dokumentation selbst erstellen
|
||||
|
||||
Du kannst die Dokumentation selbst per Hand erstellen.
|
||||
Dazu benötigst du die Pakete "texlive-extra-utils" und "texlive-lang-german".
|
||||
|
||||
Dann kannst du mit Hilfe von "pdflatex Git.tex" eine PDF-Datei
|
||||
erstellen.
|
||||
|
||||
Hinweis:
|
||||
Um das Inhaltsverzeichnis zu erstellen, musst du pdflatex zwei Mal
|
||||
durchlaufen lassen!
|
||||
|
Loading…
Reference in New Issue
Block a user