git-Archiv vs cp -R
-
22-08-2019 - |
Frage
Wenn ich einen Klon eines Git Repository als Cache-Kopie auf einem Remote-Server für Capistrano / vlad Stil Einsatz haben, ist es besser, A zu tun)
git archive --format=tar origin/master | (cd #{destination} && tar xf -)
oder B)
cp -R cached-copy #{destination} && rm -Rf #{destination}/.git
Um zu klären, das Repository bereits auf dem Remote-Server ist, und ich möchte nur eine bestimmte Version zu einem Veröffentlichung Verzeichnis auf demselben Server bei der Bereitstellung kopieren.
Lösung
Ich würde sagen, eigentlich
rsync -avP /local/repo/* server:/remote/repo
Das funktioniert, solange es auf OK ist überspringen alle Punkt-Dateien im Repo, nicht nur .git
. Wenn Sie überspringen wollen nur .git
dann werden Sie die -f
Option benötigen und die Manpage.
Ich liebe rsync . Funktioniert prima und die meiste Zeit können Sie es verwenden, wie Sie scp verwenden würde!
Andere Tipps
A)
Sie speichern die Netzwerk-Overhead die .git Verzeichnis übertragen, die möglicherweise sehr groß sein könnte, je nachdem, wie viel Geschichte und Objekte im aktuellen HEAD nicht.
Wenn Sie jemals eine tatsächliche Git Repository auf dem entfernten Ende haben wollte bist du besser dran zu einem echten Repository schieben und nur die Deltas zu ändern.
Weder!
Ein besserer Weg, dies zu tun ist:
-
git fetch
Cache - Klonen, den Cache zu Ihrem aktuellen Verzeichnis (mit den
--no-checkout
Optionen aktiviert) - Kasse commit Sie wollen.
Wenn Sie einen lokalen Klon tun Git verwendet Hardlinks. Das heißt, bis Sie eine Datei ändern, die Sie nicht, Sie 1.000 Installationen haben und verwenden können (fast) nur den Raum, den Sie für einen brauchen würde. Auf diese Weise wird alot auch schneller Archivierung oder rsync.
Auch jemand schon geschrieben, damit Sie Ihren Code hat.
vigetlab des capistrano_rsync_with_remote_cache
Ich benutze dies mit Subversion und es funktioniert gut für mich.