Forum: PC-Programmierung git commit --amend soll hash summe beibehalten


von Felix (Gast)


Lesenswert?

Hallo,

ich möchte in git ein commit machen, welcher aber die hash nicht 
verändern soll.

Ziel ist es die Hashnummer im Code in der Version zu hinterlegen und zu 
committen.

Jetzt ist die Hash natürlcih auch von der Zeit abhängig.

Aber auch wenn ich die Zeit vom vorigen commit angebe, wird die Hash 
verändert
1
git commit --amend --date "Wed May 4 12:53:50 2022 +0200" --no-edit
das Datum habe ich vom vorigen commit kopiert.

trotzdem ändert sich die Hash summe.

von ddd (Gast)


Lesenswert?

Der Hash ergibt sich aus dem Inhalt des Objekts.
Somit geht 'gleicher Hash' nicht mit anderem Inhalt.

von Andi (Gast)


Lesenswert?

Felix schrieb:
> Ziel ist es die Hashnummer im Code in der Version zu hinterlegen und zu
> committen.
>
> Jetzt ist die Hash natürlcih auch von der Zeit abhängig.

Und vom Inhalt, damit...

> trotzdem ändert sich die Hash summe.

... muss sich der Hash verändern.
Ist auch gut so. Mich würde es jedenfalls beunruhigen wenn jemand ohne 
Spuren zu hinterlassen im Repository Code ändern kann...

von Jim M. (turboj)


Lesenswert?

Kannste knicken. Du simuliertst hier einen Angriff auf eine Krypto 
Infrastruktur.

Das ist (oder war bisher) mit SHA1 abgesichert, da brauchst Du ein 
komplettes Amazon Rechenzentum um das in überschaubarer Zeit zu knacken.

Das Git macht sich IIRC auch in die Hosen wenn 2 Commits die gleiche 
SHA1 Summe haben.

von foobar (Gast)


Lesenswert?

Mach mal den folgenden Text korrekt:
1
Der SHA-1-Hash dieses Textes lautet:
2
  eabf7f17403a0a2943adcc1502bef01e015807ca

Da SHA-1 ja "gebrochen" ist, ist das nur eine kleine Fleißaufgabe ;-)

von Achim M. (minifloat)


Lesenswert?

Wie wäre es, einen commit zu machen, der die finalisierte Software 
darstellt. Danach dessen commit-hash per postbuild in das binary 
einpflegen und mit einem commit sofort hinterher eben das binary 
sichern.

Nicht schön, aber funktional.

mfg mf

: Bearbeitet durch User
von Marcel (Gast)


Lesenswert?

Ein Tag mit einem Versionsstring setzen und diesen im Code hinterlegen!

von Laborant (Gast)


Lesenswert?

Felix schrieb:
> Ziel ist es die Hashnummer im Code in der Version zu hinterlegen und zu
> committen.

Das gehört nicht in das Repository/den Code von dem Projekt. Das ist 
Aufgabe des Packagers. Wenn du bspw. ein DEB/RPM/NIX/... Paket baust, 
kannst du die sourcen patchen oder zusätzliche 
CFLAGS=-DVERSION=v1.2.3-pre3+git.3784678 setzen.

von Jan K. (jan_k776)


Lesenswert?

Wie bereits genannt, ein `--amend` ändert, genau so wie ein rebase 
grundsätzlich den hash. Muss man sich dran gewöhnen, dann geht es ;)

Um den SHA oder eine andere Versionsbeschreibung aus git (siehe 
https://git-scm.com/docs/git-describe) in den Code zu bekommen, darf er 
nicht in die sourcen, sondern muss von einem build script z.B. in ein 
DEFINE oder eine header Datei geschrieben werden, die nicht comitted 
wird.
Die Infos daraus werden im build Schritt in die Binary eingebaut, 
nicht als Klartext in die sourcen, die man einchecken müsste und somit 
das Henne/Ei Problem entsteht.

von imonbln (Gast)


Lesenswert?

Ich denke, du könntest da was mit Git Attributes bauen 
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#_keyword_expansion. 
Dann könntest du in deinem Projekt einen Platzhalter einfügen und beim 
Check-out trägt git dort die SHA1 des HEAD Commits ein automatisch ein. 
Wenn nun durch eine TOM (Technisch organisatorische Maßnahme) 
sichergestellt wird, dass die offiziellen Builds immer nur in ein Clean 
Repo gebaut werden, sollte das in etwa deine Anforderung erfüllen.

von Bob (Gast)


Lesenswert?

Felix schrieb:

> Ziel ist es die Hashnummer im Code in der Version zu hinterlegen und zu
> committen.

Wozu soll das gut sein? Verwaltet git den Code oder umgekehrt?.....

von Bob (Gast)


Lesenswert?

Jan K. schrieb:

> nicht als Klartext in die sourcen, die man einchecken müsste und somit
> das Henne/Ei Problem entsteht.

So kann man es auch ausdrücken... :-)

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.