Через бюрократію мені потрібно отримати список всіх змінених файлів у моєму сховищі для звіту (я почав із наявного вихідного коду).
Що мені потрібно запустити, щоб отримати цей список?
Через бюрократію мені потрібно отримати список всіх змінених файлів у моєму сховищі для звіту (я почав із наявного вихідного коду).
Що мені потрібно запустити, щоб отримати цей список?
Відповіді:
Для файлів, змінених між заданою 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
Хоча ruvim пропонує у коментарях :
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>
Різні варіанти диф-фільтра від документації на git diff :
diff-filter = [(A | C | D | M | R | T | U | X | B)… [*]]
Виберіть лише файли, додані (A), скопійовані (C), видалені (D), модифіковані (M), перейменовані (R), змінено їх тип (тобто звичайний файл, символьна посилання, підмодуль ...), змінені (T), є нерозподіленими (U), невідомими (X), або провели парне з'єднання (B). Можна використовувати будь-яку комбінацію символів фільтра (включаючи жодну). Коли * (All-or-none) додано до комбінації, всі шляхи вибираються, якщо в порівнянні є якийсь файл, який відповідає іншим критеріям; якщо немає файлу, який відповідає іншим критеріям, нічого не вибирається.
Крім того, ці великі літери можуть бути зменшені для зменшення. Напр. --Diff-filter = Оголошення виключає додані та видалені контури.
Якщо ви також хочете перерахувати статус (наприклад, A / M), перейдіть --name-only
на --name-status
.
Список нестандартних модифікованих можна отримати, використовуючи 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 - він покаже файли зі змінами
то якщо ви хочете знати, які зміни потрібно внести, це можна перевірити способами,
git diff - покаже всі зміни у всіх файлах
добре лише тоді, коли буде змінено лише один файл
і якщо ви хочете перевірити конкретний файл, тоді використовуйте
git diff