Ich möchte eine Liste der geänderten und hinzugefügten Dateien in einem bestimmten Commit erhalten, damit ich sie exportieren und ein Paket mit der Dateistruktur generieren kann.
Die Idee ist, das Paket zu bekommen und es auf dem Server zu extrahieren. Aus vielen Gründen kann ich keinen Hook erstellen, um das Repo automatisch abzurufen, und der einfachste Weg, den Server auf dem neuesten Stand zu halten, besteht darin, dieses Paket zu generieren.
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
Um dies abzurunden, ist hier der Befehl, der an tar weitergeleitet wird. Dadurch werden die Dateien in ein Teerarchiv exportiert.
quelle
Hier ist ein einzeiliger Befehl, der unter Windows 7 funktioniert. Führen Sie ihn aus dem Ordner der obersten Ebene Ihres Repositorys aus.
quelle
Wenn Ihr Commit-Hash beispielsweise a9359f9 lautet, lautet dieser Befehl:
git archive -o patch.zip a9359f9 $(git diff --name-only a9359f9^..a9359f9)
extrahiert die im Commit geänderten Dateien und legt sie in patch.zip ab, während die Projektverzeichnisstruktur erhalten bleibt.
ein bisschen ausführlich, der Commit-Hash wird dreimal erwähnt, aber es scheint für mich zu funktionieren.
habe es hier: http://tosbourn.com/2011/05/git/using-git-to-create-an-archive-of-changed-files/
quelle
function
in PowerShell den Befehl auf einen Funktionsnamen reduzieren und$args
den Commit-Hash nur einmal übergeben. In * nix können Sie wahrscheinlich Shell-Scripting verwenden, um den gleichen Effekt zu erzielen.git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1 commit2)
. Das an denarchive
Befehl übergebene Commit kann ein beliebiges Commit sein (höchstwahrscheinlich entweder das HEAD oder das spätere Commit) , und die Dateien werden so abgerufen, als ob sie in dieser Commit-Phase ausgecheckt wären. Die commit1 und commit2 bestandendiff
nur dann verwendet werden , um die Liste der Dateien zu ziehen , um zu generieren - sie haben nicht die Version der Dateien gezogen beeinflussen.diff
git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1A commit1B; git diff --name-only commit2A commit2B; git diff --name-only commit3A commit3B)
git diff -z --name-only commit1 commit2 | xargs -0 git archive -o patch.zip HEAD
Sie können diff mit Tortoise Git nach MS Windows exportieren :
Ich klicke mit der rechten Maustaste und wähle TortoiseGit > Protokoll anzeigen und Protokollnachrichten werden geöffnet.
Wählen Sie zwei Revisionen aus und vergleichen Sie sie. Der Unterschied zwischen wird offen sein.
Wählen Sie die Dateien aus und exportieren Sie die Auswahl in ... in einen Ordner!
quelle
Ich musste meinen Testserver aktualisieren und Dateien hinzufügen, die sich seit Version 2.1 geändert haben.
Für mich funktionierte eine ähnliche Lösung wie für James Ehly, aber in meinem Fall wollte ich ein Paket mit Unterschieden zwischen zwei älteren Tags in das Archiv exportieren - tag_ver_2.1 und tag_ver_2.2, nicht das einzige Commit.
Zum Beispiel:
tag_ver_2.1 = 1f72b38ad
tag_ver_2.2 = c1a546782
Hier ist ein modifiziertes Beispiel:
quelle
Die folgenden Befehle haben bei mir funktioniert.
Wenn Sie möchten, dass sich die Dateien beim letzten Festschreiben unterscheiden:
oder wenn Sie einen Unterschied zwischen zwei bestimmten Commits wünschen:
oder wenn Sie nicht festgeschriebene Dateien haben, denken Sie daran, dass git Weg ist, alles festzuschreiben, Zweige sind billig:
quelle
Ich habe ein PHP-Skript erstellt, um geänderte Dateien unter Windows zu exportieren. Wenn Sie einen localhost-Entwicklungsserver mit PHP eingerichtet haben, können Sie ihn problemlos ausführen. Es speichert Ihr letztes Repository und exportiert immer in denselben Ordner. Der Exportordner wird vor dem Export immer geleert. Sie sehen auch gelöschte Dateien in rot, damit Sie wissen, was auf dem Server gelöscht werden muss.
Dies sind nur zwei Dateien, daher werde ich sie hier veröffentlichen. Nehmen wir an, Ihre Repositorys befinden sich unter c: / www in ihren eigenen Ordnern und http: // localhost zeigt ebenfalls auf c: / www und ist PHP-fähig. Lassen Sie uns diese 2 Dateien in c: / www / git-export -
index.php:
git-export.ini:
Und jetzt laden Sie localhost / git-export / in einen Browser. Das Skript ist so eingerichtet, dass es immer nach c: / www / export exportiert wird. Ändern Sie alle Pfade entsprechend Ihrer Umgebung oder ändern Sie das Skript entsprechend Ihren Anforderungen.
Dies funktioniert, wenn Sie Git so installiert haben, dass sich der Befehl git in Ihrem PATH befindet. Dies kann konfiguriert werden, wenn Sie das Windows Git-Installationsprogramm ausführen.
quelle
So exportieren Sie geänderte Dateien ab einem Datum:
Verknüpfung (Alias verwenden)
Alias in .gitconfig
quelle
Hier ist ein kleines Bash-Skript (Unix), das ich geschrieben habe und das Dateien für einen bestimmten Commit-Hash mit der Ordnerstruktur kopiert:
Erstellen Sie eine Datei mit dem Namen '~ / Scripts / copy-commit.sh' und geben Sie ihr Ausführungsberechtigungen:
Dann aus dem Stammverzeichnis des Git-Repositorys:
quelle
Ich hatte auch schon einmal ein ähnliches Problem. Ich habe ein einfaches Shell-Skript geschrieben.
Der obige Befehl zeigt Commit Hash (Revision) von commit_HashX zu commit_HashY in umgekehrter Reihenfolge an.
Nun das Haupt-Shell-Skript mit dem obigen Befehl.
Fügen Sie diesen Code zu export_changes.sh hinzu. Übergeben Sie nun die Datei und schreiben Sie Hashes an das Skript fest.
Stellen Sie sicher, dass initial commit_hash das erste Argument und dann das letzte commit_hash sein muss, bis zu dem Sie Änderungen exportieren möchten.
Beispiel:
$ sh export_changes.sh hashX hashY
Legen Sie dieses Skript in das lokale Verzeichnis git oder legen Sie den Pfad für das lokale Verzeichnis git im Skript fest. Ich hoffe es hilft..!
quelle
Dies funktioniert für mich sowohl unter Unix als auch unter Windows:
Der Befehl enthält zwei Platzhalter. Sie müssen sie für Ihren Zweck ersetzen:
__1__ : Ersetzen Sie die Commit-ID des Commits direkt vor allen Commits, die Sie exportieren möchten (z. B. 997cc7b6 - vergessen Sie nicht, diesen doppelten Punkt nach der Commit-ID beizubehalten - dies bedeutet "alle Commits einbeziehen, die neuer als dieses Commit sind").
__2__ : Durch vorhandenen Pfad ersetzen, in den Sie Ihre Dateien exportieren möchten (z. B. ../export_path/)
Als Ergebnis erhalten Sie Ihre Dateien in einer Ordnerstruktur (keine Reißverschlüsse / Teere ...), da möglicherweise jemand daran gewöhnt ist , Schildkröten-SVN-Exporte in SVN-Repositorys zu verwenden.
Dies ist beispielsweise sehr nützlich, wenn Sie die manuelle Bereitstellung von hinzugefügten / geänderten Dateien mit wenigen letzten Commits durchführen möchten. Sie können diese Dateien dann einfach über den FTP-Client kopieren.
quelle