Welche Dateien in Versionskontrolle sichern

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

Welche Dateien in Versionskontrolle sichern

Beitragvon Marsmännchen » 11. Mär 2016, 08:56 Welche Dateien in Versionskontrolle sichern

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?
Du kannst sicherlich auch mit C++, Java und C# programmieren... aber warum sollte man das machen???
Marsmännchen
 
Beiträge: 260
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: FreeBSD 11, FPC 3.0.2, Lazarus 1.6.2 | 
CPU-Target: 32bit
Nach oben

Beitragvon mse » 11. Mär 2016, 09:10 Re: Welche Dateien in Versionskontrolle sichern

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
mse
 
Beiträge: 1407
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Requion » 11. Mär 2016, 09:34 Re: Welche Dateien in Versionskontrolle sichern

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.
Requion
 
Beiträge: 106
Registriert: 3. Feb 2016, 09:39
Wohnort: nahe Grimma
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0) | 
CPU-Target: 32/64Bit,ARM(RPi)
Nach oben

Beitragvon Socke » 11. Mär 2016, 10:36 Re: Welche Dateien in Versionskontrolle sichern

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
Socke
 
Beiträge: 2314
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon mse » 11. Mär 2016, 10:48 Re: Welche Dateien in Versionskontrolle sichern

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".
mse
 
Beiträge: 1407
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Warf » 11. Mär 2016, 11:04 Re: Welche Dateien in Versionskontrolle sichern

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.
Warf
 
Beiträge: 499
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Socke » 11. Mär 2016, 11:12 Re: Welche Dateien in Versionskontrolle sichern

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
Socke
 
Beiträge: 2314
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Requion » 11. Mär 2016, 11:14 Re: Welche Dateien in Versionskontrolle sichern

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.
Requion
 
Beiträge: 106
Registriert: 3. Feb 2016, 09:39
Wohnort: nahe Grimma
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0) | 
CPU-Target: 32/64Bit,ARM(RPi)
Nach oben

Beitragvon marcov » 11. Mär 2016, 12:00 Re: Welche Dateien in Versionskontrolle sichern

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: 962
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon marcov » 11. Mär 2016, 12:14 Re: Welche Dateien in Versionskontrolle sichern

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)
marcov
 
Beiträge: 962
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon Marsmännchen » 11. Mär 2016, 14:19 Re: Welche Dateien in Versionskontrolle sichern

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).
Du kannst sicherlich auch mit C++, Java und C# programmieren... aber warum sollte man das machen???
Marsmännchen
 
Beiträge: 260
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: FreeBSD 11, FPC 3.0.2, Lazarus 1.6.2 | 
CPU-Target: 32bit
Nach oben

Beitragvon Marsmännchen » 11. Mär 2016, 14:29 Re: Welche Dateien in Versionskontrolle sichern

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
Du kannst sicherlich auch mit C++, Java und C# programmieren... aber warum sollte man das machen???
Marsmännchen
 
Beiträge: 260
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: FreeBSD 11, FPC 3.0.2, Lazarus 1.6.2 | 
CPU-Target: 32bit
Nach oben

Beitragvon mse » 11. Mär 2016, 15:34 Re: Welche Dateien in Versionskontrolle sichern

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.
mse
 
Beiträge: 1407
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Marsmännchen » 11. Mär 2016, 16:49 Re: Welche Dateien in Versionskontrolle sichern

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.
Du kannst sicherlich auch mit C++, Java und C# programmieren... aber warum sollte man das machen???
Marsmännchen
 
Beiträge: 260
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: FreeBSD 11, FPC 3.0.2, Lazarus 1.6.2 | 
CPU-Target: 32bit
Nach oben

Beitragvon marcov » 11. Mär 2016, 20:18 Re: Welche Dateien in Versionskontrolle sichern

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.
marcov
 
Beiträge: 962
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried