Я хотел бы получить список измененных и добавленных файлов в конкретном коммите, чтобы я мог их экспортировать и сгенерировать пакет с файловой структурой.
Идея состоит в том, чтобы получить пакет и распаковать его на сервере. По многим причинам я не могу создать ловушку для автоматического извлечения репозитория, и самый простой способ обновить сервер - это создать этот пакет.
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
Чтобы завершить это, вот команда, переданная tar. Это экспортирует файлы в tar-архив.
источник
Вот однострочная команда, которая работает в Windows 7. Запустите ее из папки верхнего уровня вашего репозитория.
источник
если ваш хеш фиксации, например, a9359f9, эта команда:
git archive -o patch.zip a9359f9 $(git diff --name-only a9359f9^..a9359f9)
извлечет файлы, измененные при фиксации, и поместит их в patch.zip, сохраняя при этом структуру каталогов проекта.
немного многословно, хеш коммита упоминается три раза, но, похоже, он работает для меня.
получил его здесь: http://tosbourn.com/2011/05/git/using-git-to-create-an-archive-of-changed-files/
источник
function
в PowerShell, чтобы уменьшить команду до имени функции и использовать$args
для передачи хэша фиксации только один раз. В * nix вы, вероятно, можете использовать сценарии оболочки для достижения того же эффекта.git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1 commit2)
. Фиксация, переданнаяarchive
команде, может быть любой произвольной фиксацией (скорее всего, HEAD или более поздняя фиксация) , и файлы извлекаются, как если бы они были извлечены на этой стадии фиксации. Commit1 и commit2 передаютсяdiff
только используются для создания списка файлов , чтобы тянуть - они не влияют на версию файлов вытягивались.diff
команду с точкой с запятой:git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1A commit1B; git diff --name-only commit2A commit2B; git diff --name-only commit3A commit3B)
git diff -z --name-only commit1 commit2 | xargs -0 git archive -o patch.zip HEAD
Вы можете экспортировать diff с помощью Tortoise Git в MS Windows:
Я щелкаю правой кнопкой мыши и выбираю TortoiseGit > Показать журнал и сообщения журнала будут открыты.
Выберите две версии и сравните их. Разница между будет открыта.
Выберите файлы и Экспорт выделенного в ... в папку!
источник
Мне нужно было обновить тестовый сервер и добавить файлы, которые изменились с версии 2.1.
Для меня сработало аналогичное решение, которое опубликовал Джеймс Эли, но в моем случае я хотел экспортировать в архивный пакет разницы между двумя старыми тегами - tag_ver_2.1 и tag_ver_2.2, а не единственной фиксацией.
Например:
tag_ver_2.1 = 1f72b38ad
tag_ver_2.2 = c1a546782
Вот модифицированный пример:
источник
Ниже команды работали для меня.
Если вам нужна разница файлов, измененных последней фиксацией:
или если вам нужна разница между двумя конкретными коммитами:
или если у вас есть незафиксированные файлы, помните, что git способ фиксировать все, ветки дешевы:
источник
Я сделал php-скрипт для экспорта измененных файлов в Windows. Если у вас есть сервер разработки localhost с настроенным php, вы можете легко его запустить. Он запомнит ваш последний репозиторий и всегда будет экспортировать в одну и ту же папку. Папка экспорта всегда очищается перед экспортом. Вы также увидите удаленные файлы красным цветом, чтобы вы знали, что удалить на сервере.
Это всего лишь два файла, поэтому я опубликую их здесь. Предположим, что ваши репозитории расположены в каталоге c: / www в их собственных папках и что http: // localhost также указывает на c: / www и поддерживает php. Поместим эти 2 файла в c: / www / git-export -
index.php:
git-export.ini:
А теперь загрузите localhost / git-export / в браузере. Сценарий настроен на экспорт всегда в c: / www / export - измените все пути в соответствии с вашей средой или измените сценарий в соответствии с вашими потребностями.
Это будет работать, если у вас установлен Git, так что команда git находится в вашем PATH - это можно настроить при запуске установщика Git для Windows.
источник
Чтобы экспортировать измененные файлы, начиная с даты:
Ярлык (используйте псевдоним)
Псевдоним в .gitconfig
источник
Вот небольшой сценарий bash (Unix), который я написал, который копирует файлы для заданного хэша фиксации со структурой папок:
Создайте файл с именем '~ / Scripts / copy-commit.sh' и дайте ему права на выполнение:
Затем из корня репозитория git:
источник
Я тоже сталкивался с подобной проблемой раньше. Я написал простой сценарий Shell.
Приведенная выше команда отобразит хэш фиксации (версия) от commit_HashX до commit_HashY в обратном порядке.
Теперь основной сценарий оболочки с использованием указанной выше команды.
Добавьте этот код в export_changes.sh. Теперь передайте файл и зафиксируйте хэши в скрипте.
Убедитесь, что начальный commit_hash должен быть первым аргументом, а затем последним commit_hash, до которого вы хотите экспортировать изменения.
Пример:
$ sh export_changes.sh hashX hashY
Поместите этот скрипт в локальный каталог git или установите путь к локальному каталогу git в скрипте. Надеюсь, поможет..!
источник
У меня это работает как для Unix, так и для Windows:
В команде есть два заполнителя. Вам необходимо заменить их по назначению:
__1__ : замените на идентификатор фиксации фиксации прямо перед всеми фиксациями, которые вы хотите экспортировать (например, 997cc7b6 - не забудьте сохранить эту двойную точку после идентификатора фиксации - это означает «задействовать все фиксации новее, чем эта фиксация»)
__2__ : замените существующим путем, по которому вы хотите экспортировать файлы (например, ../export_path/)
В результате вы получите свои файлы в структуре папок (без zip / tars ...), поскольку кто-то может использовать экспорт черепахи svn в репозитории svn.
Это, например, очень полезно, когда вы хотите выполнить развертывание вручную добавленных / измененных файлов нескольких последних коммитов. Таким образом, вы можете просто скопировать эти файлы через ftp-клиент.
источник
У меня тоже была такая же проблема. Решение @NicolasDermine не сработало, так как между сравниваемыми коммитами изменилось слишком много файлов. Я получил ошибку, что аргументы оболочки слишком длинные.
Как следствие, я добавил реализацию на Python. Это можно установить с помощью,
pip install gitzip
а затем выполнить с помощьюв корне репозиториев создавая
export.zip
файл, содержащий все измененные файлы, сохраняя структуру каталогов.Может кому-то это тоже нужно, поэтому решил поделиться здесь.
источник