Intereting Posts
Как заставить Дженкинса просто выполнить «git fetch» ​​в репозитории Bitbucket Git, когда ЛЮБОЕ изменение подталкивается к нему Как хранить вики GitHub как часть источника Гит добавить. добавляет файлы, перечисленные в .gitignore Используйте другой проект Git как модуль Почему я не могу git сценические файлы при использовании git внутри функции передачи данных? Git – Как установить gitproxy, не использовать прокси для интрасети и использовать прокси для остальных Использование восклицательного знака в сообщении Git commit через командную строку? Mercurial задает начальное состояние для файла без преобразования npm опубликовать пакет в tfs Фиксирование слияния в git Git rebase терпит неудачу: «Ваши локальные изменения в следующих файлах будут перезаписаны слиянием». Нет местных изменений? Пожалуйста, объясните мне, что это слияние с git Три разных ветви для трех разных сред в GIT git Fatal: Недостаточно памяти, malloc не удалось подключиться к ветви Git rebase и git merge

API GitHub – как сравнить 2 коммита

Можно получить список измененных файлов между двумя коммитами. Что-то вроде этого сравнения между двумя коммитами в веб-версии, но с использованием GitHub Api .

Официальным инструментом сравнения сравнения является сравнение двух коммитов :

GET /repos/:owner/:repo/compare/:base...:head 

Оба :base и :head могут быть именами ветвей в именах repo или branch в других репозиториях в той же сети, что и :repo . В последнем случае используйте формат user:branch :

 GET /repos/:owner/:repo/compare/user1:branchname...user2:branchname 

Обратите внимание, что вы также можете использовать теги.
Например:

https://api.github.com/repos/git/git/compare/v2.2.0-rc1…v2.2.0-rc2

Обратите внимание на « ... », а не « .. » между двумя тегами.
И сначала вам нужно иметь самый старый тег, а затем новый тег.

Это дает статус:

  "status": "behind", "ahead_by": 1, "behind_by": 2, "total_commits": 1, 

И для каждой фиксации информация о файлах:

 "files": [ { "sha": "bbcd538c8e72b8c175046e27cc8f907076331401", "filename": "file1.txt", "status": "added", "additions": 103, "deletions": 21, "changes": 124, "blob_url": "https://github.com/octocat/Hello-World/blob/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt", "raw_url": "https://github.com/octocat/Hello-World/raw/6dcb09b5b57875f334f61aebed695e2e4193db5e/file1.txt", "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/file1.txt?ref=6dcb09b5b57875f334f61aebed695e2e4193db5e", "patch": "@@ -132,7 +132,7 @@ module Test @@ -1000,7 +1000,7 @@ module Test" } ] 

НО:

  • Ответ будет включать сравнение до 250 коммитов . Если вы работаете с большим диапазоном фиксации, вы можете использовать API Commit List для перечисления всех коммитов в диапазоне.

  • Для сравнений с чрезвычайно большими различиями вы можете получить ответ об ошибке, указывающий на то, что diff слишком долго работал для генерации. Обычно вы можете разрешить эту ошибку, используя меньший диапазон фиксации.

Изучая ответы, поступающие с официальным API, можно найти едва ли упомянутый способ получить отличия от Github. Попробуй это:

  wget -H 'Accept: application/vnd.github.v3.diff' \ http://github.com/github/linguist/compare/96d29b76...a20631af.diff wget -H 'Accept: application/vnd.github.v3.diff' \ http://github.com/github/linguist/compare/a20631af...96d29b76.diff 

Это ссылка, которую вы предоставили в качестве примера, с добавлением .diff . И обратная разница.

Приведенный заголовок гарантирует, что запрос обрабатывается API-интерфейсом Github v3. В настоящее время это значение по умолчанию, но может измениться в будущем. См. Типы носителей .

Почему две загрузки?

Github поддерживает только линейные различия от более старых версий до более поздних версий. Если запрошенный diff действительно линейный и от более старой до более новой версии, вторая загрузка будет пустой.

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

Если между парой запрошенных коммитов нет линейной связи, на оба загрузочных файла будет получен ответ с ненулевым содержимым. Один из общего оркестра для первого коммита и другого, отменил один из этого общего персонажа на другой. Применяя один diff нормально, а другой наоборот, дает то, что git diff 96d29b76..a20631af бы результат вывода git diff 96d29b76..a20631af .

Насколько я могу судить, эти исходные различия не подпадают под ограничения API Github. Запросы на 540 транзакций с 1002 изменениями файлов прошли безупречно.

Примечание: можно также добавить .patch вместо .diff . Затем по-прежнему остается один большой файл для каждого, но набор отдельных патчей для каждой фиксации внутри этого файла.