Welche Dateien in Versionskontrolle sichern

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Welche Dateien in Versionskontrolle sichern

Beitrag von Marsmännchen »

Hi,

ich bin durch einen anderen Thread auf das Thema Versionskontrolle angefixt worden und fange jetzt mit Git an. Dabei ist mir die Frage gekommen, welche Dateien eines Lazarus-Projektes man versionieren sollte. Alle Dateien einschließlich der jeweiligen *.exe oder nur die Quellcodedateien (*.lpi, *.lpr, *.pas, *.lfm)? Oder bevorzugt ihr eine andere Mischung?
Ich mag Pascal...

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: Welche Dateien in Versionskontrolle sichern

Beitrag von mse »

Die Aufnahme von Binaries in git Repos sollte die absolute Ausnahme sein. Ich möchte noch auf ".gitignore" hinweisen:
https://git-scm.com/docs/gitignore

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Requion »

Hi Marsmännchen,

ich bin zwar kein Experte aber ich würde sagen das, was du zum entwickeln bzw. (als User) zum kompilieren und benutzen brauchst.
Die Quelltextdateien gehören da mit rein ist ja klar.
Binaries vom Programm würde ich nicht mit rein nehmen. Die werden ja erst aus dem Quelltext erstellt.
Binaries von anderen Programmen die du mitliefern willst sind so eine Sache. Ich persönlich würde die da auch nicht mit reinschmeißen (Aber ich bin kein Experte).
Was m.M.n auch nicht da rein gehört sind Configs mit sensiblen Daten und Configs die vom Programm erzeugt werden (Warum sollte klar sein).

Ich hoffe das hilft dir erstmal etwas weiter.

P.S. Und vergiss nicht das README File...git steht da voll drauf ;).
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Socke »

Requion hat geschrieben:Binaries von anderen Programmen die du mitliefern willst sind so eine Sache. Ich persönlich würde die da auch nicht mit reinschmeißen (Aber ich bin kein Experte).

Gerade im industriellen Berech wird die gesamte Build-Chain (IDE, Compiler, Assembler, Linker, Debugger) in einer Versionkontrolle erfasst; Teilweise geht man auch so weit, eine gesamte Virtuelle Maschine, auf der die Compilierung durchgeführt wird, gesichert.
Für kleine Hobby-Projekte ist das aber zu viel; da reicht Quelltext und die vom Programm benötigten Binärdateien (Bilder, Sounds etc.) voll ausreichend.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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: Welche Dateien in Versionskontrolle sichern

Beitrag von mse »

Socke hat geschrieben:Gerade im industriellen Berech wird die gesamte Build-Chain (IDE, Compiler, Assembler, Linker, Debugger) in einer Versionkontrolle erfasst;

Aber nicht unbedingt für die Laufende Entwicklungsarbeit sondern für Release-Versionen in einem separaten Repository. Exe und Unit-Dateien im Entwickungsrepository machen zu viel "Noise".

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Warf »

Binäry Dateien (z.B. exe) nicht in das Entwicklungsrepo commiten. Versionierungssysteme sind auf Text ausgelegt, und das bedeutet zum einen, binäre dateien sind unglaublich langsam im upload, zum anderen, du kannst bei binären dateien nicht mergen, sondern bekommst jedes mal konflikte.
Außerdem musst du auch keine Konfig dateien wie z.B. die lps commiten, sowie keine Backup Dateien (.bak), ObjectFiles(.o), ppu's, Verwendete Abhängigkeiten (DLL's, Bibliotheken, Packages, etc).

Was du Commiten solltest sind alle Quelltext dateien, Benötigte Resourcen (z.B. Bilder), Projektdateien (lpi) oder Compilescripte (make), Dokumentation, Roadmap, Readme.
Die letzten 3 natürlich nur falls vorhanden.

Außerdem nur Änderungen Commiten die sich zumindest Kompilieren lassen, und ein einheitliches LineEnding verwenden (z.B. verwende ich immer LF, sowohl unter Windows, Linux und OSX), sonst hast du nach jedem Commit mit von einem anderen Rechner nur noch konflikte.

Diese Dinge sind zwar größten Teils für Teamarbeit wichtig, aber gewöhn es dir am besten schon gar nicht falsch an und mach es auch so für allein-projekte.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Socke »

mse hat geschrieben:
Socke hat geschrieben:Gerade im industriellen Berech wird die gesamte Build-Chain (IDE, Compiler, Assembler, Linker, Debugger) in einer Versionkontrolle erfasst;

Aber nicht unbedingt für die Laufende Entwicklungsarbeit sondern für Release-Versionen in einem separaten Repository. Exe und Unit-Dateien im Entwickungsrepository machen zu viel "Noise".

Inwiefern sind Exe- und Unit-Dateien in der Build-Chain enthalten?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Requion »

und ein einheitliches LineEnding verwenden

Das ist sehr wichtig. In einer ehemaligen Firma hatten wir deshalb mal nen ganzen Tag zu tun das in Ordnung zu bringen (was aber auch daran lag das es ein paar Entwickler mehr waren).
Aber auch bei mir privat muss ich darauf achten, weil ich immer mal zwischen Win und Linux wechsel.
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von marcov »

mse hat geschrieben:
Socke hat geschrieben:Gerade im industriellen Berech wird die gesamte Build-Chain (IDE, Compiler, Assembler, Linker, Debugger) in einer Versionkontrolle erfasst;

Aber nicht unbedingt für die Laufende Entwicklungsarbeit sondern für Release-Versionen in einem separaten Repository. Exe und Unit-Dateien im Entwickungsrepository machen zu viel "Noise".


Ja. Was Socke sagt passiert, sicher, und ich mache es auch, aber nur ausnahmsweise. Zb man macht eine speziell Binär für einen (gross-) Kunden, und man weißt das man möglich nach zehn Jahre da noch Modifikationen mit minimaler Risiko (denke an Dinge als Textformat der Export ändern, neuen Firmennamen oder so)

Aber das wird ganz schon nicht mehr zu verwalten. Virtueller Maschinen kann man vielleicht in zehn Jahren überhaupt nicht mehr ans drehen bekommen, also das ist nur fuer kurzfristiger Support.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von marcov »

Warf hat geschrieben:Binäry Dateien (z.B. exe) nicht in das Entwicklungsrepo commiten. Versionierungssysteme sind auf Text ausgelegt, und das bedeutet zum einen, binäre dateien sind unglaublich langsam im upload, zum anderen, du kannst bei binären dateien nicht mergen, sondern bekommst jedes mal konflikte.
Außerdem musst du auch keine Konfig dateien wie z.B. die lps commiten, sowie keine Backup Dateien (.bak), ObjectFiles(.o), ppu's, Verwendete Abhängigkeiten (DLL's, Bibliotheken, Packages, etc).


Und EXEs systematisch eintragen macht backups groß und langsam.

Was du Commiten solltest sind alle Quelltext dateien, Benötigte Resourcen (z.B. Bilder), Projektdateien (lpi) oder Compilescripte (make), Dokumentation, Roadmap, Readme.


Zusätzlich ausgelieferten binäre Dateien (EXE oder JPG grosser als ein Icon usw) trage ich in ein separates Repo ein. Das mutiert weniger, ist also nicht so einen Backup aufwand (*)

Aber backups (und dann liebst auch Offsite) sind mindestens so wichtig als solcher Quatsch.

Unsere SVN server war auf RAID gespeichert, aber das hilft nicht wenn die den Server klauen. (fast geklaut, mein Boss kam morgens ins Büro, und der Server stand draußen am Zaun. Diebe sind wahrscheinlich gestört gewesen, und sind schnell über den Zaun geklettert, und haben den Server stehen lassen. Aber die hätten alle RAM geklaut (Idiot, weil RAM war damals relativ billig, und ältere Typen fast wertlos), auch von der Server.

Also Backups immer täglich, und remote. Eben wenn man RAID hat. Eine kleine Backup kann man nach eine raspberry pi mit ein 32GB Stick zu Hause synchronizieren. (für das Leben solcher Stick oder SD Karte ist es aber auch gut den Backup kompact zu halten. Mehrere Tagen Backup auf der Stick halten, und weniger schreiben heißt längere Lebenszeit des Flashmediums)

(*) SVN's hot-backup.py modifiziert um die letze 4 backups jedes Repo zu halten, und das wird dann mit rsync extern gebracht. Nicht mutiert heißt keinen neuen backup)

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Marsmännchen »

Okay, es schält sich eine relativ einheitliche Stoßrichtung heraus. Im wesentlichen geht es um Quellcode, Ressourcen und Doku (ja, auch Readme-Files :lol: ). Bei ".gitignore" bin ich in der Dokumentation schon vorbeigekommen :) . Ich muss auch sagen: dass es in der GIT-Doku ein deutsches Openbook gibt, verdient schon Respekt. Das erleichtert den Einstieg doch sehr. Versionskontrolle ist auch nicht so eine Geheimwissenschaft, wie ich erst dachte. Man muss sich halt einfummeln.

Nachdem ich jetzt meinen Taschenrechner fast fertig habe (ich bin noch am entwanzen) werde ich mich jetzt auf das weltbewegende Entwickeln eines Weckers stürzen... und das mit Versionierung 8) ! Als erstes werde ich heute abend Git installieren und mir ein Remoterepository besorgen. Ich tendiere zu BitBucked.

Danke auch für die Cheats (einheitliches LineEnding - Commit sollte zumindest kompilierfähig sein).
Ich mag Pascal...

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Marsmännchen »

Requion hat geschrieben:
und ein einheitliches LineEnding verwenden

Das ist sehr wichtig. In einer ehemaligen Firma hatten wir deshalb mal nen ganzen Tag zu tun das in Ordnung zu bringen (was aber auch daran lag das es ein paar Entwickler mehr waren).
Aber auch bei mir privat muss ich darauf achten, weil ich immer mal zwischen Win und Linux wechsel.


Ist zwar OfTopic, aber weil ich grade mal nachgesehen habe: Wie kann ich denn für ein einheitliches LineEnding sorgen? Ich dachte, da gibt's bestimmt einen Schalter in den Lazarus-Options und hab in der Doku gestöbert. Da fand ich das hier:
LineEnding is a constant which contains the current line-ending character. This character is system dependent, and is initialized by the system. It should not be set.

This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics
Ich mag Pascal...

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: Welche Dateien in Versionskontrolle sichern

Beitrag von mse »

Marsmännchen hat geschrieben:Ist zwar OfTopic, aber weil ich grade mal nachgesehen habe: Wie kann ich denn für ein einheitliches LineEnding sorgen?

Für die zur aktuellen Plattform passenden Zeilenenden in den ausgecheckten Quellcode Dateien sorgen sowohl SVN als auch git.
https://git-scm.com/docs/git-config
core.eol
Sets the line ending type to use in the working directory for files that have the text property set. Alternatives are lf, crlf and native, which uses the platform’s native line ending. The default value is native. See gitattributes[5] for more information on end-of-line conversion.

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von Marsmännchen »

Danke

Edit: Bei der Installation wurde ich von Git gefragt, wie ich es mit dem LineEnding halten möchte. Ich habe die Defaultoption gewählt (bei commit konvertiert Git nach LF, bei checkout konvertiert es nach dem Defaultending des jeweiligen Betriebssystems). Ich hoffe, das ist jetzt richtig. Na, ich werde es merken.
Ich mag Pascal...

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Welche Dateien in Versionskontrolle sichern

Beitrag von marcov »

Marsmännchen hat geschrieben:
Requion hat geschrieben:
und ein einheitliches LineEnding verwenden

Das ist sehr wichtig. In einer ehemaligen Firma hatten wir deshalb mal nen ganzen Tag zu tun das in Ordnung zu bringen (was aber auch daran lag das es ein paar Entwickler mehr waren).
Aber auch bei mir privat muss ich darauf achten, weil ich immer mal zwischen Win und Linux wechsel.


Ist zwar OfTopic, aber weil ich grade mal nachgesehen habe: Wie kann ich denn für ein einheitliches LineEnding sorgen?


Das konnte lange Zeit nicht mit GIT. In SVN ist ein Repo in eine gewisse Line-endung(also, es ist Serverside definiert). mit GIT hängt alles ab von der korrekten Konfiguration der Client. Eine falsche Client Konfiguration kann der Server inkonsistent machen. Line-ende-handlung waren damals eine der Hauptgründe um FPC von CVS auf SVN um zu stellen.

GIT Advocatisten wie Graeme sagen das es in letzter Zeit auch gelöst ist für GIT, aber ich habe das noch nicht kontrolliert.

Ich dachte, da gibt's bestimmt einen Schalter in den Lazarus-Options und hab in der Doku gestöbert. Da fand ich das hier:
LineEnding is a constant which contains the current line-ending character. This character is system dependent, and is initialized by the system. It should not be set.


Lazarus muss das nicht überwachen. GIT soll das tun, und es soll verweigern oder konvertieren wenn nötig.

Antworten