Faluröd
Lieutenant
- Registriert
- März 2011
- Beiträge
- 648
Hallo zusammen!
Ich habe eine Frage, die insbesondere für alle Git-Tüftler interessant ist. Motivation ist folgende: Wir verwenden Git, um bestimmte Programme von uns zu verwalten. Wegen Archivierbarkeit wollen wir bei jeder produktiver Anwendung des Programms mit dokumentieren, mit welchem Code / welcher Programmversion die Berechnung ausgeführt wurde.
Der erste Gedanke ist klar: Wir speichern die Commit ID, denn deren Zweck ist ja genau, jeder Version einen Namen zu geben. Aber wir haben dann etwas weiter diskutiert, und sind leider auf etliche Fälle gekommen, bei denen die Commit ID nicht aussagekräftig ist: Der Nutzer könnte Skripte z.B. ändern, aber es gibt keinen Commit dieser Änderungen. Oder er könnte einen Feature-Branch nehmen, den es nur lokal gibt. Oder es ist ein temporäres Feature, was verworfen wird und dann der Branch irgendwann aufgeräumt wird. Lange Reder kurzer Sinn: Wir müssen mehr machen als einfach nur die Commit ID speichern.
Deswegen ist meine Frage: Was muss ich alles prüfen, damit die Git ID wirklich sicher ist? Also es kein Schlupfloch gibt, dass der real verwendete Code sich von dem unterscheidet, wenn ich diese ID vom Server auschecke.
Mein aktueller Entwurf wären im Kern folgende Git-Befehle. Die sind eingebettet in ein Skript, welches die Ausgaben der Git-Befehle weiter prüft.
Zu den einzelnen Zeilen:
Soweit ich das sehe, sollte ich mit Schritten 1+2 die notwendigen Informationen von Git bekommen, dass der aktuell verwendete Dateistand 1:1 ist wie auf dem Server? Und dann mit Schritt 3+4 dann per Tag + Commit-ID dieses Standes die notwendigen Infos erhalten, die wir bei jeder zu archivierender Anwendung mit dokumentieren müssen?
Danke euch schon mal fürs Mitdenken! Seid da gerne kreativ, welche Misuse-Fälle man alles mit Git-Repos machen kann, sodass man den Dateistand nicht mal eben rekonstruieren kann.
Ich habe eine Frage, die insbesondere für alle Git-Tüftler interessant ist. Motivation ist folgende: Wir verwenden Git, um bestimmte Programme von uns zu verwalten. Wegen Archivierbarkeit wollen wir bei jeder produktiver Anwendung des Programms mit dokumentieren, mit welchem Code / welcher Programmversion die Berechnung ausgeführt wurde.
Der erste Gedanke ist klar: Wir speichern die Commit ID, denn deren Zweck ist ja genau, jeder Version einen Namen zu geben. Aber wir haben dann etwas weiter diskutiert, und sind leider auf etliche Fälle gekommen, bei denen die Commit ID nicht aussagekräftig ist: Der Nutzer könnte Skripte z.B. ändern, aber es gibt keinen Commit dieser Änderungen. Oder er könnte einen Feature-Branch nehmen, den es nur lokal gibt. Oder es ist ein temporäres Feature, was verworfen wird und dann der Branch irgendwann aufgeräumt wird. Lange Reder kurzer Sinn: Wir müssen mehr machen als einfach nur die Commit ID speichern.
Deswegen ist meine Frage: Was muss ich alles prüfen, damit die Git ID wirklich sicher ist? Also es kein Schlupfloch gibt, dass der real verwendete Code sich von dem unterscheidet, wenn ich diese ID vom Server auschecke.
Mein aktueller Entwurf wären im Kern folgende Git-Befehle. Die sind eingebettet in ein Skript, welches die Ausgaben der Git-Befehle weiter prüft.
Code:
git branch --show-current
git diff origin/myCurrentBranch
git describe --exact-match
git log -1 –format=%H
Zu den einzelnen Zeilen:
- Hier greife ich den Namen des aktuell ausgecheckten Branches ab. Brauche ich zum einen für die 2. Zeile. Zum anderen hätte ich gesagt: Der Nutzer darf nur den Master- oder Development-Branch nutzen. Denn bei allen anderen kann passieren, dass diese gelöscht werden
- Damit möchte ich den aktuellen Stand des Git-Repos mit der letzten vom Server gepullten Version des aktuellen Branches vergleichen. Sind diese 1:1 gleich, dann ist die Rückgabe leer. Hat der Nutzer was geändert (egal ob unstaged, staged oder lokaler Commit ohne Push), dann ist die Rückgabe nicht leer. Das wäre auch der Fall, wenn es origin/myCurrentBranch gar nicht gibt, was zusätzlich zu Schritt 1 absichert, dass der Nutzer nur auf erlaubten Branches unterwegs ist.
- Mit der Zeile möchte ich den Git-Tag des aktuell ausgecheckten Standes abfragen. Das prüfe ich dann per Regexp, ob es dem typischen Muster unserer produktiv gekennzeichneten Versionen entspricht. Diese Tags sind geschützt, denn die dürfen nur Reviewer setzen, normale Nutzer jedoch nicht.
- Damit hole ich die Commit-ID der aktuell ausgecheckten Version.
Soweit ich das sehe, sollte ich mit Schritten 1+2 die notwendigen Informationen von Git bekommen, dass der aktuell verwendete Dateistand 1:1 ist wie auf dem Server? Und dann mit Schritt 3+4 dann per Tag + Commit-ID dieses Standes die notwendigen Infos erhalten, die wir bei jeder zu archivierender Anwendung mit dokumentieren müssen?
Danke euch schon mal fürs Mitdenken! Seid da gerne kreativ, welche Misuse-Fälle man alles mit Git-Repos machen kann, sodass man den Dateistand nicht mal eben rekonstruieren kann.