<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Repo Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/repo/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/repo/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Sun, 16 Apr 2023 08:58:53 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Repo Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/repo/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Apache Maven &#8211; Projekte inklusive Abhängigkeiten mühelos verwalten</title>
		<link>https://ceosbay.com/2022/12/22/erklaerung-maven/</link>
					<comments>https://ceosbay.com/2022/12/22/erklaerung-maven/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 22 Dec 2022 05:53:15 +0000</pubDate>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[1]]></category>
		<category><![CDATA[4]]></category>
		<category><![CDATA[Abhängigkeiten]]></category>
		<category><![CDATA[Artifact]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Central]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Dependency]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Don&#039;t repeat yourself]]></category>
		<category><![CDATA[DRY]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[installieren]]></category>
		<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JFrog]]></category>
		<category><![CDATA[Klasse]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Kompilieren]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Konvention]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Over]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[Paket]]></category>
		<category><![CDATA[pom]]></category>
		<category><![CDATA[Programmierer]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Repo]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[verifizieren]]></category>
		<category><![CDATA[verify]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1025</guid>

					<description><![CDATA[<p>Maven ist ein Open Source Build-Tool der Apache Software Foundation für die Projektverwaltung. Man kann damit Java-Projekte automatisieren. Es wurde für die Java-Programmierplattform entwickelt und ist in integrierten Entwicklungsumgebungen für Java, beispielsweise in Apache NetBeans, &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/22/erklaerung-maven/">Apache Maven &#8211; Projekte inklusive Abhängigkeiten mühelos verwalten</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Maven ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> Build-Tool der Apache Software Foundation für die Projektverwaltung. Man kann damit Java-Projekte automatisieren. Es wurde für die Java-Programmierplattform entwickelt und ist in integrierten Entwicklungsumgebungen für Java, beispielsweise in Apache NetBeans, Eclipse, IntelliJ IDEA bereits implementiert, sodass oftmals keine separate Installation notwendig ist. und es ist aus einem Teil des Jakarta-Projekts hervorgegangen. Über die genannten IDE’s (Entwicklungsumgebungen) werde ich in zukünftigen Beiträgen schreiben.</p>



<p>Maven vereinfacht den Softwareerstellungsprozess, bietet ein einheitliches System für die Entwicklerarbeit, hochwertige Projektinformationen, Richtlinien für das Festlegen von Best Practices und erleichtert die Migration zu neuen Funktionen durch mehr Transparenz. Es beschreibt sowohl, wie Software gebaut wird, als auch deren Abhängigkeiten. Apache hilft sowohl bei der Verwaltung von Projekten und dient als Tool zum Verständnis. Es hilft also dabei, den Zustand eines Projekts zu organisieren und relativ schnell darzustellen.</p>



<p>Primär wird das Programm von Entwicklern und Projektmanagern bei Java-Anwendungsprojekten verwendet. Das Tool kann nützlich sein, um den Zustand eines Projektes auf einem Blick für technisch weniger versierte Personen, wie Führungspersönlichkeiten und Investoren, zusammenzufassen und gleichzeitig, um einige Prozesse bei der Softwareentwicklung zu automatisieren.</p>



<p>Maven basiert auf dem Objektmodell. Projekte werden als eine Pom.xml-Datei gespeichert. Das Tool verwaltet Projekt-Builds, Reportings und Dokumentationen aus einer zentralen XML-Informationsbasis. Mit der Standard-Plug-in-Architektur kann man es über den Standard-Input mit so gut wie jeder Anwendung nutzen und kollaborieren. Es vereinfacht den Prozess für das Erstellen von Java-Anwendungen erheblich, sodass der Nutzer den Status des Projektes viel einfacher einschätzen kann.</p>



<p>Der Name Maven kommt aus dem Jiddischen und bedeutet so viel wie „Sammler des Wissens“.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>Maven entstand in der Apache Software Foundation aus Frust über den Build-Prozess von Turbine. Es wurde bald zum Top-Level-Projekt aufgrund der Notwendigkeit, die Builds der vielen unterschiedlichen Projekte der Apache Software Foundation möglichst zu vereinheitlichen und somit auch zu vereinfachen.</p>



<p>Durch die vereinheitlichten Strukturen konnten Mitglieder unterschiedlicher Entwicklungsteams zwischen den einzelnen Teilprojekten wechseln und produktivere Arbeitsergebnisse erzielen. Dank der projektübergreifenden Standardisierung war es nicht mehr notwendig, sich in komplizierte Prozesse einzuarbeiten, um das Projekt ausführen und testen zu können.</p>



<p>Die Entwicklung von Maven 1 wurde im Jahr 2003 begonnen und am 13. Juli 2004 als Version 1.0 veröffentlicht. Die Umsetzung wurde jedoch sehr schnell realisiert, sodass einige Eigenheiten nicht bedacht wurden. Beispielsweise gab es Probleme bei der Performance sowie einen Überschuss an Konfigurationsdateien und -angaben, die es zu beherrschen galt. 2014 wurde das End of Life (EoL) von Maven 1 verkündet. Die letzte veröffentlichte Version ist 1.1 vom 25. Juni 2007.</p>



<p>Im Jahr 2005 wurde parallel damit begonnen, Maven 2 zu entwickeln, welches mit Version 2.0 am 19. Oktober 2005 fertiggestellt wurde. Mit dem Major-Release 2 wurde Maven von Grund auf überarbeitet und bekannte Probleme aus der Vorgängerversion wurden behoben. Aus diesem Grund sind Maven 1 und Maven 2 untereinander inkompatibel. Am 18. Februar 2014 wurde das End of Life von Maven 2 kommuniziert. Die letzte veröffentlichte Version ist 2.2.1 aus November 2009.</p>



<p>Die Entwicklung von Maven 3 begann im Jahr 2008, bei der man sich insbesondere auf die Kompatibilität zwischen Maven 2 und 3 konzentrierte.</p>



<p>In der zweiten Hälfte des Jahres 2021 wurden die Arbeiten an Maven 4 begonnen. Eine wesentliche Verbesserung ist die stark optimierte Unterstützung von Multi-Modul-Projekten.</p>



<h3 class="wp-block-heading">Wie funktioniert Maven?</h3>



<p>Maven benötigt zur Ausführung eine Java virtuelle Maschine (JVM) und ist aufgrund dieses Umstandes plattformunabhängig. Aus diesem Grund kann es auf jedem Betriebssystem ausgeführt werden, für das eine Java VM verfügbar ist.</p>



<p>Der Kern von Maven ist mit wenigen Megabyte als Paket kompakt gehalten. Die interne Struktur ist modular aufgebaut. Sämtliche Funktionen werden über Erweiterungen, sogenannte Plugins, bei der erstmaligen Verwendung über ein öffentliches im Internet verfügbares Repository, Maven Central genannt, nachgeladen und in einem lokalen Repository abgelegt.</p>



<p>Maven ist deklarativ und basiert auf zwei wesentlichen Paradigmen. Zum einen auf „Don’t Repeat Yourself“ (DRY bzw. Wiederhole dich nicht selbst) bedeutet sinngemäß im Kontext von Maven, dass man nicht bei jedem Projekt dieselben Build-Schritte neu definiert muss. Und auf „Convention over Configuration“ (CoC bzw. Konvention vor Konfiguration). Dies bezieht sich auf die Konfigurationsdatei (POM), mit denen Maven-Projekte beschrieben werden. Durch festgelegte Konventionen haben möglichst viele Konfigurationseinträge gemeingültige Vorbelegungen (Default-Werte), die für die meisten Anwendungsfälle bereits die erwünschten Ergebnisse produzieren.</p>



<p>Maven folgt den beiden beschriebenen Paradigmen über den gesamten Zyklus der Softwareerstellung konsequent. Eine wichtige Voraussetzung für eine erfolgreiche Automatisierung der einzelnen Schritte des Softwareerstellungsprozesses sind strikte Vereinheitlichungen, wie sie durch die beiden Paradigmen DRY und CoC geschaffen werden.</p>



<p>Obwohl Maven bereits sehr viele Vorgaben liefert, können Projekte diese Vorgaben an ihre tatsächlichen Bedürfnisse anpassen. Sowohl für künftige neuere Versionen von Maven als auch bei der Anbindung von Drittanbieterprodukten ist es eine bewährte Praxis, möglichst nahe am Maven-Standard zu bleiben.</p>



<h3 class="wp-block-heading">Wichtige Begriffe bei der Arbeit mit Maven</h3>



<p>Im Zusammenhang mit Maven werden wichtige Begriffe verwendet, mit denen man vertraut sein sollte, um effektiv damit zu arbeiten:</p>



<ul class="wp-block-list">
<li><strong>Artifacts</strong> (Artefakte) Diese werden in Maven sowohl Plugins als auch Abhängigkeiten zu externen Programmbibliotheken und die selbst erstellten binären Programmdateien des eigenen Softwareprojektes bezeichnet.</li>



<li><strong>Lifecycles</strong> (Lebenszyklen) Dies kann auch als Workflow oder Prozess verstanden werden. Maven kennt drei Lifecycles: „clean“, „site“ und „build“.</li>



<li><strong>Phases</strong> (Phasen) In diesen werden die einzelnen Schritte innerhalb eines „Lifecycles“ bezeichnet, die in festgelegter linearer Reihenfolge durchlaufen werden. Der Build-Lifecycle Default kennt 23 Schritte.</li>



<li><strong>Goals</strong> (Ziele) Sind einzelne Aktionen bzw. Funktionalitäten, die in einem Plugin bereitgestellt werden.</li>



<li><strong>Archetypes</strong> (Archetypen) In diesen können Gerüste für unterschiedlichste Arten von Softwareprojekten erstellt werden, deren Struktur dem Standard von Maven entspricht. Was auch als ein wesentliches Merkmal von Maven-Projekten ist. Die einheitliche Verzeichnisstruktur, auf die ich nachfolgend eingehen werde.</li>
</ul>



<h3 class="wp-block-heading">Verzeichnisstruktur</h3>



<p>my-project/ – Wurzelverzeichnis</p>



<p>pom.xml – Projektbeschreibung (Build-Logik)</p>



<p>src/ – alle Eingabedateien</p>



<p>main/ – Eingabedateien für die Erstellung des eigentlichen Produkts</p>



<p>java/ – Java-Quelltext-Dateien</p>



<p>resources/ – Projektdateien, die kein Java-Quellcode sind, aber für die Übersetzung oder zur Laufzeit benötigt werden, z. B. Bilder, <a href="https://ceosbay.com/2022/10/29/structured-query-language-sql/">SQL</a>, Java-Properties-Dateien etc.</p>



<p>test/ – Eingabedateien, die für automatisierte Testläufe benötigt werden</p>



<p>java/ – Testfälle, die als Java-Quellcode vorliegen, z. B. JUnit-Testfälle</p>



<p>resources/ – Zusätzliche Ressourcen für Testfälle</p>



<p>target/ – Alle durch Maven während des Build-Vorgangs erstellten Dateien</p>



<p>classes/ – kompilierte Java-Klassen</p>



<h3 class="wp-block-heading">Die Konfigurationsdatei &#8222;pom.xml&#8220;</h3>



<p>Die Konfigurationsdatei für Maven-Projekte hat die offizielle Bezeichnung &#8222;Project Object Model (POM)&#8220;und ist als pom.xml im Wurzelverzeichnis des Projektes abgelegt. Im Kontext des Build-Managements ist die pom.xml die Build-Logik, die von externen Werkzeugen wie dem Automatisierungsserver Jenkins aufgerufen wird. <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/" target="_blank" rel="noreferrer noopener">Über Jenkins habe ich bereits geschrieben.</a></p>



<p>Die zwingenden Basisangaben für ein Projekt innerhalb einer POM sind die sogenannten GAV-Parameter, zuzüglich des Packagetyps. GAV steht für (G) = GroupID, (A) = ArtifactId und (V) = Version. Die GAV-Koordinaten müssen für jedes Projekt eindeutig sein und dürfen nicht mehrfach Verwendung finden.</p>



<h3 class="wp-block-heading">Abhängigkeiten bzw. (Dependency Management)</h3>



<p>Einer der wichtigsten Faktoren für den Erfolg von Maven ist der einfache Umgang mit fremden Abhängigkeiten, sogenannten 3rd Party Libraries. Externe Abhängigkeiten werden in der pom.xml notiert und über ihre GAV-Koordinaten eindeutig und transitiv aufgelöst. Die definierten Abhängigkeiten werden nicht physisch in die Versionsverwaltung mit aufgenommen, sondern während des Buildvorgangs im Projekt-Ausgabeverzeichnis target bereitgestellt.</p>



<p>Bei der Verwendung eines Artefaktes prüft Maven, ob es bereits lokal im Repository vorhanden ist. Das lokale Repository ist ein verstecktes Verzeichnis mit der Bezeichnung .m2/repository und findet sich im home-Verzeichnis des am Betriebssystem angemeldeten Nutzers.</p>



<p>Wird von Maven das angeforderte Artefakt im lokalen Repository nicht gefunden, wird in einem öffentlichen Remote-Repository danach gesucht. Bei erfolgreicher Suche wird das Artefakt im lokalen Repository verfügbar gemacht. Das Wichtigste öffentlich frei verfügbare Repository für Java-Artefakte lautet &#8222;Maven Central&#8220; und wird von dem Unternehmen Sonatype betrieben.</p>



<p>Es besteht die Möglichkeit, einen eigenen Repository-Server zu betreiben, um selbst erstellte Artefakte im Unternehmen bzw. im Intranet für andere Projekte bereitzustellen oder diese über das Internet zur Verfügung zu stellen.</p>



<p>Wichtige Implementierungen zum Hosten eigener Artefakte sind Sonatype Nexus OSS oder JFrog Artifactory, für die es sowohl freie Community Versionen als auch kommerzielle Enterprise-Varianten gibt. Diese Lösungen können neben den verschiedenen Java-Artefakten auch andere Formate wie beispielsweise Docker Images, RubyGems, .NET nuget oder NPM verwalten. Maven Central, das größte Open-Source-Repository, wird mit Nexus OSS betrieben.</p>



<h3 class="wp-block-heading">Maven-Lebenszyklen (Lifecycles)</h3>



<p>Wie bereits vorher erwähnt, kommen in einem Maven Workflow verschiedene Lebenszyklen zum Einsatz. Diese sind:</p>



<ul class="wp-block-list">
<li><strong>clean</strong> (Zum Löschen von Ergebnissen vorheriger Builds, mit den Phasen pre-clean, clean, post-cl</li>



<li><strong>build</strong> (default) (Zum Erstellen eines Projekts im Rahmen der verschiedenen Phasen</li>



<li><strong>site</strong> (Zum Erstellen von Webseiten zur Projektdokumentation und Reports, mit den Phasen pre-site, site, post-site, site-deploy.</li>
</ul>



<p>Maven geht dabei jeweils von einem Zyklus aus, der bei der Softwareerstellung im Allgemeinen durchlaufen wird. Es muss aber nicht jedes Softwareprojekt alle Phasen des im Folgenden verkürzt dargestellten Default-Zyklus verwenden. Die Standardfunktionalität kann durch die Einbindung von zusätzlichen Plug-ins an die entsprechende Phase erweitert werden.</p>



<ul class="wp-block-list">
<li><strong>validate</strong> bzw. validieren (Es wird überprüft, ob die pom.xml und die Projektstrukturen vollständig, valide und gültig sind.</li>



<li><strong>compile</strong> bzw. kompilieren (In dieser Phase wird der Quellcode kompiliert.</li>



<li><strong>test</strong> bzw. testen (Hier wird der kompilierte Code durch das eingebundene Unit-Test-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> (z. B. JUnit, TestNG) getestet. Maven berücksichtigt dabei in späteren Zyklen, dass Testklassen normalerweise nicht in der auszuliefernden Software vorhanden sind.</li>



<li><strong>package</strong> bzw. verpacken (Das Kompilat wird – ggf. mit anderen nicht kompilierbaren Dateien – zur Weitergabe verpackt. Häufig handelt es sich dabei um eine JAR-Datei.</li>



<li><strong>integration-test</strong> bzw. Integrationstests (Bereitstellen der programmatisch erstellten Integrationstests mittels Behavior Driven Development (z. B. Cucumber, jGiven).</li>



<li><strong>verify</strong> bzw. Gültigkeitsprüfung des Softwarepakets (Überprüfung der Artefakte, ob die festgelegten Spezifikationen erfüllt wurden, D.H. die bereitgestellten Integrationstests werden ausgeführt.</li>



<li><strong>install</strong> bzw. das Kopieren in die lokale Maven-Repository (Kopiert das Softwarepaket ins lokale Maven-Repository, um es dann in anderen lokalen Maven-Projekten verwenden zu können. Dies ist insbesondere für modulare Projekte von Bedeutung.</li>



<li><strong>deploy</strong> bzw. anwenden (Lädt das Softwarepaket in ein entferntes Maven-Repository hoch, wonach es auch anderen Entwicklern global zur Verfügung steht.</li>
</ul>



<h3 class="wp-block-heading">Fazit</h3>



<p>Hierbei kann man sich relativ kurzfassen. Ein Software-Projekt sollte stehts mit einem vernünftigen Buildmanagement ausgestattet sein. Das <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Tool bietet sich dabei vor allem bei Java-Projekten an, zumal es selbst auf Java basiert. Es ist ebenso möglich, Maven durch selbst entwickelte Plugins zu erweitern. Aufgrund dieser Eigenschaft wird es auch als Plugin Execution Framework bezeichnet. Man kann damit die Kollaboration bei der Entwicklung durch Programmierer und Projektmanager mit verschiedensten Skill-Sets wesentlich erleichtern bzw. vereinfachen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/22/erklaerung-maven/">Apache Maven &#8211; Projekte inklusive Abhängigkeiten mühelos verwalten</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/22/erklaerung-maven/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1025</post-id>	</item>
		<item>
		<title>GitHub &#8211; Das Zentrum kollaborativer Softwareentwicklung und der Ort, um Code, Ideen und Innovationen zu teilen</title>
		<link>https://ceosbay.com/2022/11/19/erklaerung-github/</link>
					<comments>https://ceosbay.com/2022/11/19/erklaerung-github/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 19 Nov 2022 05:30:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Soziale Medien]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[Apfel]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Cloud Service]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Entwickler]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Repo]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[Smartphone]]></category>
		<category><![CDATA[Syntax]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Versionskontrollsystem]]></category>
		<category><![CDATA[Zusammenarbeit]]></category>
		<category><![CDATA[Zweige]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=563</guid>

					<description><![CDATA[<p>Nachdem ich im gestrigen Beitrag über Git geschrieben habe, widme ich mich heute kurzerhand GitHub. Im Grunde genommen ist es ein Cloud-basierter Dienst, der Entwicklern dabei hilft, Code zu speichern und zu verwalten sowie Änderungen &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/19/erklaerung-github/">GitHub &#8211; Das Zentrum kollaborativer Softwareentwicklung und der Ort, um Code, Ideen und Innovationen zu teilen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Nachdem ich im gestrigen Beitrag über Git geschrieben habe, widme ich mich heute kurzerhand <a href="https://github.com" target="_blank" rel="noreferrer noopener">GitHub</a>. Im Grunde genommen ist es ein Cloud-basierter Dienst, der Entwicklern dabei hilft, Code zu speichern und zu verwalten sowie Änderungen darin zu verfolgen und zu kontrollieren. Im Prinzip macht es ja an sich nicht viel anders als <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git</a> &#8211; Oder?</p>



<p>Da die Programmierung so stark auf einer exakten Syntax beruht, sind die Namenskonventionen für Programmiersprachen und Ressourcen alles andere als intuitiv. Java und JavaScript sind in etwa so eng miteinander verwandt wie Äpfel und Birnen, und das Python-Logo mag zwar ein Bild von ineinander verschlungenen Schlangen sein, aber eigentlich ist es nach &#8222;Monty Python&#8217;s Flying Circus&#8220;, einer BBC-Comedy-Serie aus den 70er Jahren benannt. Aber dies ist nur die Spitze des Eisbergs :). Für jemanden, der zum ersten Mal von Git und GitHub hört, ist die offensichtliche Verbindung vielleicht nicht ganz so offensichtlich.</p>



<p>Ist es nun dasselbe? Wenn nicht, sind sie in irgendeiner Weise miteinander verbunden? Oder ist die Verbindung, wie bei Java und JavaScript, nur oberflächlich?</p>



<p>Dies sind durchaus gerechtfertigte Fragen. Immerhin war Microsoft im Jahr 2018 bereit, 7,5 Milliarden Dollar für die Übernahme auszugeben, sodass Entwickler aller Qualifikationsstufen aufhorchen sollten. Die Wahrheit ist, dass Beiden viel enger miteinander verbunden sind als Java und JavaScript &#8211; aber mit einigen wichtigen Unterschieden, die sie voneinander unterscheiden. Nachdem ich gestern bereits über Git geschrieben habe, hier die Eigenschaften von GitHub.</p>



<h3 class="wp-block-heading">Was ist GitHub?</h3>



<p>In der Diskussion wurde oft der Vergleich gezogen, dass GitHub für <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git</a> das ist, was Facebook für das tatsächliche Gesicht ihrer Nutzer ist. Folglich ist Facebook eine Art Online-Gesichtsdatenbank und GitHub ist als Hosting-Service für Git-Repositories konzipiert.</p>



<h3 class="wp-block-heading">Und was genau ist ein Git-Repository-Hosting-Dienst? </h3>



<p>Es handelt sich um eine Online-Datenbank, mit der Git-Versionskontrollprojekte außerhalb des lokalen Computers/Servers gemeinsam genutzt werden können. Während Git lokal betrieben bzw. selbst gehosted werden muss, ist GitHub ausschließlich Cloud-basiert und ein kostenpflichtiger Dienst (Die grundlegenden Repository-Hosting-Funktionen sind kostenlos verfügbar, wenn man ein Profil erstellt ;). Was GitHub zu einer beliebten Wahl für <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Projekte macht).</p>



<p>Das liegt daran, dass es nicht nur alle Funktionen und Vorteile von Git bietet, sondern auch die Grundfunktionen von Git erweitert. Es bietet eine äußerst intuitive, GUI (Graphical User Interface &#8211; Grafische Benutzeroberfläche) und stellt Programmierern integrierte Kontroll- und Aufgabenverwaltungswerkzeuge zur Verfügung. Zusätzliche Funktionen können über den Marketplace-Dienst implementiert werden. Und da GitHub cloudbasiert ist, kann jede autorisierte Person von jedem Computer oder Smart-Device, ja, auch mit dem Smartphone, überall auf der Welt auf die Git-Repositories zugreifen (Vorausgesetzt, die Person verfügt über eine Internetverbindung).</p>



<p>Man kann darüber den eigenen Code mit anderen teilen und im Zuge der Kollaboration die Möglichkeit nutzen, Überarbeitungen an den verschiedenen Git-Zweigen vorzunehmen. Auf diese Weise können sich ganze Teams in Echtzeit in diversen Projekten abstimmen. Wenn Änderungen vorgenommen werden, werden neue Zweige erstellt, so dass das Team den Code weiter überarbeiten kann, ohne die Arbeit der anderen zu überschreiben. Diese Zweige sind wie Kopien, und die darin vorgenommenen Änderungen werden nicht in den Hauptverzeichnissen auf den Rechnern der anderen Benutzer wiedergegeben, es sei denn, die Benutzer entscheiden sich dafür, die Änderungen zu pushen (schieben) oder zu pullen (ziehen), um sie zu übernehmen. Es gibt auch eine Desktop-Anwendung, die einige zusätzliche Funktionen für erfahrene Entwickler bietet. </p>



<p>Es gibt auch andere Git-Repository-Hosting-Dienste wie GitLab, BitBucket und SourceForge, die allesamt brauchbare Alternativen darstellen und mit denen ich auch schon in verschiedenen Projekten gearbeitet habe. GitLab bietet sogar eine integrierte Option, mit der die Nutzer ihre Projekte direkt nach GitLab migrieren können.</p>



<h3 class="wp-block-heading">Tabellarische Gegenüberstellung</h3>



<figure class="wp-block-table"><table><tbody><tr><td>Git ist eine Software.</td><td>GitHub ist ein Dienst.</td></tr><tr><td>Git ist ein Befehlszeilenwerkzeug</td><td>GitHub hat eine grafische Benutzeroberfläche</td></tr><tr><td>Git wird lokal auf dem System installiert</td><td>GitHub wird im Internet gehostet</td></tr><tr><td>Git wird von Linux verwaltet</td><td>GitHub wird von Microsoft verwaltet.</td></tr><tr><td>Git konzentriert sich auf Versionskontrolle und Code-Sharing</td><td>GitHub konzentriert sich auf das zentralisierte Hosting von Quellcode</td></tr><tr><td>Git ist ein Versionskontrollsystem zur Verwaltung der Quellcode-Historie</td><td>GitHub ist ein Hosting-Dienst für Git-Repositories</td></tr><tr><td>Git wurde erstmals 2005 veröffentlicht</td><td>GitHub wurde 2008 eingeführt</td></tr><tr><td>Git hat keine Funktion zur Benutzerverwaltung</td><td>GitHub verfügt über eine integrierte Benutzerverwaltungsfunktion</td></tr><tr><td>Git ist <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-lizenziert</td><td>GitHub umfasst eine kostenlose und eine kostenpflichtige Ebene</td></tr><tr><td>Git hat eine minimale externe Werkzeugkonfiguration</td><td>GitHub hat einen aktiven Marktplatz für die Integration von Tools</td></tr><tr><td>Git bietet eine Desktop-Oberfläche namens Git Gui</td><td>GitHub bietet eine Desktop-Oberfläche namens GitHub Desktop</td></tr><tr><td>Git konkurriert mit CVS, Azure DevOps Server, Subversion, Mercurial, etc.</td><td>GitHub konkurriert mit GitLab, Git Bucket, AWS Code Commit, usw.</td></tr></tbody></table><figcaption class="wp-element-caption">Tabellarischer Vergleich Git und GitHub</figcaption></figure>



<h3 class="wp-block-heading">Fazit</h3>



<p>Alles in allem ist Git ein Versionskontrollsystem, mit dem man den Quellcode verwalten und verfolgen kann. GitHub ist ein Cloud-basierter Hosting-Dienst, mit dem man die Git-Repositories verwalten kann. Wenn man ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Projekt hat, welches Git verwendet, dann soll es helfen, dieses einfacher zu verwalten.</p>



<p>Schließlich sind die Namenskonventionen in der Welt der Programmierung nicht immer intuitiv. Deshalb lohnt es sich, die Verbindungen und Unterschiede zwischen den ähnlich benannten Lösungen zu erkennen. Beide bieten Programmierern wertvolle Versionskontrollfunktionen, sodass man laufend Software erstellen kann, ohne die Befürchtung zu haben, dass alles durcheinander kommt, da viele Menschen daran arbeiten. In diesem Fall verderben viele Köche nicht wirklich den Brei. GitHub geht nur ein bisschen weiter als Git. Es bietet ein paar Funktionen mehr sowie Ressourcen wie den Online-Speicherplatz und erleichtert die Zusammenarbeit an Projekten durch eine einfach zu bedienende Benutzeroberfläche.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/19/erklaerung-github/">GitHub &#8211; Das Zentrum kollaborativer Softwareentwicklung und der Ort, um Code, Ideen und Innovationen zu teilen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/19/erklaerung-github/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">563</post-id>	</item>
		<item>
		<title>Git &#8211; Die Codeverwaltung für effiziente Zusammenarbeit revolutionieren</title>
		<link>https://ceosbay.com/2022/11/18/erklaerung-git/</link>
					<comments>https://ceosbay.com/2022/11/18/erklaerung-git/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 18 Nov 2022 11:30:00 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Arch]]></category>
		<category><![CDATA[Branch]]></category>
		<category><![CDATA[Distribution]]></category>
		<category><![CDATA[Entwickler]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[equo]]></category>
		<category><![CDATA[Fork]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[GitKraken]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Kollaboration]]></category>
		<category><![CDATA[Kraken]]></category>
		<category><![CDATA[Lizenz]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[Merge]]></category>
		<category><![CDATA[Offener]]></category>
		<category><![CDATA[Offiziell]]></category>
		<category><![CDATA[Ops]]></category>
		<category><![CDATA[Pakete]]></category>
		<category><![CDATA[Paketmanager]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Quelle]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[Repo]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[Repository Manager]]></category>
		<category><![CDATA[Sabayon]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Source Control Manager]]></category>
		<category><![CDATA[Stupid Content Tracker]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<category><![CDATA[Zusammenarbeit]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=609</guid>

					<description><![CDATA[<p>Git ist eine freie und Open Source Software für die verteilte Versionskontrolle. Es hilft Entwicklern dabei, Code zu speichern, zu verwalten, Änderungen darin zu verfolgen und zu kontrollieren. Zu den weiteren Zielen gehören Geschwindigkeit, Datenintegrität &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git &#8211; Die Codeverwaltung für effiziente Zusammenarbeit revolutionieren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Git ist eine freie und <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Software für die verteilte Versionskontrolle. Es hilft Entwicklern dabei, Code zu speichern, zu verwalten, Änderungen darin zu verfolgen und zu kontrollieren. Zu den weiteren Zielen gehören Geschwindigkeit, Datenintegrität und Unterstützung für verteilte, nicht-lineare Arbeitsabläufe (Dabei können tausende von parallelen Zweigen auf verschiedenen Systemen entstehen &#8211; Dies ist keine Metapher sondern wörtlich gemeint! 😉 ).</p>



<p>Git wurde ursprünglich von Linus Torvalds im Jahr 2005 für die Entwicklung des Linux-Kernels entwickelt, wobei andere Kernel-Entwickler zur anfänglichen Entwicklung wesentliche Beiträge geleistet haben. Seit 2005 ist Junio Hamano der Hauptverantwortliche. Wie bei den meisten anderen verteilten Versionskontrollsystemen und im Gegensatz zu den meisten Client-Server-Systemen ist jedes Git-Verzeichnis auf jedem Computer ein vollwertiges Repository mit einer vollständigen Historie und vollständigen Versionsverfolgungsfunktionen, unabhängig vom Netzwerkzugang oder einem zentralen Server. Git ist, wie Anfangs angesprochen, freie und <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source Software</a>, die unter der <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html" target="_blank" rel="noreferrer noopener">GPL-2.0-Lizenz</a> vertrieben wird.</p>



<h3 class="wp-block-heading">Eine kurze Anekdote über Git und dessen Abbreviatur</h3>



<p>Linus Torvalds witzelte sarkastisch über den Namen git (was im britischen Slang &#8222;unangenehme Person&#8220; bedeutet): &#8222;Ich bin ein egoistischer Mistkerl und benenne alle meine Projekte nach mir selbst. Erst &#8222;Linux&#8220;, jetzt &#8222;Git&#8220;. Die Manpage beschreibt Git als &#8222;the stupid content tracker&#8220; Die Read-me-Datei des Quellcodes führt weiter aus:<br>&#8222;Git&#8220; kann alles Mögliche bedeuten, je nach Laune (Ich werde dies in der englischen Sprache belassen, da es so wahrscheinlich mehr Sinn macht 😉 ).</p>



<ul class="wp-block-list">
<li>Random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of &#8222;get&#8220; may or may not be relevant.</li>



<li>Stupid. Contemptible and despicable. Simple. Take your pick from the dictionary of slang.</li>



<li>&#8222;Global information tracker&#8220;: you&#8217;re in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.</li>



<li>&#8222;Goddamn idiotic truckload of sh*t&#8220;: when it breaks.</li>
</ul>



<p>Um Git zu verstehen sind im Prinzip 8 Begriffe relevant. Repository (Kurz: Repo), die Versionskontrolle, Fork bzw. Forking (Gabel bzw. Gabelung), Branch (Verzweigung), Stage (Phase oder Stadium), Modified (modifiziert), Commit (Verbindlichkeit) und Merge (Zusammenführung). Diese Begriffe werde ich nachfolgend beschreiben.</p>



<h3 class="wp-block-heading">Was ist eine Repository?</h3>



<p>Eine Repository, kurz Repo genannt, ist ein Speicherort für Softwarepakete. Oft wird auch ein Inhaltsverzeichnis zusammen mit Metadaten (Metainformationen bzw. -daten sind strukturierte Daten, die Informationen über Merkmale anderer Daten enthalten) gespeichert. Eine Software-Repository wird in der Regel von Source-Control-Managern (SCM) oder Repository-Managern (Ein Repository-Manager ist eine dedizierte Server-Anwendung, die für die Verwaltung von Repositories mit binären Komponenten entwickelt wurde) verwaltet &#8211; Dazu teilweise mehr in der Versionskontrolle und in späteren Beiträgen. Paketmanager ermöglichen die automatische Installation und Aktualisierung von Repositories (Deshalb auch &#8222;Pakete&#8220; genannt).</p>



<p>Viele Organisationen und Softwarehersteller unterhalten zu diesem Zweck Server im Internet, teilweise kostenlos oder gegen eine Gebühr. Repositories können können verschiedene Programmiersprachen, Betriebssysteme, Spiele oder andere Anwendungen sowie Dokumente und Daten beherbergen. Die Betreiber solcher Repositories stellen in der Regel ein Paketverwaltungssystem zur Verfügung. Folglich Werkzeuge, mit denen Softwarepakete aus den Repositories gesucht, installiert und anderweitig bearbeitet werden können. Viele Linux-Distributionen (Der Begriff Distribution stammt aus dem Lateinischen &#8222;distributio&#8220; und hat im Zusammenhang mit Software zwei unterschiedliche Bedeutungen: Softwarepaketierung und Softwareverteilung) verwenden z. B. das Advanced Packaging Tool (APT), das häufig in Debian-basierten Distributionen zu finden ist oder yum in Red Hat-basierten Distributionen. Es gibt auch mehrere unabhängige Paketverwaltungssysteme, wie z. B. pacman, dass in Arch Linux verwendet wird und equo, welches in Sabayon Linux zu finden ist. Ich bin primär mit Debian-basierten Distributionen unterwegs. Werde ich aber in zukünftigen Beiträgen ausführlicher thematisieren.</p>



<h3 class="wp-block-heading">Was ist Versionskontrolle?</h3>



<p>Die Versionskontrolle unterstützt Entwickler bei der Verfolgung und Verwaltung von Änderungen am Quellcode eines Softwareprojekts. Wenn ein Projekt und die Anzahl der Programmierer wachsen, wird die Versionskontrolle unabdingbar. Doch in der Regel kommen sowohl bei kleineren als auch größeren Softwareprojekten mehrere Personen zum Einsatz, die gemeinsam an dem Quellcode arbeiten. Wenn man beispielsweise als Core-Entwickler an einem bestimmten Teil der Codebasis arbeiten möchte, ist es nicht förderlich oder effizient, wenn der Quellcode direkt bearbeitet wird, da zeitgleich noch andere die an dem Projekt beteiligt sind und daran arbeiten. Dies kann am Ende des Tages für ein enormes Durcheinander sorgen 😀</p>



<p>Da man auf dieses Durcheinander gut verzichten kann, arbeitet man als Entwickler mit einer Versionskontrolle &#8222;sicher&#8220; durch branching (Verzweigungen) und merging (Zusammenführungen). &#8222;Sicher&#8220; in Anführungszeichen, da es auch da einige Stolpersteine gibt 😉</p>



<p>Beim branching dupliziert ein Entwickler den Teil des Quellcodes (Das so genannte Repository bzw. die Repo), der für ihn relevant ist und kann die Änderungen genau an diesem Teil des Codes vornehmen, ohne den Rest des Projekts zu beeinträchtigen. Sobald der Entwickler seinen Teil des Codes ordnungsgemäß fertiggestellt hat, kann er diesen Code wieder in den Hauptquellcode mergen (einbinden), um es offiziell zu machen. All diese Änderungen werden protokolliert, kommentiert und können bei Bedarf eingesehen, kontrolliert oder rückgängig gemacht werden.</p>



<h3 class="wp-block-heading">Was ist Fork. bzw. Forking?</h3>



<p>Ein Fork ist eine Kopie einer Repository. Das Forken einer Repository ermöglicht es, frei mit Änderungen zu experimentieren, ohne das Originalprojekt zu beeinträchtigen. Dieser Begriff wird auch anderweitig genutzt, doch darauf werde ich jetzt nicht weiter eingehen 😀</p>



<h3 class="wp-block-heading">Was ist Branch bzw. Branching?</h3>



<p>Ein Branch (Zweig) ist ein hervorstehender Teil eines Baumes. Etwas, dass aus einem Hauptteil herausragt. So, auch in unserem Kontext. Ein Zweig stellt eine unabhängige Entwicklungslinie dar. Zweige dienen als Abstraktion für den Prozess der Bearbeitung (Stage/Commit). Man kann sie sich als eine Möglichkeit vorstellen, ein neues Arbeitsverzeichnis, einen Bereitstellungsbereich und/oder einen Projektverlauf anzufordern.</p>



<h3 class="wp-block-heading">Was ist Modified bzw. Modifying?</h3>



<p>Modified (Geändert) bedeutet, dass die Datei(en) geändert wurden aber noch nicht in die Datenbank bzw. Repository übertragen wurden.</p>



<h3 class="wp-block-heading">Was ist Stage bzw. Staging?</h3>



<p>Staged (Phase/Stadium) bedeutet, dass eine geänderte Datei in ihrer aktuellen Version markiert wurde, um sie in dem nächsten Commit-Snapshot (Schnappschuss) zu übernehmen.</p>



<h3 class="wp-block-heading">Was ist Commit bzw. Committing ?</h3>



<p>Commits (Verbindlichkeiten) sind die zentralen Bausteineinheiten einer Git-Projektzeitleiste. Sie können als Schnappschüsse oder Meilensteine entlang der Zeitachse eines Git-Projekts betrachtet werden. Commits werden mit dem Befehl &#8222;git commit&#8220; erstellt, um den Zustand eines Projekts zu diesem Zeitpunkt festzuhalten. Im Endeffekt wie das Zwischenspeichern mit F5 bei Spielen oder Strg + S bei der regulären Arbeit am Computer. In der Betrachtungsweise einiger interessanter und manchmal nervtötender Zeitgenossen &#8211; Lediglich etwas fundamentaler 😉</p>



<h3 class="wp-block-heading">Merge</h3>



<p>Mit dem Merging-Befehl fügt Git einen geforkten (aufgegabelten) Verlauf wieder zusammen. Mit dem Befehl &#8222;git merge&#8220; kann man die unabhängigen Entwicklungslinien, die mit dem Befehl &#8222;git branch&#8220; erstellt wurden, in einen einzigen Zweig integrieren.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Alles in allem sollte dies für eine kurze Erklärung reichen. In naher Zukunft werde ich auch ein Tutorial über die Nutzung von Git schreiben. Sicherlich gibt es heutzutage auch kommerzielle Cloud-Lösungen wie GitHub oder GitKraken, die diese Schritte auf wenige Mausklicks reduzieren und so eine nahtlosere Zusammenarbeit ohne etwaige Vorkenntnisse ermöglichen, doch dies werde ich auch in zukünftigen Beiträgen thematisieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git &#8211; Die Codeverwaltung für effiziente Zusammenarbeit revolutionieren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/18/erklaerung-git/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">609</post-id>	</item>
	</channel>
</rss>
