мне нужно проверять каждый коммит, сделанный в ветке, нужно перечислить измененные, добавленные и удаленные файлы в Git - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно перечислить все измененные, удаленные и добавленные файлы из ветки в одну строку.позже поместите добавленный и измененный в один файл с именем add_or_modified.txt и добавьте в удаленный файл.есть ли способ найти измененные, добавленные и удаленные файлы в одной строке?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

В заголовке вашего вопроса сказано, что вам нужно проверять каждый коммит.В этом случае, возможно, вы имеете в виду что-то вроде git log.С другой стороны, ваше описание вывода звучит так, будто вам нужен только один список файлов (или, позже, два).Вместо этого предлагается git diff.

git log --name-only --format="" <upstream_branch_name>..<branch_name>

или

git diff --name-only <upstream_branch_name>..<branch_name>

Например, если вы проверяете ветку с именем my_feature и хотите знать, что меняется в каждом коммите с тех пор, какпоскольку он отклоняется от ветви develop, вы можете сказать

git log --name-only --format="" develop..my_feature

Здесь я использовал --format="", чтобы вы просто получили список имен файлов;если вы генерируете список для каждого коммита, вы можете захотеть сделать что-то другое с опцией format.Я упоминаю об этом, потому что, как было написано, файл может появляться несколько раз - даже показываться один раз, потому что commit A создал его, и снова, потому что commit B удалил его.Если это нежелательно, и вы просто хотите, чтобы сетевое изменение было связано с ветвью, используйте diff вместо log.

Вниз вы можете изменить это значение на

git log --name-status --format="" develop..my_feature

или

git diff --name-status develop..my_feature

и обработайте результаты, чтобы разделить удаления в свой собственный файл.Имейте в виду, что с --name-status, git по умолчанию применяет обнаружение переименования.Таким образом, вы можете получить несколько строк, таких как

D    file1
A    file2
M    file3

, что вы хотели бы видеть.Тот, который начинается с D, был удален, поэтому поместите его в список удаления;другие были добавлены и изменены.Но вы также можете получить строки вроде

R99  fileX   fileY

, означающие, что git думает, что вы переименовали fileX в fileY и внесли небольшие изменения в тот же коммит.Если вы предпочитаете git, просто дайте вам

D    fileX
A    fileY

, чтобы вы просто видели, какие пути появляются и исчезают индивидуально, а затем добавьте параметр --no-renames, как

git diff --name-status --no-renames develop..my_feature
0 голосов
/ 14 декабря 2018

(Поскольку вы не упоминаете, между какими состояниями вы хотите выполнить различие, я предположил самый простой контекст, различие между HEAD. Если вы пытаетесь увидеть различие между другими заданными состояниями, не стесняйтесь добавлять его вна ваш вопрос, я адаптирую свой ответ)

Я бы сделал что-то вроде

git diff --name-status

Перед именами файлов у вас будут буквы, символизирующие состояние файла:

A added
C changed
D deleted
M modified
R renamed
T changed
U unmerged
X unknown
B broken pairing

Подробнее об этих состояниях см. здесь .


А для списка удаленных файлов в файле (тот же принцип для других состояний) вы можетеделать

git diff --diff-filter=D > deleted.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...