2017-07-25 2 views
0

Ich betrachte einen pre-recieve/pre-push Haken (nicht bewusst, die man verwendet werden soll) die UmsetzungIst es möglich, Dateien zu ändern und auf git Pre-Receive/Pre-Push-Hook zu committen?

Use Case:

ich ein Repository von JSONs haben, irgendeine kann die Dateien im Repo ändern (dh commit). Aber beim Push möchte ich die diffs (d. H. Dateien hinzugefügt/gelöscht/modifiziert) gegen die Upstream-Ebene berechnen und sie als eine andere JSON-Datei im Repository speichern und den Push zusammen mit dem neuen JSON fortsetzen, der hinzugefügt wurde.

Ist das möglich?

+2

Es * könnte * möglich sein (obwohl ich das nicht versucht habe). Ich würde es jedoch nicht empfehlen. Ein Commit ist eine Änderung der Codebasis und es sollte eine verantwortliche Person geben. Wer wird dieses neue Commit machen? Wenn es den Build bricht, wessen Verantwortung ist es, das Problem zu beheben? Können Sie das Problem, das Sie lösen möchten, genau beschreiben? Warum ändern Sie diese Datei und verpflichten sich automatisch? Vielleicht gibt es eine bessere Lösung. –

+0

@NoufalIbrahim Ich habe das Fragedetail ausgearbeitet. – Karthik

+0

@Karthik bedeutet, dass neue Änderungen von anderen Entwicklern auf Remote-Ebene verschoben werden und Sie die Diffs mit Ihrer lokalen Niederlassung berechnen möchten? Aber wenn es neue Änderungen auf der Fernbedienung gibt, hörst du mit dem Drücken auf und drückst zuerst auf git pull hin. –

Antwort

0

Pre-Recieve ist ein Server-Side-Hook. Basierend auf Ihrer Anforderung sollten Sie Pre-Commit oder Pre-Push Hook verwenden. Und die Hooks können eine bestimmte Datei ändern.

Wie für pre-commit Hooke, können Sie unter Skript string hinzufügen, um die Änderungen an Dateinamen und zu begehen, wenn Sie Änderungen sind begehen:

#!/bin/sh 

echo "string" >> filename 
git add filename 
0

Diese Informationen, die Sie benötigen trivialer berechenbar. Ein Git-Unterschied zwischen Versionen kann Ihnen die Informationen geben, die Sie benötigen. Wenn Sie es in einer Datei aufbewahren, besteht die Gefahr, dass Dinge synchron laufen. Mir wäre es viel lieber, wenn diese direkt im Bedarfsfall direkt aus dem Repository generiert würden, anstatt sie aus einem Cache auszulesen. Also, ich bin mir nicht sicher, warum du das machen willst. Wenn ich es jedoch brauchte, ging ich auf eine der folgenden Arten vor.

  1. Ein Post-Commit-Hook, der diese Änderung auf der Client-Seite vor dem Push macht. Dies hat den Nachteil, dass Leute Commits in ihrem Code sehen, die sie nicht gemacht haben.

  2. Bereitstellung eines Skripts, das dies ausführt und Push-Vorgänge (mit einem serve-seitigen Hook) deaktiviert, bis der Benutzer das Skript ausführt und diese Informationen im Repository generiert. Dies macht es ein wenig Handbuch, aber der Benutzer weiß, was er getan hat und hat die Kontrolle.

  3. Lassen Sie ein Skript auf dem Server nach dem Commit laufen (vielleicht in Batches), das diese Informationen generiert und speichert es vorzugsweise in einem separaten Repository.

Verwandte Themen