Git: как получить все файлы и новые файлы в папке или zip?
Как говорится в моем вопросе, после изменения файлов и добавления новых файлов в мой репозиторий я обычно фиксирую файлы с git, но иногда мне нужны все измененные/измененные файлы, скопированные в папку для организация - я сам объясняю.
Любая опция?
Ответы
Ответ 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 для окон.