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
 | 
					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
 | 
					Gigabitinterfaces, da kann man schon mal gut was "uber die Leitung jagen (wobei des Raspberries
 | 
				
			||||||
Interface langsamer ist).\\
 | 
					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
 | 
					Wenn du dich damit besch"aftigen willst, solltest du aber "uber gute Linuxkenntnisse
 | 
				
			||||||
verf"ugen.\\
 | 
					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
 | 
					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.
 | 
					alles so d"urfen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\subsection{gogs}
 | 
					\subsection{gitea}
 | 
				
			||||||
Gogs ist ein kleines, aber feines Projekt, das ein Webfrontend f"ur einen git-Server bereitstellt.
 | 
					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.
 | 
					Es ist in der Programmiersprache go geschrieben und ben"otigt nur minimale Resourcen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\subsubsection{Vorbereiten der Datenbank}
 | 
					\subsubsection{Vorbereiten der Datenbank}
 | 
				
			||||||
Bevor du dir gogs herunterl"adst und installierst, solltest du das Datenbanksystem
 | 
					Bevor du dir gitea herunterl"adst und installierst, solltest du das Datenbanksystem
 | 
				
			||||||
ausw"ahlen, das gogs sp"ater benutzen soll. Du kannst zwischen MariaDB/MySQL und PostgreSQL
 | 
					ausw"ahlen, das gitea 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
 | 
					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
 | 
					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!\\
 | 
					tats"achlich auf dem Netzwerkinterface horcht, das du bei der Installation angibst!\\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\paragraph{PostgreSQL}
 | 
					\paragraph{PostgreSQL}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Am einfachsten loggst du dich per ``sudo su - postgres'' als Benutzer postgres in deiner
 | 
					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
 | 
					Shell auf deinem GIT-Server ein, dann erzeugst du per ``createuser -P -d gitea'' einen Benutzer
 | 
				
			||||||
f"ur die Datenbank ``gogs''.\\
 | 
					f"ur die Datenbank ``gitea''.\\
 | 
				
			||||||
Im n"achsten Schritt loggst du dich auf der Shell per ``psql -h localhost template1 gogs''
 | 
					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 gogs;'', um die Datenbank
 | 
					in das Datenbanksystem ein. Hier reicht nun ein ``CREATE DATABASE gitea;'', um die Datenbank
 | 
				
			||||||
f"ur gogs anzulegen.
 | 
					f"ur gitea anzulegen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\paragraph{MariaDB/MySQL}
 | 
					\paragraph{MariaDB/MySQL}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Du loggst dich mit dem administrativen Benutzer in MariaDB/MySQL, den du bei der Installation
 | 
					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''
 | 
					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
 | 
					(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
 | 
					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 gogs''
 | 
					'geheimes passwort';''. Dann loggst du dich aus, loggst dich per ``mysql -p -u gitea''
 | 
				
			||||||
wieder ein und f"uhrst ein ``CREATE DATABASE gogs CHARACTER SET utf8mb4;'' aus,
 | 
					wieder ein und f"uhrst ein ``CREATE DATABASE gitea CHARACTER SET utf8mb4;'' aus,
 | 
				
			||||||
um die Datenbank f"ur gogs anzulegen.
 | 
					um die Datenbank f"ur gitea anzulegen.
 | 
				
			||||||
\\
 | 
					\\
 | 
				
			||||||
\textbf{Hinweis:} Sollte bei Benutzung von MariaDB w"ahrend der Installation im
 | 
					\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
 | 
					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}
 | 
					\subsubsection{Installation}
 | 
				
			||||||
Bevor du dir gleich die Software runterl"adst, lege bitte einen Benutzer ``git'' auf deinem
 | 
					Bevor du dir gleich die Software runterl"adst, lege bitte einen Benutzer ``git'' auf deinem
 | 
				
			||||||
Server an, sofern der Benutzer noch nicht existiert.\\
 | 
					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
 | 
					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).\\
 | 
					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
 | 
					Um gitea beim Systemstart zu starten, benötigst du die passenden Skripte.\\
 | 
				
			||||||
automatisch zu starten. Das geht zum Beispiel via init oder systemd.\\
 | 
					 | 
				
			||||||
Nat"urlich solltest du die Dateien entsprechend f"ur dein System anpassen, sonst stimmen
 | 
					Nat"urlich solltest du die Dateien entsprechend f"ur dein System anpassen, sonst stimmen
 | 
				
			||||||
die Pfade unter Umst"anden nicht.
 | 
					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}
 | 
					\subsubsection{Konfigurationsdatei}
 | 
				
			||||||
Um sp"ater noch ein wenig Feintuning vorzunehmen, kann man im Verzeichnis ``custom/conf''
 | 
					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.\\
 | 
					die Datei ``app.ini'' "andern, die bei der Installation automatisch angelegt wird.\\
 | 
				
			||||||
Ein Beispiel f"ur eine app.ini:
 | 
					Ein Beispiel f"ur eine app.ini:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\begin{verbatim}
 | 
					\begin{verbatim}
 | 
				
			||||||
APP_NAME = Gogs
 | 
					APP_NAME = Gitea
 | 
				
			||||||
RUN_USER = git
 | 
					RUN_USER = git
 | 
				
			||||||
RUN_MODE = prod
 | 
					RUN_MODE = prod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -460,11 +637,11 @@ ROOT = /home/git/repositories
 | 
				
			|||||||
[database]
 | 
					[database]
 | 
				
			||||||
DB_TYPE  = postgres
 | 
					DB_TYPE  = postgres
 | 
				
			||||||
HOST     = 127.0.0.1:5432
 | 
					HOST     = 127.0.0.1:5432
 | 
				
			||||||
NAME     = gogs
 | 
					NAME     = gitea
 | 
				
			||||||
USER     = gogs
 | 
					USER     = gitea
 | 
				
			||||||
PASSWD   = GEHEIM
 | 
					PASSWD   = GEHEIM
 | 
				
			||||||
SSL_MODE = disable
 | 
					SSL_MODE = disable
 | 
				
			||||||
PATH     = data/gogs.db
 | 
					PATH     = data/gitea.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[server]
 | 
					[server]
 | 
				
			||||||
DOMAIN           = git.hauke-zuehl.de
 | 
					DOMAIN           = git.hauke-zuehl.de
 | 
				
			||||||
@ -495,7 +672,7 @@ PROVIDER = file
 | 
				
			|||||||
[log]
 | 
					[log]
 | 
				
			||||||
MODE      = file
 | 
					MODE      = file
 | 
				
			||||||
LEVEL     = Info
 | 
					LEVEL     = Info
 | 
				
			||||||
ROOT_PATH = /home/git/gogs/log
 | 
					ROOT_PATH = /home/git/gitea/log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[security]
 | 
					[security]
 | 
				
			||||||
INSTALL_LOCK = true
 | 
					INSTALL_LOCK = true
 | 
				
			||||||
@ -508,20 +685,29 @@ kannst aber gerne MariaDB oder MySQL verwenden.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
\subsubsection{Der erste Start}
 | 
					\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.\\
 | 
					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
 | 
					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
 | 
					``pi.deinzuhause.net'' dann gibst du eben diesen Namen bei der Domain und der Application
 | 
				
			||||||
URL ein.\\
 | 
					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.\\
 | 
					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.\\
 | 
					verwalten.\\
 | 
				
			||||||
Der erste Benutzer, der sich registriert bei gogs, wird "ubrigens als Administrator
 | 
					Der erste Benutzer, der sich registriert bei gitea, wird "ubrigens als Administrator
 | 
				
			||||||
angelegt, also Obacht! Von nun kannst du gogs in aller Ruhe erforschen und
 | 
					angelegt, also Obacht! Von nun kannst du gitea in aller Ruhe erforschen und
 | 
				
			||||||
eigene Repositores anlegen, Organiosationen und Teams erzeugen, usw.!
 | 
					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}
 | 
					\section{GIT from scratch}
 | 
				
			||||||
Ich habe keine bessere "Uberschrift gefunden, aber wenn du keine Lust auf GitHub oder gogs oder
 | 
					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!\\
 | 
					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
 | 
					und nat"urlich daraus schliessen, dass man diese auch ins Repo
 | 
				
			||||||
aufnehmen will:
 | 
					aufnehmen will:
 | 
				
			||||||
\begin{verbatim}
 | 
					\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
 | 
					und nach in die .gitignore aufgenommen werden, wobei nat"urlich
 | 
				
			||||||
auch Wildcards verwendet werden k"onnen.
 | 
					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}
 | 
					\chapter{GIT in IDEs}
 | 
				
			||||||
Die meisten IDEs bringen inzwischen Unterst"utzung f"ur GIT mit.\\
 | 
					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
 | 
					Eine einfache Einführung, simpel erklärt, in das Versionskontrollsystem
 | 
				
			||||||
GIT.
 | 
					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