Git архив без первого / начального коммита
Как сделать архив tar из репозитория git с момента выбранной фиксации?
Этот вопрос похож на все изменения в Git archive, кроме первого коммита, но в результате мне нужен архив.tar, а не файл git patch.
Объяснение: я делаю "модули" для странной PHP CMS, где нет реального механизма написания расширений. Чтобы отправить мои модули, я должен отправлять только измененные файлы клиентам, в то время как мне все еще нужно иметь все файлы CMS в Git (все они добавляются только при первом коммите).
2 ответа
Итак, получатель этого архива не имеет репозитория, но имеет содержание какого-либо коммита, и вы отправляете на него замены, которые он может распаковать?
Похоже мерзавец архива --output
опция в windows не сообщает компрессору о перенаправлении, которое должным образом отказывается записывать сжатый вывод в то, что он считает терминалом, но это легко обойти:
git archive -o update-old-new.tgz newcommit \
$(git diff --name-only --diff-filter=AM oldcommit..newcommit) | cat
Тот | cat
в конце это обходной путь.
Я забыл о archive
, но его использование означает, что вам не нужно сначала извлекать $ newcommit, так что это намного лучше, чем раньше checkout;diff|tar
комбо.
Тем не менее, это не может обработать обновление, достаточно большое, чтобы преодолеть ограничения командной строки, или пробелы или другие раздражающие символы в путевых именах. Запасной вариант
git checkout newversion
git diff --name-only --diff-filter=AM oldversion.. \
| tar Tczf - update-old-new.tgz
Запустите это на верхнем уровне ваших папок:
tar cvfz files-changed.tgz `git diff <newrev> <oldrev> --stat --name-only `
например
tar cvfz files-changed.tgz `git diff HEAD HEAD~3 --stat --name-only `