Список всех файлов, измененных в запросе на растяжение в Git/GitHub

Есть ли способ (из командной строки) перечислить имена всех файлов, измененных в PR в Git/GitHub? Это будет использоваться для определения того, какие тесты нужно запускать в сборке Travis CI для этого PR.

CI build выполняет эти команды, прежде чем называет наш script:

git clone --depth=50 git://github.com/jekyll/jekyll.git jekyll/jekyll
cd jekyll/jekyll
git fetch origin +refs/pull/2615/merge
git checkout -qf FETCH_HEAD

Ответ 1

В общем, вы можете перечислить файлы, измененные между любыми двумя коммитами, с помощью git diff --name-only :

Как перечислить только имена файлов, которые изменились между двумя коммитами?

Проблема здесь, кажется, заключается в определении "базы слияния". Если все ветки начинаются с master, вы можете сделать следующее:

git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD master)

Это покажет вам изменения между точкой, в которой FETCH_HEAD был разветвлен с master до текущего FETCH_HEAD. Я проверил это локально, и ветки PR вырезаны из master. Я считаю, что это должно работать.

Ответ 2

Я не смог найти способ увидеть только список измененных файлов в GitHub (т.е. без diff и комментариев), но это можно сделать с помощью одной строки в консоли браузера:

Array.from(document.getElementsByClassName('js-details-target')).forEach((e) => {e.click();})

Это свернет все блоки diff, оставив только имена файлов.

Ответ 3

Поиск Google отправил меня сюда, хотя это немного другой вопрос.

Этот вопрос [подробности] имеет командную строку. Тем не менее, мне нужен список файлов, это нормально, если я вижу в графическом интерфейсе

Здесь показан способ просмотра списка файлов в графическом интерфейсе:

  • откройте запрос на извлечение

  • перейдите на вкладку [Измененные файлы]

    Разговор 0 Commits 3 [Изменен файл] 8

  • нажмите на выпадающее меню после "n файлов" в нижней строке [Files changed]

    Изменения всех коммитов v... [8 файлов v]... +638 -266

(щелкните по v, выпадайте, после файлов в приведенной выше строке)

Ответ 4

Хромированная консоль...

Примечание: это сломается, если Github изменит теги/классы/идентификаторы на странице.

const fileElems = document.querySelectorAll('#files div.file-info a.link-gray-dark');
const filePaths = [];

for (let a of fileElems) {
    filePaths.push(a.title);
}

const filePathsStr = filePaths.join('\n');
console.log(filePathsStr);
copy(filePathsStr);
console.log('Copied to the clipboard as well 😁');