8

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

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

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

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

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

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Kuroro
  • git-archive архивирует любые файлы - они просто представляют собой кучи данных. Здесь только два имени объектаHEAD а такжеHEAD^, Я пытался заставить вас проверить, чтобы убедиться, что оба из них являются действительными именами объектов в репозитории, в котором вы запускаете команду. Например, возможно, в нем только один коммит, поэтомуHEAD^ ничего не значит.

    от Cascabel
  • ГОЛОВА - это "где ты сейчас" (независимо от того, какой коммит вы используете, обычно это кончик текущей ветви, но если вы находитесь в состоянии «отсоединенный HEAD», это просто «коммит, на котором вы находитесь»). HEAD ^ начинается с коммита, на котором вы работаете, вернитесь на один коммит, т. Е. На любой коммит.git log отображается как его родитель. & quot; (В случае фиксации слияния может быть более одного родителя; HEAD ^ выбирает «первый», и существует больше синтаксиса для именования других.)

    от torek
  • Я подозреваю, что некоторые из них не могут архивировать? двоичная?

    от Kuroro
  • git diff - name-only HEAD ^ выведет список измененных файлов, которые я хотел бы заархивировать. Я проверил эту команду с тестовым репозиторием, она работает так, как она есть. Это не работает в моем реальном репозитории проекта asp.net

    от Kuroro
  • Из какой команды это происходит? (Каковы результатыgit diff --name-only HEAD^? Вы в правильном хранилище, верно?)

    от Cascabel
  • 1

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

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

  • 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 действительно существует.