Из-за бюрократии мне нужно получить список всех измененных файлов в моем репозитории для отчета (я начал с существующего исходного кода).
Что я должен бежать, чтобы получить этот список?
Из-за бюрократии мне нужно получить список всех измененных файлов в моем репозитории для отчета (я начал с существующего исходного кода).
Что я должен бежать, чтобы получить этот список?
Ответы:
Для файлов, измененных между данным SHA и вашим текущим коммитом:
git diff --name-only <starting SHA> HEAD
или если вы хотите включить измененные, но еще не зафиксированные файлы:
git diff --name-only <starting SHA>
В общем, следующий синтаксис всегда скажет вам, какие файлы изменились между двумя коммитами (указанными в их SHA или других именах):
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusфлажка вместо --name-onlyудобного для получения списка файлов и просмотра статуса их изменения, например, «Добавлен» или «Изменен».
--name-statusпоказывают, что с ними произошло
Чтобы найти имена всех файлов, измененных с момента вашей последней фиксации:
git diff --name-only
Или (для получения дополнительной информации, включая неотслеживаемые файлы):
git status
Чтобы просмотреть все неотмеченные отслеженные измененные файлы:
git diff --name-only
Для того, чтобы перечислить все поставил отслеживаемые измененные файлы:
git diff --name-only --staged
Чтобы просмотреть все помеченные и неустановленные отслеженные измененные файлы:
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Чтобы вывести список всех неотслеживаемых файлов (перечисленных в списке, исключаяgit status любые игнорируемые файлы):
git ls-files --other --exclude-standard
Если вы используете это в сценарии оболочки, и вы хотите программно проверить , если эти команды возвращаются ничего, вы будете заинтересованы в git diff«s --exit-codeварианта.
Когда я добавил / изменил / удалил много файлов (с момента последнего коммита), мне нравится смотреть на эти изменения в хронологическом порядке.
Для этого я использую:
Чтобы вывести список всех не подготовленных файлов:
git ls-files --other --modified --exclude-standard
Чтобы получить дату последнего изменения для каждого файла:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Хотя Рувим предлагает в комментариях :
xargs -0 stat -c '%y %n' --
Чтобы отсортировать их от самых старых до самых последних:
sort
Псевдоним облегчает использование:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
Или (короче и эффективнее, благодаря ruvim )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Например:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Теперь я могу просмотреть свои модификации, от самых старых до самых последних.
xargsи разовый вызов stat? Полный однострочник:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Мне нужен список файлов, которые изменили содержимое между двумя коммитами (только добавлены или изменены), поэтому я использовал:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Различные параметры diff-фильтра из документации git diff :
Diff-фильтр = [(А | C | | М | Р | Т | У | Х | В) ... [*]]
Выберите только те файлы, которые добавлены (A), скопированы (C), удалены (D), изменены (M), переименованы (R), чей тип (т. Е. Обычный файл, символическая ссылка, подмодуль,…) изменен (T), Unmerged (U), Неизвестен (X), или у них было сломано соединение (B). Может использоваться любая комбинация символов фильтра (включая ни одного). Когда * (All-or-none) добавляется в комбинацию, выбираются все пути, если есть какой-либо файл, который соответствует другим критериям в сравнении; если нет файла, соответствующего другим критериям, ничего не выбирается.
Кроме того, эти заглавные буквы могут быть исключены в нижнем регистре. Например, --diff-filter = ad исключает добавленные и удаленные пути.
Если вы также хотите перечислить статус (например, A / M), измените --name-onlyна --name-status.
Список unstaged модифицирована может быть получен с помощью git statusи grepкоманды , как показано ниже. Что-то вроде git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
С ним git showможно получить аналогичный результат. Для просмотра коммита (как он выглядит при git logпросмотре) со списком включенных файлов, используйте:
git show --name-only [commit-id_A]^..[commit-id_B]
Где [commit-id_A]находится начальный коммит и [commit-id_B]последний коммит, который вы хотите показать.
Особое внимание с ^символом. Если вы не укажете это, информация commit-id_A не будет развернута.
Если вы хотите проверить измененные файлы, вам нужно позаботиться о многих мелких вещах, например, которые лучше всего использовать, например, если вы хотите проверить, какие из файлов были изменены, просто введите
git status - он покажет файлы с изменениями
тогда, если вы хотите знать, какие изменения должны быть сделаны, это можно проверить различными способами,
git diff - покажет все изменения во всех файлах
это хорошо, только когда изменен только один файл
и если вы хотите проверить определенный файл, используйте
мерзавец