2010-11-24 11 views
1

Ich möchte git-push ein Verzeichnis voller Binärdaten zu einem Remote-Server.git squash gefolgt von Push überträgt Daten erneut

Da dies Tage dauern kann, übergebe ich lokal und drücke eine Datei nach der anderen (wenn ich alles auf einmal begehe und drücke, wenn die Übertragung unterbrochen wird, muss sie von Anfang an neu gestartet werden, richtig?).

Wenn alles übertragen wird, möchte ich alle diese Commits in eins zerquetschen. Wenn ich lokal quetsche und dann drücke, werden alle Daten erneut übertragen! was den Zweck meiner Strategie besiegt.

Vielleicht könnte ich mich in die Fernbedienung einloggen und die Squash-Operation remote wiederholen, aber gibt es eine bessere Möglichkeit, das zu tun, was ich tun möchte. Wie informiere ich Git, dass alle sensiblen Daten bereits auf dem Server sind?

Antwort

1

Zuerst Binärdateien nicht am besten in einem VCS verwaltet werden;)

Zweitens, wenn müssen Sie, könnten Sie auf dem Remote-Repo ein Haken Setup den Kürbis auszuführen, wenn eine bestimmte begehen (wie ein Push enthält nichts empfangen aber eine spezielle Datei, die bestätigt, dass alle vorherigen Commits gequetscht werden können).
Ich bin mir nicht sicher über die genaue Implementierung, aber es scheint, dass jede Lösung mit einem Git-Squash sowohl lokal als auch auf der entfernten Seite stattfinden müsste, um eine ähnliche Geschichte zu gewährleisten.

Und das wäre sehr sicher, wenn es andere Commits von anderen Mitwirkenden zu dem Remote-Repository gibt. Dann wäre es unmöglich, die Geschichte zwischen Ihrem lokalen Repo und dem, was auf der entfernten Seite getan wurde, zu synchronisieren ...
Die einzige andere Vorgehensweise nach einem solchen speziellen Push gefolgt von einem Squash auf der entfernten Seite wäre Benennen Sie Ihre aktuelle Verzweigung um und ziehen Sie die entfernte Verzweigung, um die lokale Version der Verzweigung auf die entfernte Seite zurückzusetzen.

+0

Danke für die Antwort! um ehrlich zu sein, benutze ich für meine Aufgabe git, weil es die einzige ist, die ich umbenennen kann: wenn ich beschließe, meine Fotosammlung zu organisieren/aufzuräumen, wird git nicht alles wieder auf den Server hochladen (rsync würde das tun)). Dann denke ich, es lohnt sich nicht, einen Haken auf der Fernbedienung zu setzen, ich werde mit der überladenen Geschichte leben. – rafak

0

Ich bin mir nicht sicher, aber ich denke, git wird die Objekte nicht übertragen, wenn sie sie bereits haben. Technisch enthält das Commit nicht Ihre binären Objekte, sondern nur eine Referenz auf einen Baum, der Verweise auf Objekte enthält. Jedes Objekt als eine eindeutige ID (die SHA), so dass es wissen sollte, dass es sie schon hatte oder nicht. Normalerweise ist es nicht nötig, die binären Objekte ein zweites Mal zu senden.

Probieren Sie es einfach aus, und das sollte funktionieren, wie Sie wollen, ohne etwas zu tun.

+0

Das dachte ich mir, aber wenn ich dränge, sagt Git, dass es überträgt (so viele MB wie es vom Elternteil des neuen gequetschten Commits gibt, und es dauert die entsprechende Zeit). Wenn ich jedoch die Festplattennutzung auf der Fernbedienung überprüfe, bleibt sie (fast) gleich, als ob die neu übertragenen Daten auf der Serverseite sofort ignoriert würden. – rafak

+0

hast du versucht git push --thin? – mb14

+0

Ja, es ändert nichts (und das Dokument sagt - Thin ist die Standardeinstellung). – rafak