MSEgit

Forum für alles rund um die MSEide und MSEgui
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

MSEgit

Beitrag von mse »

Dieses Thema richtet sich an Leute welche sich dafür interessieren, wie man sich das Leben als (Hobby) Programmierer durch die Benutzung eines Quellcode-Versionierungssystems erleichtert, speziell mit Git und MSEgit.
Es ist die Fortsetzung von
viewtopic.php?f=5&t=10801&start=33

Das Grundprinzip von Git ist, dass es über den Inhalt aller verwalteten Dateien eine einzige Quersumme bildet, welche "SHA" genannt wird.
https://de.wikipedia.org/wiki/Secure_Hash_Algorithm
Im Git-Archiv werden die Daten zusammen mit dem entsprechenden SHA-Wert und dem SHA-Wert des davor gespeicherten Zustandes abgelegt.
Mittels dieses SHA-Wertes lassen sich die gespeicherten Zustände im Archiv wiederfinden und rekonstruieren. Eine zusammenhängende Abfolge von Snapshots nennt man "branch".
Für die Unterbringung des Archivs erzeugt Git im Projektverzeichnis ein Unterverzeichnis namens ".git", worin alle Daten enthalten sind.
MSEgit ist eine handliche graphische Oberfläche für Git.
Git gibt es hier:
https://git-scm.com/downloads
MSEgit ist hier:
https://sourceforge.net/projects/mseuniverse/
https://sourceforge.net/projects/mseuni ... es/msegit/
Installiere Git, lade die MSEgit Version für dein System herunter und entpacke das MSEgit Archiv in ein Verzeichnis deiner Wahl, starte MSEgit.
'File'-'Init git repo', wähle das Wurzelverzeichnis deines Projektes, 'OK'.
Markiere die Dateien, welche von Git verwaltet werden sollen, Rechts-Klick-'Add' (git1.png).
git1.png

Im rechten Fenster unten sind die Git Kommandos gelistet. Hier können auch Kommandos direkt an Git eigegeben werden.
Damit Git von einem aktuellen Zustand die SHA berechenet und ihn in das Archiv übernimmt, muss "commited" werden.
'git'-'Commit/Stage/Unstage all' (oder Ctrl+O), das Commit-Fenster öffnet sich (git2.png)
git2.png

Gib bei 'Commit Message' einen entsprechenden Text ein. Konvention ist, den Text für Hinzufügungen mit "+", für Änderungen mit "*" und für Entfernungen mit "-" zu beginnen. Klicke auf 'Commit', 'Yes'.
Möglicherweise erscheint eine Fehlermeldung (git3.png).
git3.png

Gib im Git Kommandofenster

Code: Alles auswählen

 
config --global user.email "deineEmailAddresse"
 

ein, drücke die Enter-Taste. Das führende "git" muss im Kommandofenster nicht geschrieben werden.
Zuletzt geändert von mse am Mo 15. Jan 2018, 17:32, insgesamt 1-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

Nun sollte das committen klappen (git4.png).
git4.png

Unser Commit hat die SHA 9c9e1a273ab53eec4af02e644f4de300b59020c3, Git hat automatisch den Branchnamen "master" vergeben.
Die Datei ".msegitrepo.sta" enthält die Einstellungen von MSEgit und muss nicht unbedingt archiviert werden. Es empfiehlt sich, im Projektverzeichnis eine Datei ".gitignore" zu speichern, welche die Endungen von Dateien enthält, die von Git ignoriert werden sollen.
https://gitlab.com/mseide-msegui/mseide ... .gitignore
kann als Beispiel dienen.
Nehmen wir an, wir haben aus versehen eine Datei geändert, 'View'-'Refresh' oder Ctrl+R frischt die Anzeige auf (git5.png).
git5.png

RechtsKlick-'Restore' macht die Änderungen rückgängig. Wollen wir die Änderungen behalten, drücken wir Ctrl+O um den Commit-Dialog zu starten, siehe git2.png im vorhergehenden Beitrag.
Im rechten Fenster werden die Commits gelistet, im linken Fenster erscheinen die Unterschiede zwischen dem Aktuellen Stand und dem im rechten Fenster markierten Commit (git6.png).
git6.png

Will man vorübergehend einen alten Zustand wiederherstellen, macht man in der entsprechenden Zeile des Log RechtsKlick-'Checkout' (git7.png).
git7.png

Klicken in die 'C' Spalte bei "master" im oberen Teil des rechten Fensters schaltet wieder zum Kopf der Branch zurück.
Ich bin gerne bereit MSEgit-Fragen zu beantworten.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MSEgit

Beitrag von af0815 »

Ich habe es mir angesehen. Das ist sicher ein gute Tool, wenn man es geschrieben hat oder sich damit wirklich beschäftigen WILL. Besonders für Anfänger/wenig Benutzer von GIT würde ich keine Empfehlung aussprechen, da MSEgit bereits gute Kenntnisse von Git IMHO voraussetzt. Ich arbeite täglich mit GIT und deswegen sind mir die meisten angezeigten Sachen bekannt, aber besonders unter Windows arbeite ich lieber mit anderen Tools bzw. direkt auf der Kommandozeile.

Wenn bei MSEgit die Benutzerfreundlichkeit (aus der Sicht der Durchschittsanwender) mehr gegeben ist (Benchmark ev. mit TortoiseGIT machen), so könnte ich mir vorstellen es als Tool innerhalb von Lazarus aufzurufen. Das ganze ist von mir von Windows aus betrachtet, unter Linux kann das anders aussehen. Da ich aber unter Windows mir meine Brötchen verdienen darf/muss mache ich aktuell mit Linux keine Benchmarks.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: MSEgit

Beitrag von braunbär »

File'-'Init git repo', wähle das Wurzelverzeichnis deines Projektes, 'OK'.
Markiere die Dateien, welche von Git verwaltet werden sollen, Rechts-Klick-'Add' (git1.png).

Heißt das, dass ich alle Files, die ich in meinem Repository haben will, manuell eingeben muss? Und wenn ich eine neue Unit mache, muss ich die manuell zum Repository hinzufügen?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

braunbär hat geschrieben:Heißt das, dass ich alle Files, die ich in meinem Repository haben will, manuell eingeben muss? Und wenn ich eine neue Unit mache, muss ich die manuell zum Repository hinzufügen?

Ja. Alternativ kannst du im Git Konsolenfenster auch

Code: Alles auswählen

 
add .
 

oder

Code: Alles auswählen

 
add -A
 

eingeben.
https://git-scm.com/docs/git-add

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

af0815 hat geschrieben:Ich habe es mir angesehen. Das ist sicher ein gute Tool, wenn man es geschrieben hat oder sich damit wirklich beschäftigen WILL. Besonders für Anfänger/wenig Benutzer von GIT würde ich keine Empfehlung aussprechen, da MSEgit bereits gute Kenntnisse von Git IMHO voraussetzt. Ich arbeite täglich mit GIT und deswegen sind mir die meisten angezeigten Sachen bekannt, aber besonders unter Windows arbeite ich lieber mit anderen Tools bzw. direkt auf der Kommandozeile.

MSE-Tools werden öfters danach beurteilt, ob sie gleich wie bestehende Produkte sind. Das ist selten der Fall, da ich mich bei der Spezifizierung und Implementation nicht an Bestehendem orientiere, sondern versuche, die für meine Zwecke beste Lösung zu finden.
Wenn bei MSEgit die Benutzerfreundlichkeit (aus der Sicht der Durchschittsanwender) mehr gegeben ist (Benchmark ev. mit TortoiseGIT machen), so könnte ich mir vorstellen es als Tool innerhalb von Lazarus aufzurufen.

Hast du konkrete Vorschläge?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MSEgit

Beitrag von af0815 »

Das man das ganze auch etwas leichtgewichtiger verwenden kann, ohne gleich mit Daten und Anzeigen überfordert zu sein.
Benchmark
Benchmark
msegit.JPG (31.68 KiB) 5317 mal betrachtet


Wenn ich normale arbeite will ich nur die Befehle haben die ich brauche. Bei GIT halt Commit, Add, Push, Pull, Revert, Diff und Stash. Günstig wäre wenn man sich diese Befehle auch noch selbst aussuchen und zusammenstellen kann. Zumindest für einen 'Simple' Mode. Wenn ich was spezielleres will, Cherrypick, Rebase, Branches löschen,... dann steige ich gerne auf die volle Version um.

Schön wäre natürlich bei einem Init oder Clone wenn gleich eine Standard gitignore auf Anforderung erstellt werden kann. Das sind halt die kleinen mühsamen Sachen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

Bei mir läuft MSEgit bei der Arbeit im Hintergrund ständig mit und da ist die Anzeige im linken Fenster genau das was ich brauche. Da sehe ich, welche Dateien geändert wurden und wie. Sobald ich ein Problem behoben oder eine Funktion implementiert habe drücke ich Ctrl+O, überprüfe die Änderungen nochmals und committe.
git8.png

Was auch ab und zu vorkommt ist, dass ich eine Datei mit einer älteren Version vergleichen will, dazu kann ich dann im rechten Fenster den entsprechenden Commit auswählen. Wenn man die Anzeige der Daten nicht braucht, kann man die entsprechenden Fenster auch schliessen. Die Screenshots zeigen lediglich das gedockte standard Layout. Klicke auf den kleinen Kreis im Rechten Fenster,
git9.png

die nicht gebrauchten Unterfenster können dann geschlossen werden.
git10.png

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: MSEgit

Beitrag von braunbär »

mse hat geschrieben:
braunbär hat geschrieben:Heißt das, dass ich alle Files, die ich in meinem Repository haben will, manuell eingeben muss? Und wenn ich eine neue Unit mache, muss ich die manuell zum Repository hinzufügen?

Ja. Alternativ kannst du im Git Konsolenfenster auch

Code: Alles auswählen

 
add .
 

oder

Code: Alles auswählen

 
add -A
 

eingeben.
https://git-scm.com/docs/git-add


Das ist vom Konzept her, sagen wir es freundlich, suboptimal.

Sinnvoll wäre, ein oder mehrere Projektverzeichnisse anzugeben, sodass dann alle Dateien in diesen Verzeichnissen gesichert werden - wobei Exclude-Filter möglich sein sollten, mit denen man Dateitypen und Dateien, die nicht von Relevanz sind, von der Sicherung explizit ausschließen kann. Wenn ich eine neue .pas Datei in meinem Projektverzeichns anlege, dann soll die auch automatisch mitgesichert werden, ohne dass ich dem Sicherungsprogramm lange Anweisungen geben muss.

Ich verwende derzeit zum Speichern der verschiedenen Programmversionen Winrar und ein paar Batch-Files dazu. Das ist etwas mühsam, wenn ich wirklich einmal auf eine ältere Programmversion zugreifen muss, aber das kommt zum Glück nicht gar so oft vor. Dieses System gegen eines zu tauschen, bei dem mir unter Umständen Files nicht mit gesichert werden, weil ich vergessen habe, diese Files extra irgendwo einzutragen, kommt für mich nicht in Frage.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

braunbär hat geschrieben:Sinnvoll wäre, ein oder mehrere Projektverzeichnisse anzugeben, sodass dann alle Dateien in diesen Verzeichnissen gesichert werden - wobei Exclude-Filter möglich sein sollten, mit denen man Dateitypen und Dateien, die nicht von Relevanz sind, von der Sicherung explizit ausschließen kann.

Dazu dient die erwähnte ".gitignore" Datei.
Wenn ich eine neue .pas Datei in meinem Projektverzeichns anlege, dann soll die auch automatisch mitgesichert werden, ohne dass ich dem Sicherungsprogramm lange Anweisungen geben muss.

"Lange Anweisung" -> "add -A", na ja. ;-)
Der Zweck, warum bei MSEgit nicht alle neuen Dateien automatisch ins Archiv aufgenommen werden, ist, dass was einmal in Git drin ist kaum mehr entfernt werden kann. Das kann vor allem bei geteilten und/oder öffentlichen Repositories peinlich sein.
Neue Dateien sind im Dateifenster als weisse Einträge klar ersichtlich. Ich werde eine Option 'Automatically add new files' in MSEgit einbauen.
git11.png

Ich verwende derzeit zum Speichern der verschiedenen Programmversionen Winrar und ein paar Batch-Files dazu. Das ist etwas mühsam, wenn ich wirklich einmal auf eine ältere Programmversion zugreifen muss, aber das kommt zum Glück nicht gar so oft vor. Dieses System gegen eines zu tauschen, bei dem mir unter Umständen Files nicht mit gesichert werden, weil ich vergessen habe, diese Files extra irgendwo einzutragen, kommt für mich nicht in Frage.

Dann hast du den Nutzen der Arbeit mit Git noch nicht verstanden. Es geht darum, jederzeit die vorgenommenen Änderungen überprüfen zu können, verschiedene Versionen miteinander zu vergleichen und rasch zwischen verschiedenen Versionen umzuschalten.
Ein weiteres wichtiges Element sind "branches". Nehmen wir an, du hast eine Idee, wie du dein Programm massiv verbessern könntest. Da der Umbau aber mehrere Tage oder Wochen dauert, das Programm bis zum fertigen Umbau nicht funktionieren wird und du am bestehenden und funktionierenden Programm möglicherweise trotzdem kleine Reparaturen machen musst, eröffnest du einen neuen Zweig (branch) in der Abfolge der im Archiv gespeicherten Snapshots.
Wähle im rechten Fenster den Commit von wo verzweigt werden soll, z.B der aktuelle Zustand 28ad58... (Nummer 0), RightClick-'Branch', im Branch-Fenster wird eine neue Zeile erstellt. Trage den Namen der neuen branch ein, z.B "newcalc".
git12.png

In der 'C'-Spalte (C -> "checkout") des Branch-Fensters kann nun zwischen den beiden Zweigen umgeschaltet werden, dabei werden jeweils die Dateien im Arbeitsverzeichnis durch die Dateien des neuesten Snapshots des Zweiges im Archiv ersetzt.
Klicke in die 'C'-Spalte bei "newcalc", Arbeite an der neuen Version und committe die Änderungen.
git13.png

Nun muss an der ursprünglichen Version eine Änderung vorgenommen werden. Klicke im rechten Fenster in die 'C'-Spalter der branch Zeile "master", mache und committe die Änderung.
git14.png

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

Diese Änderung soll auch in der neuen Version vorgenommen werden. Schalte auf "newcalc" ('C'-Spalte!), RightClick in der "master" Zeile,
git15.png
git15.png (17.28 KiB) 5297 mal betrachtet

'Merge Branch',
git16.png
git16.png (8.42 KiB) 5297 mal betrachtet

'Yes', gib eine Commit message ein, 'OK'. Die Änderungen an der ursprünglichen Version wurden automatisch in die "newcalc" Version eingepflegt.
git17.png

Auf gleichem Weg können die Änderungen der "newcalc" Version in die Hauptversion übernommen werden sobald sie abgeschlossen sind und sich bewährt haben.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

mse hat geschrieben:Ich werde eine Option 'Automatically add new files' in MSEgit einbauen.

Die MSEgit git master Version 637dd4ff hat 'Options'-'Auto add new files'.
https://gitlab.com/mseide-msegui/mseuni ... ols/msegit

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: MSEgit

Beitrag von braunbär »

mse hat geschrieben:Die MSEgit git master Version 637dd4ff hat 'Options'-'Auto add new files'.

Super. Für mich Grund genug, es einmal ernsthaft auszuprobieren.

mse hat geschrieben:Dann hast du den Nutzen der Arbeit mit Git noch nicht verstanden.

Habe ich durchaus, Bloß ist die Feature, dass neue Dateien automatisch drin sein müssen, für mich ein absolutes Muss - und sei es nur aus psychologischen Gründen. Mit einem Backupsystem, bei dem unter Umständen ein Teil meiner Arbeit verloren gehen könnte, weil ich irgendwo auf irgend einen Eintrag vergessen habe, könnte ich nicht ruhig schlafen. :)

mse hat geschrieben:Der Zweck, warum bei MSEgit nicht alle neuen Dateien automatisch ins Archiv aufgenommen werden, ist, dass was einmal in Git drin ist kaum mehr entfernt werden kann. Das kann vor allem bei geteilten und/oder öffentlichen Repositories peinlich sein.

Das verstehe ich schon. Die Anforderungen an ein öffentliches Repository sind nicht ganz die gleichen wie die an ein privates. Für mich gilt, lieber 50 Files zu viel als eines, das ich brauche, zu wenig.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MSEgit

Beitrag von af0815 »

Könnte man msegit ähnlich in Lazarus einbinden wie das das paket lazcvshelper mit TotoiseGIT/SVN macht ?
lazcvshelper Menüeintrag
lazcvshelper Menüeintrag

Für die tägliche Arbeit finde ich das sehr angenehm und wäre ein Grund sich mit mseGIT auseinander zu setzen. Vor allen weil damit die Abhängigkeit von TotoiseXXX entfällt und das Paket dann für viele BS funktioniert.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MSEgit

Beitrag von mse »

af0815 hat geschrieben:Könnte man msegit ähnlich in Lazarus einbinden wie das das paket lazcvshelper mit TotoiseGIT/SVN macht ?

Bei mir ist MSEgit immer mit dem aktuell bearbeiteten Projekt geöffnet. So kann ich mit Alt+Tab oder der Taskleiste einfach umschalten.
Typische Arbeitsumgebung:
msegit3.png

Umschaltung mit Alt+Tab:
msegit4.png

MSEgit aus Lazarus fernzusteuern wäre sicher möglich. Persönlich bevorzuge ich optimale Einzelwerkzeuge statt einer einzigen Riesen-Monster-Applikation.

Antworten