Подтвердить что ты не робот

Git: как получить все файлы и новые файлы в папке или zip?

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

Любая опция?

4b9b3361

Ответ 1

Предполагая, что вы еще не сделали этого, и хотите упаковать все файлы, которые в настоящее время имеют локальные модификации, вы можете получить список измененных файлов с помощью 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, который отбрасывает все измененных файлов и оставляет вас с чистым рабочим деревом, или вы просто можете сделать временную ветвь для фиксации.)

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

пробег: 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

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

Ответ 5

mkdir -p /c/temp/blah && cp $(git diff <your commit hash> --name-only) /c/temp/blah

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