Git: как получить все измененные файлы и новые файлы в папке или zip? - PullRequest
50 голосов
/ 08 ноября 2010

Как говорит мой вопрос, после изменения файлов и добавления новых файлов в мой репозиторий я обычно фиксирую файлы с git , но иногда мне нужно, чтобы все измененные / измененные файлы были скопированы в папку для самоорганизации.причины.

Любой вариант?

Ответы [ 6 ]

78 голосов
/ 08 ноября 2010

Предполагая, что вы еще не подтвердили и хотите упаковать все файлы, которые в данный момент имеют локальные модификации, вы можете получить список измененных файлов с помощью git ls-files --modified.Если вы хотите файлы, которые были изменены последним коммитом, вы можете использовать git diff --name-only HEAD^.Куда вы идете, там до вас.Примеры:

zip modified-files.zip $(git ls-files --modified)
cp $(git ls-files --modified) ../modified-files

Обратите внимание, что в настоящее время используются версии файлов в рабочем дереве.

Если у вас есть пробелы в именах файлов, вам придется пойти на немного больше хлопот.

(Конечно, в зависимости от того, что вы действительно пытаетесь сделать, вы, возможно, ищете git stash, который скрывает все измененные файлы и оставляет вас в чистоте.дерево, или вы можете просто захотеть создать временную ветвь для коммита.)

55 голосов
/ 08 ноября 2010

Чтобы сделать именно то, что вы просили (предполагая, что вы уже зафиксировали и хотите создать архив файлов, измененных при последнем коммите), вы можете сделать:

git archive --format=zip HEAD `git diff HEAD^ HEAD --name-only` > a.zip

Если вы удалили файлы вcommit, чтобы предотвратить ошибку pathspec, используйте --diff-filter=d:

git archive --format=zip HEAD `git diff --diff-filter=d HEAD^ HEAD --name-only` > a.zip

Но, возможно, вы действительно хотите создать патч, используя:

git diff HEAD^ HEAD > a.patch

и применить этот патч там, где он вам нужен:

patch -p1 < a.patch

Конечно, применение патча работает только в том случае, если целевой каталог уже содержит старую версию вашего репозитория.

15 голосов
/ 14 июля 2012

Если вы используете TortoiseGIt, он также обеспечивает это.
Выберите папку в проводнике
Щелкните правой кнопкой мыши, выберите меню, TortoiseGit-> Показать журнал.

Выберите рабочий каталог ипоследняя совершенная версия.
Щелкните правой кнопкой мыши.Сравните ревизии.Выберите файлы, которые вы хотите сохранить / экспортировать.
Щелкните правой кнопкой мыши.Экспорт в папку.Готово.

2 голосов
/ 03 сентября 2018

Zip измененные и вновь созданные файлы в репозитории git

zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})
0 голосов
/ 12 сентября 2017

Вот скрипт, который может значительно упростить этот процесс, он скопирует весь измененный файл в используемый определенный каталог, а также сохранит структуру каталогов базы кода.

run: sh scr.sh

=====================================================

#!/bin/sh
FILES=`git ls-files --modified`
for x in $FILES
do
        prev_dir=$PWD
        echo "MY Dir = $prev_dir"
        mkdir -p $1/$x
        cd $1/$x
        cd ../
        rm -r *
        cp $prev_dir/$x ./.
        cd $prev_dir
done

================================================

0 голосов
/ 28 сентября 2016
mkdir -p /c/temp/blah && cp $(git diff <your commit hash> --name-only) /c/temp/blah

Я использую Git Bash для Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...