Как экспортировать все измененные/добавленные файлы из Git?

Я очень новичок в Git, и у меня есть небольшая проблема.

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

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

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

Заранее спасибо!


person dr Hannibal Lecter    schedule 08.06.2010    source источник


Ответы (2)


Как вы хотите их экспортировать? Вы говорите, что у вас уже есть список; что еще ты хочешь? Предположим, вы получаете свой список с 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 - его можно применить с git apply (или даже patch, я думаю).

person Cascabel    schedule 08.06.2010
comment
Первый вариант мне подходит! В идеале я бы использовал вариант cp, но сохранил структуру папок (я предполагаю, что это вопрос параметров для git diff?) Я не могу поверить, что это так просто .. спасибо! - person dr Hannibal Lecter; 08.06.2010
comment
Только что увидел ваше редактирование. К сожалению, я не могу использовать git apply или patch, у меня есть только доступ к сайту по FTP :-/ - person dr Hannibal Lecter; 08.06.2010
comment
@dr Hannibal Lecter: Да, я подумал, что вам нужно передать настоящие файлы. И да, подстановка команд ($(...)) — одна из тех ключевых вещей, которые делают все возможным (и простым) в оболочках Linux. - person Cascabel; 08.06.2010
comment
К сожалению, в настоящее время я на 50% застрял в Windows, но git bash и cygwin, как правило, облегчают мою жизнь... хотя я часто понятия не имею, что делаю :) Еще раз спасибо за полезную информацию! - person dr Hannibal Lecter; 08.06.2010
comment
Как бы вы сделали diff, игнорируя файлы только с измененными разрешениями и не измененным содержимым? - person Cesar; 23.07.2010
comment
с каждым днем ​​я люблю git больше! ЭТО КРУТО! - person eckes; 09.02.2012
comment
чтобы использовать третий вариант здесь, вы, вероятно, захотите добавить параметр --parents к CP, чтобы он сохранял пути к файлам в месте назначения - person Tao; 21.06.2012
comment
как вы это делаете в TortoiseGit? - person John Woo; 16.01.2017

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

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

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

git add *

[Это работает в git-bash в Windows]

person Altair7852    schedule 23.04.2017
comment
При выполнении этой команды на ведомой машине Windows я получаю следующую ошибку: «xargs» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. - person Navin prasad; 23.01.2019
comment
Это предполагает, что вы запускаете его в среде git-bash (отличной от обычной командной строки), которая имеет доступ к дополнительным инструментам unix. - person Altair7852; 23.01.2019