Из-за бюрократии мне нужно получить список всех измененных файлов в моем репозитории (я начал с существующего исходного кода).
Что мне нужно запустить, чтобы получить этот список?
Из-за бюрократии мне нужно получить список всех измененных файлов в моем репозитории (я начал с существующего исходного кода).
Что мне нужно запустить, чтобы получить этот список?
Для файлов, измененных между заданным 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
Или (для получения дополнительной информации, включая файлы без следа):
git status
Чтобы просмотреть все неустановленные отслеживаемые измененные файлы:
git diff --name-only
Чтобы перечислить все поставленные отслеживаемые измененные файлы:
git diff --name-only --staged
Чтобы отобразить все поэтапные и неустановленные отслеживаемые измененные файлы:
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Перечислить все untracked файлы (те, которые перечислены git status
, поэтому не включая любые проигнорированные файлы):
git ls-files --other --exclude-standard
Если вы используете это в оболочке script и хотите программно проверить, вернули ли эти команды что-нибудь, вас будет интересовать опция git diff
--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
Чтобы отсортировать их от самых старых до более поздних:
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'
Например:
[email protected]:~> 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
Теперь я могу просмотреть мои изменения, от самого старого до более позднего.
С 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
и команды grep, как показано ниже. Что-то вроде git status -s | grep M
:
[email protected]:~/project-repo-directory# git status -s | grep M
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....