Forum: PC-Programmierung Versionsverwaltung und Testdaten


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

es ist Freitag, es läuft ein Backup, und ich habe Zeit, mich mit 
Grundsatzfragen zu beschäftigen.

Für die Softwareentwicklung nutze ich immer noch SVN als 
Versionsverwaltung, weil es alles bietet, was ich benötige. Das meiste, 
was ich mache, sind Auswerte- und Konvertierungsskripte und -Programme.

Die eigentlichen Quelltexte sind winzig. Insgesamt hat kaum ein Programm 
mehr als 5kZeilen.

Was den meisten Platz einnimmt, sind die Testdaten. Die meisten davon 
sind Echtdaten.

Bisher habe ich die Testdaten immer im Repository untergebracht, weil 
zum Gegentesten alter Versionsstände auch die alten Testdaten gehören. 
Sie fressen ja kein Brot.

Außer freitags, wenn das Backup läuft. So ein 4-GB-Repo, von denen 3,9X 
GB Testdaten sind, dauert schon etwas zu packen. Und viele Repos dauern 
leider erst Recht...

Also:

Wie macht ihr das? Kommen bei euch Testdaten ins Repository oder werden 
die separat abgelegt?

Wenn ja: Werden die irgendwie abgespeckt?

Wenn nein: Wie haltet Ihr das Projekt-Repository und die anderen Daten 
konsistent?

von J. S. (jojos)


Lesenswert?

Kann man mit SVN auch Repos verlinken bzw wie bei git als externe subdir 
einbinden? So würde ich es mit git machen.

von Walter T. (nicolas)


Lesenswert?

J. S. schrieb:
> Kann man mit SVN auch Repos verlinken bzw wie bei git als externe subdir
> einbinden?

Ah, Du meinst ein zweites Repo nur mit sich selten ändernden Daten 
(Testdaten und Co.) verlinken. Dann würde sich das zweite Repo recht 
selten ändern und damit das Backup beschleunigt.

Das könnte klappen.

J. S. schrieb:
> So würde ich es mit git machen.

Würdest Du oder machst Du es so?

von J. S. (jojos)


Lesenswert?

Wir (4ma) ist schon länger von SVN nach git umgezogen, beides habe ich 
nicht administriert. In git haben einige Kollegen dicke Blobs abgelegt, 
da kriegt der Admin immer einen dicken Hals weil das git ziemlich 
lahmlegt wenn diese Blobs auf Änderung überprüft.
Ich müsste mal nachfragen wie es jetzt gehandhabt wird, git submodule 
sind schon komplizierter. Und svn ist wie gesagt schon lange raus hier.

von Walter T. (nicolas)


Lesenswert?

Verstehe, ihr seid also (grob) auf dem gleichen Stand wie ich, nur eben 
auf Git: Die Repos sind riesig, und irgendwie ist das lästig, und 
irgendwie kann man aber auch damit leben.

von J. S. (jojos)


Lesenswert?

Ja, ich habe auch eine private gitlab Instanz im Proxmox für eigenes 
Zeug. Da kommt man kaum mit den Updates hinterher, vielleicht gibt es da 
auch schon bessere Strategien. Würde mich auch interessieren.
Es gibt bei uns noch ein NAS wo große Mengen Test/Bilddaten liegen, aber 
das ist nicht direkt mit Anwendungen verknüpft. Für automatisierte Tests 
willst du sicherlich definierte Szenarien haben wollen.

von Udo K. (udok)


Lesenswert?

Walter T. schrieb:
> Wie macht ihr das? Kommen bei euch Testdaten ins Repository oder werden
> die separat abgelegt?

Da kommt alles ins Repo rein.  Was würdest du gewinnen, wenn du die 
Testdaten separat ablegst, ausser noch mehr Chaos? Hier wird auch SVN 
verwendet, ist einfacher als git.  SVN speichert was ich weiss sowieso 
nur Änderungen ab, und die Daten werden komprimiert.

von Daniel A. (daniel-a)


Lesenswert?

Walter T. schrieb:
> Außer freitags, wenn das Backup läuft. So ein 4-GB-Repo, von denen 3,9X
> GB Testdaten sind, dauert schon etwas zu packen. Und viele Repos dauern
> leider erst Recht...

Ich habe ein tägliches Backup, mit rsync & hardlinks. Ein Rasberry PI 
verbindet sich per ssh+rsync auf den Server. Ein paar Stunden dauert das 
schon, sind hunterte GB, aber so schlimm ist das ganze eigentlich nicht. 
Ist ja inkrementell, und ich merke davon ja nichts.

von Walter T. (nicolas)


Lesenswert?

Daniel A. schrieb:
> Ist ja inkrementell, und ich merke davon ja nichts.

Udo K. schrieb:
> Was würdest du gewinnen, wenn du die
> Testdaten separat ablegst,

Ich merke davon schon etwas, weil ich keinen Server betreibe. Für alles, 
was Software angeht, bin ich ein 1-Mann-Betrieb. Die Repos liegen bei 
mir lokal auf einem Büro-PC. Ausnahme ist nur ein einziges Repo, das auf 
einem Raspberry Pi liegt und dazu dient, CAM-Daten mit 
Maschinensteuerungen auszutauschen.

Obwohl der PC acht virtuelle Kerne besitzt, läuft beim Backup alles 
extrem zäh, vor allem während des SVN-Dumps vom Raspberry PI, aber eben 
auch beim Packen der Repository-Hotcopies.

von Michael B. (laberkopp)


Lesenswert?

Walter T. schrieb:
> Kommen bei euch Testdaten ins Repository

Ja, aber nicht jedesmal komplett kopiert, sondern nur inkremental die 
veränderten/hinzugefügten Tests.

Nach jedem erfolgreichen build wird alles eingecheckt, von Sourcen über 
build Skripte bis Testdaten und Testergebnissen und Kompilaten mit 
Setup.


Es ist jederzeit möglich, das build mit Tests in ein eigenes Verzeichnis 
auszuchecken und dort die damals gebuildete Version laufen zu lassen.

Ja, wir haben auch die EXEs eingecheckt, obwohl die viel Platz kosten 
weil die incremental nicht komprimierbar sibd, aber nachdem sich mal 
herausstellte, dass ein rebuild des Eingecheckten nicht zum selben 
Ergebnis führte weil Uhrzeiten und uninitialisierte Speicherbereiche zu 
Abweichungen führten, haben wir genug Plattenplatz gekauft.

von Jan K. (jan_k776)


Lesenswert?

Nein. (Größere) Daten haben in Repos nichts zu suchen. Dafür gibt es 
Datenbanken, Sharepoints, oder auch Binary Storages wie Artifactory oder 
GitLab (Generic) Package Registries. Revisionierte Skripte stellen 
sicher, dass diese Daten on demand heruntergeladen werden.

von Daniel F. (df311)


Lesenswert?

ich würde mal den Ansatz versuchen:

0. Testdaten abspecken, hunderte identische (korrekte) Tests braucht man 
eher selten. Hauptaugenmerk auf Grenz- und Sonderfälle
1. (test)Daten in ein eigenes Repository packen. Das ändert sich nur, 
wenn sich aus irgendeinem Grund die Testdaten ändern.
2. Symlink auf das Testdaten-Repository. Der Symlink wird versioniert 
aber alles unterhalb wird aus der Versionierung ausgeschlossen

SVN ist ziemlich lange her aber es sollte eigentlihc funktionieren.
Würde es auch mit git so versuchen, bevor ich mir git submodule (wieder) 
antue probiere ich es lieber zuerst so ;-)

von Walter T. (nicolas)


Lesenswert?

Daniel F. schrieb:
> Hauptaugenmerk auf Grenz- und Sonderfälle

Naja, Geschwindigkeitstests mit großen Datenmengen gehören ja auch dazu.

von Rolf M. (rmagnus)


Lesenswert?

J. S. schrieb:
> Kann man mit SVN auch Repos verlinken bzw wie bei git als externe subdir
> einbinden? So würde ich es mit git machen.

In svn gibt es externals. Das ist flexibler als git submodules.

J. S. schrieb:
> In git haben einige Kollegen dicke Blobs abgelegt, da kriegt der Admin
> immer einen dicken Hals weil das git ziemlich lahmlegt wenn diese Blobs
> auf Änderung überprüft.

Es gibt auch noch git-lfs (large file storage). Da werden große 
Binary-Files separat abgespeichert, und im Repo liegt nur noch der Link, 
so dass der git-Client die Files automatisch da runterladen kann. Man 
kann Filenamen-Patterns konfigurieren, die automatisch ohne weiteres 
Zutun im lfs landen. Das ganze ist aber wohl etwas hakelig, wenn man es 
über ssh nutzen will.

von Franko S. (frank_s866)


Lesenswert?

Testdaten werden hier per script erzeugt, die Testdaten selbst werden 
somit nicht gesichert, bis auf ein paar kleinere Fetzen die sich nicht 
per script erzeugen lassen. Kommt nat. auf das Projekt an mit welchen 
Daten man da hantiert.

von Jan (dunno)


Lesenswert?

Testdaten als eigenes repo, aus dem eigentlichen Produktivprojekt als 
external verweisen. Dann kann man im Trunk immer die aktuellsten 
Testdaten nutzen, im branch eine stable-version peggen und bei jedem Tag 
die external-version festziehen die man braucht. ET voila.

Testdaten per Skript erzeugen wenn möglich - Grad für Loadtest oder so- 
ist natürlich auch ne gute Idee.

von Rbx (rcx)


Lesenswert?

Walter T. schrieb:
> Was den meisten Platz einnimmt, sind die Testdaten. Die meisten davon
> sind Echtdaten.

Wahnsinn. Testdaten kann man auch abkürzen mit dem bekannten "keine 
Nachrichten". Hinsichtlich der Echtdaten sollte man schauen, ob nicht 
Platzhalter drin sind, die sich gut speichern, verkleinern oder 
verwalten lassen.

von Oliver (imonbln)


Lesenswert?

Wie viel Umbau darf es denn sein?

Im Idealfall solltest du deine Testdaten von dem Code trennen, 
Vorschläge wie das gehen kann wurde ja schon gemacht.

Vielleicht solltest du außerdem überlegen, ob es sinnvoll für dich ist 
von Subversion auf git zu konvertieren. Ein Vorteil in deinem Backup 
Szenario ist, dass git dezentral ist.

Das Backup vom git kann daher einfach n-weitere (bare) Repositorys sein, 
welche irgendwo liegen. Diese Repositorys pullen dann einfach alle 
x-Stunden die letzten Änderungen. Das sollte schnell gehen, da nur das 
diff der letzten Änderung übertragen wird.

Sollte es doch mal zum Recovery kommen, alle Git Instanzen sind 
gleichberechtigt, die Entwickler müssen sich nur einigen welche Instanz 
das Haupt Repository ist, im Worstcase ändern sie einfach nur die URL 
des Remote und können gleich weiter arbeiten.

von Walter T. (nicolas)


Lesenswert?

Die Frage lautet nicht: "Was sollte ich machen?" Die Frage war: "Wie 
macht ihr das?", implizierend, dass ein Projekt mit Testdaten vorhanden 
ist.

Wer das Problem nicht hat, braucht sich auch nicht den Kopf zu 
zerbrechen, eine Lösung zu finden.

Hier noch einmal die ursprüngliche Frage:

Walter T. schrieb:
> Wie macht ihr das? Kommen bei euch Testdaten ins Repository oder werden
> die separat abgelegt?
>
> Wenn ja: Werden die irgendwie abgespeckt?
>
> Wenn nein: Wie haltet Ihr das Projekt-Repository und die anderen Daten
> konsistent?

: Bearbeitet durch User
von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Auch wenn man es nicht soll - ich checke regelmäßig 1-2GB an PDFs ein, 
weil es sich so leichter replizieren lässt. Da sind aktuell so 250gb 
drinnen (+ scriptset, Word Files,...).

Auf aktueller Hardware ist der overhead mehr als vertretbar. Sobald git 
weiß welcher stand lokal herrscht, geht das eigentliche Update ziemlich 
schnell. Einchecken dagegen dauert etwas
... Bei einigen GB sind das aber nur einige, wenige minuten.

Das Bottleneck ist eigentlich immer das 1gbit LAN.

Bis auf den eigentlichen Transfer sehe ich keinen Unterschied zwischen 
lokalem und remote zugriff über Handy und von (wireguard).

Bei rsync muss Datei für Datei verglichen werden. Das sehr ich als 
mögliche schwachstelle. Git hat dazu z.B. seine Metadaten im 
Hintergrund.

Am nas läuft gitea unter truenas auf einem 4000er i3 mit 32 oder 64gb 
RAM

Clients sind ab i5 der 8000er Generation mit zumindest 32gb RAM

73

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Hans W. schrieb:
> Bei rsync muss Datei für Datei verglichen werden. Das sehr ich als
> mögliche schwachstelle.

Bei rsync (wenn man es richtig anwendet), bilden beide Seiten jeweils 
Checksummen und haben dafür die volle lokale SATA/NVMe-Bandbreite zur 
Verfügung. Über das Bottleneck Netzwerk gehen nur die Prüfsummen zum 
vergleichen, eigentliche Daten nur wenn Unterschiede gefunden wurden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.