Вопрос по git – Использование Git для создания архива измененных файлов

8

Я ищу простое решение, чтобы сделать архив последних измененных файлов.

Я получаю эту простую команду отGoogle

<code>git archive -o update.zip HEAD $(git diff --name-only HEAD^)
</code>

Когда я запускаю его в GIT BUSH, он говорит: fatal: Not a valid object name

Я подозреваю, что некоторые из них не могут архивировать? двоичная? Kuroro
Из какой команды это происходит? (Каковы результатыgit diff --name-only HEAD^? Вы в правильном хранилище, верно?) Cascabel
git diff - name-only HEAD ^ выведет список измененных файлов, которые я хотел бы заархивировать. Я проверил эту команду с тестовым репозиторием, она работает так, как она есть. Это не работает в моем реальном репозитории проекта asp.net Kuroro
git-archive архивирует любые файлы - они просто представляют собой кучи данных. Здесь только два имени объектаHEAD а такжеHEAD^, Я пытался заставить вас проверить, чтобы убедиться, что оба из них являются действительными именами объектов в репозитории, в котором вы запускаете команду. Например, возможно, в нем только один коммит, поэтомуHEAD^ ничего не значит. Cascabel
ГОЛОВА - это "где ты сейчас" (независимо от того, какой коммит вы используете, обычно это кончик текущей ветви, но если вы находитесь в состоянии «отсоединенный HEAD», это просто «коммит, на котором вы находитесь»). HEAD ^ начинается с коммита, на котором вы работаете, вернитесь на один коммит, т. Е. На любой коммит.git log отображается как его родитель. & quot; (В случае фиксации слияния может быть более одного родителя; HEAD ^ выбирает «первый», и существует больше синтаксиса для именования других.) torek

Ваш Ответ

3   ответа
1

Вам просто нужно отфильтровать файлы, удаленные во время этого сравнения, чтобы исправить эту ошибку:

git archive -o update.zip HEAD $(git diff --name-only --diff-filter=d HEAD^..HEAD)

Может бытьgit archive накладные расходы для этой задачи, и вы должны использоватьответ @ eckes.
Но вы все равно должны добавить--diff-filter=d исключить удаленные файлы из архива.

12

Я используюэтот ответ в этом случае это говорит мне

tar czf changed-files.tar.gz `git diff --name-only [diff options]`

Например, чтобы создать архив, содержащий файлы, измененные в последних четырех ревизиях, я делаю

tar czf changed-files.tar.gz `git diff --name-only HEAD~4..`

Это предполагает, что & # x2013; & # xA0; конечно же & # xA0; & # x2013; тотHEAD~4 действительно существует.

Error: User Rate Limit Exceeded Kuroro
Error: User Rate Limit Exceeded
1

Я использую этот псевдоним для включения новых файлов не в HEAD:

alias gittar='tar -czvf working-files.tgz \
              $(git status -s | sed -r "s/..(.*)/\1 /")'

Похожие вопросы