Merge branch 'develop'
This commit is contained in:
		
						commit
						e23273f841
					
				
							
								
								
									
										180
									
								
								Git.tex
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								Git.tex
									
									
									
									
									
								
							@ -15,6 +15,9 @@
 | 
				
			|||||||
\usepackage{times}                      % Times-Schriftart (pdf)
 | 
					\usepackage{times}                      % Times-Schriftart (pdf)
 | 
				
			||||||
\usepackage{calc}
 | 
					\usepackage{calc}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\setcounter{secnumdepth}{4}
 | 
				
			||||||
 | 
					\setcounter{tocdepth}{4}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\begin{document}
 | 
					\begin{document}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\title{GIT - Eine Einf"uhrung}
 | 
					\title{GIT - Eine Einf"uhrung}
 | 
				
			||||||
@ -388,7 +391,134 @@ Als GIT-Serversoftware empfehle ich an dieser Stelle gogs\footnote{https://gogs.
 | 
				
			|||||||
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 gogs 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
 | 
				
			||||||
 | 
					alles so d"urfen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\subsection{gogs}
 | 
				
			||||||
 | 
					Gogs 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
 | 
				
			||||||
 | 
					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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\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.
 | 
				
			||||||
 | 
					\\
 | 
				
			||||||
 | 
					\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
 | 
				
			||||||
 | 
					MariaDB-Kommandozeile ausf"uhren:
 | 
				
			||||||
 | 
					\begin{verbatim}
 | 
				
			||||||
 | 
					set global innodb_large_prefix=on;
 | 
				
			||||||
 | 
					set global innodb_file_format=Barracuda;
 | 
				
			||||||
 | 
					\end{verbatim}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\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
 | 
				
			||||||
 | 
					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.\\
 | 
				
			||||||
 | 
					Nat"urlich solltest du die Dateien entsprechend f"ur dein System anpassen, sonst stimmen
 | 
				
			||||||
 | 
					die Pfade unter Umst"anden nicht.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\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
 | 
				
			||||||
 | 
					RUN_USER = git
 | 
				
			||||||
 | 
					RUN_MODE = prod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[repository]
 | 
				
			||||||
 | 
					ROOT = /home/git/repositories
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[database]
 | 
				
			||||||
 | 
					DB_TYPE  = postgres
 | 
				
			||||||
 | 
					HOST     = 127.0.0.1:5432
 | 
				
			||||||
 | 
					NAME     = gogs
 | 
				
			||||||
 | 
					USER     = gogs
 | 
				
			||||||
 | 
					PASSWD   = GEHEIM
 | 
				
			||||||
 | 
					SSL_MODE = disable
 | 
				
			||||||
 | 
					PATH     = data/gogs.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[server]
 | 
				
			||||||
 | 
					DOMAIN           = git.hauke-zuehl.de
 | 
				
			||||||
 | 
					HTTP_PORT        = 3000
 | 
				
			||||||
 | 
					ROOT_URL         = https://git.hauke-zuehl.de/
 | 
				
			||||||
 | 
					DISABLE_SSH      = false
 | 
				
			||||||
 | 
					SSH_PORT         = 22
 | 
				
			||||||
 | 
					START_SSH_SERVER = false
 | 
				
			||||||
 | 
					OFFLINE_MODE     = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[mailer]
 | 
				
			||||||
 | 
					ENABLED = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[service]
 | 
				
			||||||
 | 
					REGISTER_EMAIL_CONFIRM = true
 | 
				
			||||||
 | 
					ENABLE_NOTIFY_MAIL     = true
 | 
				
			||||||
 | 
					DISABLE_REGISTRATION   = true
 | 
				
			||||||
 | 
					ENABLE_CAPTCHA         = true
 | 
				
			||||||
 | 
					REQUIRE_SIGNIN_VIEW    = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[picture]
 | 
				
			||||||
 | 
					DISABLE_GRAVATAR        = false
 | 
				
			||||||
 | 
					ENABLE_FEDERATED_AVATAR = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[session]
 | 
				
			||||||
 | 
					PROVIDER = file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[log]
 | 
				
			||||||
 | 
					MODE      = file
 | 
				
			||||||
 | 
					LEVEL     = Info
 | 
				
			||||||
 | 
					ROOT_PATH = /home/git/gogs/log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[security]
 | 
				
			||||||
 | 
					INSTALL_LOCK = true
 | 
				
			||||||
 | 
					\end{verbatim}
 | 
				
			||||||
 | 
					Bitte daran denken, dass diese Datei als Eigent"umer den Benutzer ``git'' haben muss!
 | 
				
			||||||
 | 
					Wenn du aber bei der Installation oben alles korrekt eingetragen hast, sollte
 | 
				
			||||||
 | 
					es keine Probleme geben.\\
 | 
				
			||||||
 | 
					In diesem Beispiel habe ich "ubrigens PostgreSQL als Datenbanksystem verwendet, du
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					deinem Webbrowser die URL ``http://localhost:3000'' ein.\\
 | 
				
			||||||
 | 
					Du wirst nun durch die Konfiguration der Datenbank und von gogs 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
 | 
				
			||||||
 | 
					``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
 | 
				
			||||||
 | 
					anlegen, sonst kracht es bei der Einrichtung der Tabellen.\\
 | 
				
			||||||
 | 
					Hast du soweit alles eingetragen, kannst du dich anmelden und deine Projekte mit gogs
 | 
				
			||||||
 | 
					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.!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\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
 | 
				
			||||||
@ -397,6 +527,9 @@ Dann legst du als Benutzer ``root'' einen Benutzer ``git'' an. Hast du das erled
 | 
				
			|||||||
du zum Benutzer ``git'' und legst ein Verzeichnis ``.ssh'' im Benutzerverzeichnis von ``git''
 | 
					du zum Benutzer ``git'' und legst ein Verzeichnis ``.ssh'' im Benutzerverzeichnis von ``git''
 | 
				
			||||||
an. In das Verzeichnis ``.ssh'' kommen in die Datei ``authorized\_keys'' die "offentlichen
 | 
					an. In das Verzeichnis ``.ssh'' kommen in die Datei ``authorized\_keys'' die "offentlichen
 | 
				
			||||||
SSH-Schl"ussel der Benutzer, die git benutzen d"urfen.\\
 | 
					SSH-Schl"ussel der Benutzer, die git benutzen d"urfen.\\
 | 
				
			||||||
 | 
					Warum wird das mit den Schl"usseln gemacht?\\
 | 
				
			||||||
 | 
					Ganz einfach: Ansonsten m"usstest du jedem Teammitglied das Passwort des Benutzers ``git''
 | 
				
			||||||
 | 
					verraten und das willst du wirklich nicht!\\
 | 
				
			||||||
Also:
 | 
					Also:
 | 
				
			||||||
\begin{verbatim}
 | 
					\begin{verbatim}
 | 
				
			||||||
sudo adduser git
 | 
					sudo adduser git
 | 
				
			||||||
@ -434,7 +567,8 @@ dicken Server, der irgendwo in einem Rechenzentrum in Deutschland steht.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
\chapter{Projekt ``Welt'' auf den Server bringen}
 | 
					\chapter{Projekt ``Welt'' auf den Server bringen}
 | 
				
			||||||
Nachdem du also einen GIT-Server irgendwie ans Laufen gebracht hast, oder du dich bei GitHub
 | 
					Nachdem du also einen GIT-Server irgendwie ans Laufen gebracht hast, oder du dich bei GitHub
 | 
				
			||||||
angemeldet hast, soll das ``Welt''-Projekt nun auf den entfernten Server gebracht werden.
 | 
					angemeldet hast, deinen "offentlichen SSH-Schl"ussel auf den Server geladen hast, soll das
 | 
				
			||||||
 | 
					``Welt''-Projekt nun auf den entfernten Server gebracht werden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Ob dein GIT-Server nun auf deinem Raspberry oder auf deinem lokalen Server l"auft, der Unterschied
 | 
					Ob dein GIT-Server nun auf deinem Raspberry oder auf deinem lokalen Server l"auft, der Unterschied
 | 
				
			||||||
liegt in der Benennung des Rechners. Ich erkl"are dir die folgenden Schritte unter der Annahme,
 | 
					liegt in der Benennung des Rechners. Ich erkl"are dir die folgenden Schritte unter der Annahme,
 | 
				
			||||||
@ -502,7 +636,7 @@ unterworfen sind. Dies sind meistens
 | 
				
			|||||||
\item testing
 | 
					\item testing
 | 
				
			||||||
\end{itemize}
 | 
					\end{itemize}
 | 
				
			||||||
Um deine Arbeitskopie zu aktualisieren, wechselst du in den entsprechenden
 | 
					Um deine Arbeitskopie zu aktualisieren, wechselst du in den entsprechenden
 | 
				
			||||||
Zwei (zum Beispiel ``develop'') und f"uhrst dort \textit{git pull} aus.\\
 | 
					Zweig (zum Beispiel ``develop'') und f"uhrst dort \textit{git pull} aus.\\
 | 
				
			||||||
Damit werden die "Anderungen vom Server heruntergeladen und in deinen Zweig
 | 
					Damit werden die "Anderungen vom Server heruntergeladen und in deinen Zweig
 | 
				
			||||||
eingepflegt.\\
 | 
					eingepflegt.\\
 | 
				
			||||||
\\
 | 
					\\
 | 
				
			||||||
@ -593,6 +727,46 @@ ein sch"ones Log auf den Bildschirm. Und wenn du die Kurzform
 | 
				
			|||||||
der Commits haben willst, dann bringt dich
 | 
					der Commits haben willst, dann bringt dich
 | 
				
			||||||
\textit{git log --abbrev-commit --graph} ans Ziel.
 | 
					\textit{git log --abbrev-commit --graph} ans Ziel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\chapter{GIT in IDEs}
 | 
				
			||||||
 | 
					Die meisten IDEs bringen inzwischen Unterst"utzung f"ur GIT mit.\\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\section{NetBeans}
 | 
				
			||||||
 | 
					NetBeans ist eine recht verbreitete IDE, die kostenlos f"ur diverse
 | 
				
			||||||
 | 
					Plattformen angeboten wird.\\
 | 
				
			||||||
 | 
					Die Verbindung von NetBeans zu GIT kann "uber ein Plugin ggf.
 | 
				
			||||||
 | 
					nachinstalliert werden.\\
 | 
				
			||||||
 | 
					Startet man NetBeans, hat man unter Team->Git die M"oglichkeit,
 | 
				
			||||||
 | 
					GIT-Repos zu verwenden.\\
 | 
				
			||||||
 | 
					Als Beispiel verwende ich nun das Repository unter
 | 
				
			||||||
 | 
					https://github.com/hauke68/LibTgBotPP, das jedoch das C-/C++-Plugin
 | 
				
			||||||
 | 
					voraussetzt.\\
 | 
				
			||||||
 | 
					Um dies anonym auszuchecken und in ein NetzBeans-Projekt zu packen,
 | 
				
			||||||
 | 
					geht man wie folgt vor:\\
 | 
				
			||||||
 | 
					Unter Team->Git->Clone wird die obige URL eingetragen. Benutzer
 | 
				
			||||||
 | 
					und Passwort bleiben leer. Im n"achsten Schritt kann man die
 | 
				
			||||||
 | 
					Zweige ausw"ahlen, die ausgecheckt werden sollen. Ich empfehle,
 | 
				
			||||||
 | 
					erst einmal alle auszuchecken. Im dritten Schritt lassen wir alles
 | 
				
			||||||
 | 
					so, wie es ist.\\
 | 
				
			||||||
 | 
					Ist alles ordnugsgem"a"s ausgecheckt, sollten wir im Git Repository
 | 
				
			||||||
 | 
					Browser bereits das GIT-Repo sehen. Nun fehlt noch das NetBeans-Projekt.\\
 | 
				
			||||||
 | 
					Dazu auf File->New Project klicken und ein neues C-/C++-Projekt anlegen.
 | 
				
			||||||
 | 
					Dabei darauf achten, dass im Fenster ``Projects'' ``C/C++ Project with
 | 
				
			||||||
 | 
					existing sources'' ausgew"ahlt ist. Im zweiten Schritt w"ahlen wir
 | 
				
			||||||
 | 
					das Verzeichnis aus, in dem die Quellen des Repos sind. Das ist nat"urlich
 | 
				
			||||||
 | 
					das vorhin erzeugte Verzeichnis vom GIT-Repo.\\
 | 
				
			||||||
 | 
					Da das hier nur ein Beispiel ist, w"ahlen wir als Configuration Mode
 | 
				
			||||||
 | 
					``custom'' aus. Jetzt nur noch auf ``Next'' klciken, bis nur noch
 | 
				
			||||||
 | 
					``Finish'' m"oglich ist. Voila, das NetBeans-Projekt existiert und
 | 
				
			||||||
 | 
					man kann auch GIT als Versionskontrollsystem verwenden.\\
 | 
				
			||||||
 | 
					Wenn du nun eine Datei l"adst, "anderst und speicherst, kannst du
 | 
				
			||||||
 | 
					unter ``Team'' sehen, dass es mehr Auswahlm"oglichkeiten in Bezug
 | 
				
			||||||
 | 
					auf GIT gibt.\\
 | 
				
			||||||
 | 
					Spiele hier einfach mal ein wenig rum. Da du das Repo anonym
 | 
				
			||||||
 | 
					ausgecheckt hast, kannst du nichts kaputt machen. Etwas anderes
 | 
				
			||||||
 | 
					w"are es nat"urlich, wenn du unser Einstiegsprojekt ``Welt'' mit
 | 
				
			||||||
 | 
					Hilfe von NetBeans bearbeiten willst. Ich wei"s aber nicht, in
 | 
				
			||||||
 | 
					welche Kategorie dieses ``Projekt'' f"allt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\chapter{Zum Ende noch ein paar Ideen und Worte}
 | 
					\chapter{Zum Ende noch ein paar Ideen und Worte}
 | 
				
			||||||
Zum Ende hin noch ein paar Anregungen bzgl. der Einsatzzwecke
 | 
					Zum Ende hin noch ein paar Anregungen bzgl. der Einsatzzwecke
 | 
				
			||||||
von GIT.\\
 | 
					von GIT.\\
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user