Как я могу сгенерировать diff для одного файла между двумя ветвями в github
Мне нужно создать diff для одного файла, который будет показывать различия между двумя версиями, которые на самом деле являются тегами в github. Затем я хочу отправить этот diff кому-то по электронной почте, так что был бы идеальным URL-адрес github для diff. Просмотр с помощью github позволит мне сделать это для всех измененных файлов, но это не так хорошо, поскольку в моем репо есть тысячи файлов.
Я могу сделать это в командной строке следующим образом, но это не помогает, поскольку мне нужно отправить diff кому-то по электронной почте:
git diff tag1 tag2 -- path/to/file
Я нашел версию командной строки, обсуждаемую здесь:
как я могу видеть различия в назначенном файле между локальной ветвью и удаленной ветвью?
Ответы
Ответ 1
GitHub только предоставляет способ показать разницу между двумя коммитами.
Если те теги на самом деле указывают на фиксации, формат Url будет чем-то вроде
https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}
В качестве примера https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 показывает разницу между двумя версиями проекта LibGit2Sharp. Этот diff включает все измененные файлы.
Если вы хотите получить URL-адрес, предназначенный для определенного файла:
- Перейдите на вкладку Измененные файлы.
![changed-tab]()
- Нажмите кнопку Показать Diff Stats (это отобразит список измененных файлов в виде ссылок).
![show-diff]()
- Скопируйте в буфер обмена ссылку определенного файла, который вы после... и Tada! Все готово.
Например, учитывая вышеприведенный diff, ссылка https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 будет указывать на изменения LazyFixtures.cs
который произошел между версиями v0.9.0 и v0.9.5.
Update
Следуя вашему комментарию, в котором говорится, что ваш diff слишком велик для визуализации через веб-интерфейс, как насчет возврата к старой старой командной строке? Вы можете перенаправить вывод diff в файл, а затем отправить файл в виде вложения электронной почты.
$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff
Ответ 2
Вот мое обходное решение, когда применяется следующая проблема.
Это сравнение большое! Были показаны только последние 250 коммитов
Скопировать исходный вид файла, который вы хотите сравнить с https://gist.github.com/. Используйте две конкретные точки фиксации, которые вы хотите сравнить. Начните с более старой фиксации.
https://gist.github.com/ имеет приятный бок о бок diff, когда вы нажимаете "Revisions".
Ответ 3
Ответ предназначен для тех, кто хочет просмотреть (не загружать) историю изменений кода на странице GITHUB WEB-страницы для предыдущей проверки.
Перейдите к этому файлу в github, затем выберите ИСТОРИЯ. Это откроет страницу со списком ссылок на комментарии, как показано ниже.
При нажатии на него будут отображаться изменения кода. После нажатия на историю; вы можете щелкнуть по пакетам, чтобы увидеть все уровни файлов на уровне пакетов.
В eclipse вы можете сравнить историю с помощью плагина EGit и "Щелкните правой кнопкой мыши → Сравнить с" в файле.
Как сравнить две версии в git в Eclipse?
Ответ 4
Я использовал nulltoken answer, чтобы собрать простое удобство script для вытягивания разницы между двумя коммитами в GitHub из командной строки.
Вы можете найти полный script на gist, но вот хорошие бит:
# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# [email protected]:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"
if [[ "$#" -eq 1 ]]; then
if [[ "$1" =~ .*\.\..* ]]; then
# Handle "git hubdiff fromcommit..tocommit"
open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
else
# Handle "git hubdiff fromcommit"
open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
fi
elif [[ "$#" -eq 2 ]]; then
# Handle "git hubdiff fromcommit tocommit"
open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi
Он принимает в качестве аргументов ветки, коммиты и все остальное, которые могут быть разрешены git rev-parse
. Я использовал open
, который работает только на macOS для открытия веб-страниц, поэтому, если вы находитесь в другой среде, вы захотите настроить его.
Как и в случае с ответом nulltoken, чтобы указать на один файл в diff, вам нужно щелкнуть по названию файла, чтобы строка привязки отображалась в строке url, которую вы затем можете скопировать.