2010-06-08 3 views
10

Я очень новичок в Git, и у меня есть небольшая проблема.Как экспортировать все измененные/добавленные файлы из Git?

В SVN [это похоже на историю о дураках и лошадях дяди Альберта ... «во время войны ...»], когда я хотел обновить производственный участок своими последними изменениями, я бы сделал diff в TSVN и экспортировать все измененные/добавленные файлы между двумя версиями. Как вы можете себе представить, после этого эти файлы можно было легко загрузить на производственный сайт.

Однако, похоже, что я не могу найти опцию «экспорт измененных файлов» в Git. Я могу сделать diff и см. изменений, я могу получить список файлов, но я не могу их фактически экспортировать. Есть ли разумный способ сделать это? Я что-то пропустил?

Чтобы уточнить еще раз, мне нужно экспортировать все изменения между двумя конкретными обязательствами.

Заранее благодарен!

ответ

14

Как вы хотите экспортировать их? Вы говорите, что у вас уже есть список; что еще ты хочешь? Предположив вы получаете список с git diff --name-only ...

git archive --output=<file> HEAD $(git diff --name-only ...) 

tar -czf <file> $(git diff --name-only ...) 

cp $(git diff --name-only ...) <export-directory> 

Что-то вроде этого?

Или вы могли бы даже использовать diff diff - его можно применять с git apply (или даже patch, я считаю).

+1

Первый вариант работает для меня! В идеале я бы использовал вариант cp, но сохранил структуру папок (я предполагаю, что это вопрос параметров для git diff?) Я не могу поверить, что это так просто ... спасибо! –

+0

Просто увидел ваше редактирование .. К сожалению, я не могу использовать 'git apply' или' patch', у меня есть только FTP-доступ к сайту: -/ –

+0

@ dr Hannibal Lecter: Да, я решил, что вам нужно пройти мимо фактического файлы. И да, подстановка команд ('$ (...)') является одной из тех ключевых вещей, которая делает все возможное (и простое) в оболочках Linux. – Cascabel

2

Заимствование из нескольких ответов в here, вот еще один способ экспортировать файлы, измененные в рабочем пространстве:

git diff --diff-filter=ACMRT --name-only HEAD | xargs tar -rf export.tar 

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

git add * 

[Это работает в ГИТ-Баш в Windows]

Смежные вопросы