Git - найти последний раз, когда файл был изменен в нескольких репо? - PullRequest
4 голосов
/ 03 апреля 2019

Я работаю в компании, которая создает одно приложение из> 100 небольших репозиториев.

Все эти репозитории содержат файл, скажем ivy.xml, который показывает зависимости проекта от других проектов иСторонние библиотеки.

Я бы хотел иметь возможность запускать команду git локально, на моей машине разработчика, чтобы узнать дату последнего изменения файла ivy.xml во всех репозиториях и, возможно, посмотреть журналзаявление и различие каждого изменения, даже если у меня нет всех репозиториев, проверенных локально, чего я, конечно, никогда не делаю, если их> 100!

Было бы здорово, если бы это былоотсортировано от самого последнего изменения до самого старого изменения.

РЕДАКТИРОВАТЬ: обратите внимание, что я открыт для установки дополнительных инструментов, которые используют git или github в моем случае использования, чтобы выяснить это без загрузки всех репозиториев.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Вам нужно будет клонировать репо, но тогда это должно работать:

repos="path1 path2 path3"
file="your/file"
branchToCheck="origin/master"
for repo in repos; do cd $repo; edit=$(git log -n 1 --pretty='format:%ci %s %h' "$branchToCheck" "$file"); echo $edit $repo ; cd - ;done | sort -r

Будет выведено что-то вроде:

2019-04-02 17:28:13 +0100 commit message COMMIT_HASH /path/to/repo1
2019-04-02 17:28:13 +0100 commit message COMMIT_HASH /path/to/repo2

Сортировка по дате.

Установите 3 переменные в соответствии с вашими потребностями и используйте четвертую строку в качестве однострочного.

РЕДАКТИРОВАТЬ:

Вот альтернатива, которую я только что сделал с использованием Github API, она требует python3.6 или выше:

https://gist.github.com/padawin/adf58c682d41b0596c969beb212e35c6

Требуется обновление, если репозитории не являются публичными (для обеспечения аутентификации).

1 голос
/ 08 апреля 2019

Если вы используете GitHub, вы можете использовать метод commits в GitHub API для получения необходимой информации.

Документация: https://developer.github.com/v3/repos/commits/

Требуемый вызовis:

GET /repos/:owner/:repo/commits

Например, если вы хотите увидеть коммиты, которые изменяют LICENSE.md на https://github.com/clone95/Virgilio (выбрав случайный тренд репо на GitHub прямо сейчас), эта команда вернет этоинформация:

curl 'https://api.github.com/repos/clone95/Virgilio/commits?path=LICENSE.md'

Самый минималистический разбор, который вы можете сделать, - это использовать grep для "даты":

curl 'https://api.github.com/repos/clone95/Virgilio/commits?path=LICENSE.md' | grep '"date"'
    "date": "2019-03-25T06:35:47Z"
    "date": "2019-03-25T06:35:47Z"
    "date": "2019-03-24T18:53:40Z"
    "date": "2019-03-24T18:53:40Z"

Результаты на самом деле представляют собой целую запись JSON с большим количеством информации.Вы можете тщательно проанализировать их, если хотите, или просто сделать head -1 после приведенного выше запроса grep, чтобы получить дату самого последнего коммита, или взять вторую строку для даты коммиттера.Я оставляю эту часть на ваше усмотрение, а также циклически повторяю ваши репозитории и сортирую результаты, как вам нужно.

Предупреждение: даты автора и коммиттера, конечно, не являются датой отправки.Для этого вам потребуется перекрестная ссылка с журналом событий, если вам это действительно нужно: https://developer.github.com/v3/activity/events/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...