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