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 `
Другие вопросы по тегам