Visual Studio 2017

Visual Studio 2017

Kurz vorweg: Dieser Blog Post ist Teil einer Serie und setzt auf die früheren Teile auf. Lest bitte alle Teile, damit ihr nichts wichtiges verpasst. Zu finden sind alle Beiträge unter dem Tag VS2017.

Git

Heute soll es um Git gehen. Aber vorweg möchte ich noch etwas erwähnen. Es bringt absolut nichts, wenn ihr eure Quelltexte, die Git Repositories etc., an einem unsicheren Speicherort (wie Laufwerk C:) lagert. Sorgt lieber erst mal für Datensicherheit. Wie das geht habe ich bereits hier beschrieben: Darf's noch etwas sicherer sein?

Was ist Git?

Kurz vorweg ein paar Begriffserklärungen.

  • Repository
    Das ist das eigentliche Arbeitsverzeichnis von Git, wenn man so möchte. Hier liegt das Projekt drin, inklusive allen Vorgängerversionen, Branches, … normalerweise ohne Kompilate, also den fertigen Binärdateien (.exe) oder Releases (MeineApp.zip).
  • Pull
    Hiermit "zieht" man sich die aktuelle Version (oder die explizit angegebene) aus dem Repository heraus, ähnlich wie ein Download des Quelltextes von einer Webseite. Wird auch manchmal "Auschecken" genannt, auch wenn das hier nicht so ganz zutrifft.
  • Push
    Wer hätte es gedacht, das Gegenteil von Pull. Hiermit werden die Änderungen die man in seiner lokalen Arbeitskopie gemacht hat übertragen. Wird auch öfters "Einchecken" oder "Commit" genannt.
  • Sync
    Hierbei wird das lokale Repository mit einem Remote Repository abgeglichen, sprich Änderungen die ihr gemacht habt werden hoch geladen, Änderungen die ihr noch nicht habt werden heruntergeladen.
  • Branch
    Eine Verzweigung. Dies kann man sich ungefähr so vorstellen, Debian Linux ist der Master, der Ursprung (origin). Raspbian, Ubuntu, … basieren auf Debian, haben aber eine Andere Zusammenstellung, sind also ein Branch von Debian. Wie man das jetzt genau nutzt bleibt einem natürlich selbst überlassen.

Git ist eine Versionskontrolle. Gehen wir jetzt mal davon aus dass ihr nur alleine entwickelt. Irgendwann fangt ihr mit einem Projekt an, testet es, zumindest in Teilen, und befindet es für ok, also lauffähig. Dann könnt ihr eure Änderungen in Git pushen, wohlgemerkt mit einer Notiz was ihr warum geändert habt. Merkt ihr später dass ihr euch verrannt habt und eure Änderungen so doch nicht umsetzbar sind könnt ihr immer wieder zu Zeitpunkt X zurück kehren, natürlich vorausgesetzt dass ihr vorher auch eingecheckt habt.

Jetzt gibt es ein lokales Git Repository, aber vielleicht auch ein Remote Repository. In meinem Fall wäre das git.tightDev.Net. Das ist zwar optional, aber benötigt, wenn man mit mehreren Leuten gleichzeitig an einem Projekt arbeiten möchte. Es muss nicht unbedingt ein über das Web erreichbarer Server sein, es kann auch auf das Firmennetzwerk limitiert sein.

Es sei aber noch gesagt dass Git ein gewaltiges Thema werden kann, ich kratze hier nur an der Oberfläche und ich weiß auch noch nicht alles.

Vorbereitung

Erstellt jetzt ein leeres Verzeichnis wo eure Projekte drin liegen sollen, z.B. S:\Git falls ihr meinen Rat von oben befolgt habt. Ich gehe davon aus dass ihr Git bereits installiert habt (belasst alles bei den Standardeinstellungen).

Schnellstart

Ab jetzt gibt es 2 Wege. Ein neues Projekt erstellen oder ein existierendes öffnen.

Ein existierendes Projekt öffnen

Könnte man jetzt umständlich über die Konsole machen (git clone), aber man kann auch einfach vom Git Server die Kopie herunterladen. Diese entpackt ihr dann in S:\Git\Projektname. Danach einfach die Projektdatei öffnen.

Ein neues Projekt erstellen

Ich erstelle hier jetzt mit Absicht eine .Net Konsolenanwendung. Das liegt daran weil ich später noch auf Cross-Platform Entwicklung mit .Net Core eingehen möchte (dort ist leider noch keine GUI unterstützt, zumindest nicht von Haus aus). Mit der Konsole selbst kann man aber auch schon einiges machen. ;)

Als Name habe ich jetzt bewusst BlogExample_FW genommen, es ist eine .Net Framework Anwendung. Das _FW habe ich aus dem Projektmappennamen wieder raus genommen. Warum? Dazu kommen wir später, wenn es um Cross-Platform geht. Ich nutze hier VB.Net, aber ihr könnt es genau so auch mit C# machen, falls euch die Sprache eher liegt.

Wichtig ist hier noch unten rechts "Neues Git-Repository erstellen", der muss aktiviert sein.

Interessant wird es jetzt unten rechts:

Links zeigt an wie viele Änderungen noch an ein Remote Repository übertragen werden müssen (wenn man es nutzt). 2 ist hier ganz normal, es handelt sich hierbei um die Dateien .gitattributes und .gitignore (normalerweise versteckt). Diese konfigurieren Git, so dass z. B. bestimmte Dateien nicht synchronisiert werden. Die Attribute lassen wir so wie sie sind, aber die .gitignore sollten wir jetzt mal kurz im Notepad (o. Ä.) öffnen. Hier fügt ihr oben die folgenden Zeilen ein:

*.plb
Thumbs.db
.DS_Store

.plb Dateien werden von Photoline automatisch erstellt, Thumbs.db von Windows. Es handelt sich hier um Miniaturansichten der Grafiken. Braucht kein Mensch, muss nicht synchronisiert werden. .DS_Store erstellt MacOS auf jedem Laufwerk und in jedem Verzeichnis was es in die Finger bekommt. Nutzen bei allen gleich 0, also weg damit.

Zurück in's VS. Der Punkt rechts daneben (im Screenshot 0) zeigt die Änderungen an (veränderte, hinzugefügte und gelöschte Dateien).

Ein weiter öffnet den Team Explorer. Und zu guter Letzt könnt ihr den Branch auswählen oder einen Neuen erstellen. Ganz so tief gehe ich hier aber nicht in's Detail.

Der erste Quelltext

Im Projektmappenexplorer seht ihr jetzt dass eine Module1.vb erstellt wurde. Diese habe ich in App.vb umbenannt (mache ich immer so) und in ihr diesen Quelltext eingefügt:

''' <summary>Module containing all application related stuff.</summary>
Friend Module App

	''' <summary>Application main entry point.</summary>
	Friend Sub Main()

		' Ask for user name
		Console.Write("Enter your name: ")
		Dim sName As String = Console.ReadLine

		' Greet the user
		Console.WriteLine()
		Console.WriteLine("Hello, " & sName & ".")

		' Wait before exit
		Console.WriteLine()
		Console.WriteLine("Press any key to exit...")
		Console.ReadKey(True)

	End Sub

End Module

Der Quelltext ist eigentlich selbsterklärend, absolut nichts spezielles. Beachtet aber, dass ich vorher mit 3fach Kommentaren (''' in VB.Net, /// in C#) über dem Modul und der Sub spezielle Kommentare angelegt habe. Gewöhnt euch das gleich an, das wird später noch wichtig wenn wir zur Dokumentation kommen. Das <summary> und ggf. weitere Felder erstellt Visual Studio dann automatisch selbst.

Jetzt steht unten rechts auch dass wir 3 Änderungen im Projekt vorgenommen haben.

Klickt man hierauf sieht man diese.

"Module1.vb" wurde gelöscht, "App.vb" hinzugefügt. Technisch jetzt zwar nicht ganz so richtig, wir haben sie ja nur umbenannt, aber passt schon. Und natürlich wurde auch die Projektdatei bearbeitet.

Was jetzt zwingend noch gemacht werden muss ist oben im gelben Feld einzugeben was man seit dem letzten Commit bearbeitet hat. Da dies unser erster Commit ist können wir hier "Initial commit." eingeben, sonst natürlich eine Auflistung der Änderungen die wir gemacht haben.

Danach auf "Commit für alle" klicken und das lokale Git Repository wird aktualisiert.

Das erste "Whoops"

Machen wir jetzt nicht, aber nur rein theoretisch. Klickt unten rechts auf master (oder wie euer Branch heißt). Dort könnt ihr euch die Änderungen anzeigen lassen. In dem Verlauffenster seht ihr jede übertragene Änderung (jedes Commit) und könnt entweder die alte Version einer Datei öffnen (Doppelklick auf den Commit, die Dateien erscheinen dann im Team Explorer) oder komplett zum ausgewählten Commit zurück kehren.

Die Cloud

Welcher Vollhorst hat sich den Begriff überhaupt ausgedacht? Naja, Internet ist halt #Neuland… Es soll jetzt um ein Remote Repository gehen. Der kann im Netzwerk stehen aber auch über das Internet erreichbar sein.

Wie auch immer, ihr bekommt eine Git URL, wie https://git.tightdev.net/BlogExample.git. Abgesehen davon habt ihr natürlich eure Anmeldedaten. Jetzt muss das Ganze nur noch verlinkt werden.

Klickt hierzu unten rechts auf den Linken Button mit dem Pfeil hoch, danach auf "Git-Repository veröffentlichen". Dort fügt ihr die URL ein, danach Klick auf "Veröffentlichen".

Ihr werdet dann ggf. noch nach euren Anmeldedaten gefragt. Sollte ein Name für das Repository abgefragt werden benennt es auf jeden Fall "origin". Normalerweise wird das aber standardmäßig gesetzt. Mag sich ändern wenn es verschiedene Branches gibt, aber so weit sind wir noch nicht. ;)

Jetzt wird das Projekt, also das lokale Repository an den Server übertragen. Wenn ihr jetzt Änderungen vornimmt und wie gehabt per Commit diese in euer lokales Repository schreibt wird es nicht gleich auf dem Server synchronisiert. Dazu ist der Punkt Sync da (oder unten rechts der Pfeil nach oben). So werden auch neuere Dateien herunter geladen, falls euer lokales Repository nicht mehr aktuell ist.

Das wars…

… für heute. Im nächstem Teil wird es um Cross-Platform Entwicklung gehen. Seid gespannt. Und immer den VS2017 Tag checken! :)