2012-10-11 7 views
5

Ich habe ein Remote-Bare-Repository (kein Arbeitsverzeichnis), das Install-Tears erstellt. Funktioniert gut. Aber jetzt möchte ich nur noch die geänderten Dateien erstellen. Ich habe es so versucht:git Archiv von geänderten Dateien auf bare Repos

git archive --format=tar --prefix='/' HEAD `git diff V1.02 --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz 

Das funktioniert gut mit meinem lokalen Repository. Es erstellt ein tar mit den Dateien von der getaggten Version V1.02 bis zum letzten Commit. Aber es funktioniert nicht mit bloßen Repos. Gibt es eine andere Lösung?

Antwort

1

Das Zwei-Commit-Formular von git diff funktioniert in einem leeren Repository (git diff [options] <commit> <commit> [--] [<path>...]).

Folgendes sollten das tun, was ich verstehe, Sie wollen:

git archive --format=tar --prefix='/' master `git diff V1.02 master --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz 

Ich schlage vor, auch die HEAD von Ihrem ursprünglichen Befehl zu master Ändern (wie oben dargestellt) mit dem Rest des Befehls konsistent zu sein, und seine belastbar, wenn jemand ändert, welcher Zweig HEAD zeigt (alternativ alle Vorkommen von master durch HEAD im obigen Beispiel ersetzen).

+0

Hey Jacob, danke für deine Antwort. Schade, dass ich keine Benachrichtigung von stackoverflow bekommen habe. –

+0

Wenn ich Ihren Befehl versuche, gibt mir git folgendes: 'fatal: mehrdeutiges Argument 'V1.02': unbekannte Revision oder Pfad nicht im Arbeitsbaum. Verwenden Sie '-', um Pfade von Revisionen zu trennen. Wo muss ich das '-' setzen? 'git archive --format = tar --prefix = '/' Master' git diff V1.02 - Master - Nur-Name' | gzip -9> ../tar.tar.gz fatal: schlechte Revision 'V1.02'' –

+0

'-', wenn überhaupt, geht nach allen Nicht-Pfad-Optionen. In Ihrem Beispiel würden Sie es überhaupt nicht verwenden, da Sie mit 'git diff' keine Form der Pfadbegrenzung verwenden. –

Verwandte Themen