Як я можу створити різницю для одного файлу між двома гілками в github


111

Мені потрібно створити diff для одного файлу, який покаже відмінності між двома версіями, які насправді є тегами в github. Тоді я хочу надіслати цю різницю комусь електронною поштою, щоб URL-адреса github для diff була ідеальною. Вигляд порівняння github дозволить мені зробити це для всіх змінених файлів, але це не добре, оскільки у моїй репо рейтингу є тисячі файлів.

Я можу це зробити в командному рядку наступним чином, але це не допомагає, оскільки мені потрібно надіслати розмови комусь електронною поштою:

git diff tag1 tag2 -- path/to/file

Тут я знайшов обговорену тут версію командного рядка: як я можу побачити відмінності у визначеному файлі між локальною гілкою та віддаленою гілкою?

Відповіді:


90

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. Ця різниця включає всі змінені файли.

Якщо ви хочете отримати URL-адресу, націлену на певний файл:

  • Перейдіть на вкладку Файли змінені

змінена вкладка

  • Натисніть кнопку Показати різницю статистики (на екрані відобразиться список модифікованих файлів як посилання)

шоу-розл

  • Скопіюйте до буфера обміну посилання конкретного файлу, який ви шукаєте ... та Тада! Ви закінчили.

Наприклад, з огляду на відмінності вище, посилання https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 вказуватиме на LazyFixtures.csзміни, що відбулися між версією v0.9.0 та v0.9.5.

Оновлення

Після вашого коментаря, який говорить про те, що ваша різниця занадто велика, щоб відображатись через веб-інтерфейс, як щодо повернення до старого хорошого інструментарію командного рядка? Ви можете перенаправити вихідний файл на файл, а потім надіслати його як вкладення електронної пошти.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

8
Привіт, схоже, це не спрацює для мене, тому що мій розбіжність занадто великий. Я отримую "Ця різниця велика! Ми показуємо інформацію про стан лише для перших 2500 файлів". тому я отримую лише статистику Diff, а не повну різницю, навіть із посиланнями #diff.
plainflavour

1
проте я думаю, що ти маєш рацію - ось так це зробити. Спасибі
plainflavour

1
Ви також можете використовувати це розширення Chrome github.com/danielribeiro/github-diff-highlight-extension, щоб отримати підсвітку синтаксису при порівнянні гілок.
Даніель Рібейро

3
@plainflavour Ще одна зручна порада в тому випадку, якщо ви знову зіткнетеся з цим - щоразу, коли у вас буде вказана URL-адреса порівняння, як-от @nulltoken, ви також можете просто додати .diff в кінці URL-адреси, щоб побачити повний розріз (хоч і як простий текст) ). Напр. https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff Джерело
dmccabe

1
Я не бачу кнопку " Показати різницю статистики" . Чи пішло? Або я просто не бачу цього?
dckc

7

Ось мій спосіб вирішення, коли стосується наступного питання.

Це порівняння велике! Ми показуємо лише останні 250 комісій

Скопіюйте нераціональний вигляд файлу, який ви хочете порівняти з https://gist.github.com/ . Використовуйте дві конкретні точки фіксування, які ви хочете порівняти. Почніть зі старшої версії.

https://gist.github.com/ має прекрасний перегляд розбіжностей під час натискання кнопки "Ревізії".


3
Дякую, саме ця пропозиція мені потрібна була для gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/… ! :)
ncoghlan

3

Відповідь призначена для людей, які хочуть бачити (не завантажувати) історію / відновлення змін коду файлу на веб-сторінці GITHUB для попередньої реєстрації.

Перейдіть до цього файлу в github, а потім виберіть ІСТОРІЯ . Відкриється сторінка зі списком посилань на коментарі до реєстрації, як показано нижче.

введіть тут опис зображення При натисканні на нього буде показано зміни коду. Після натискання на історію; Ви можете натиснути на пакети, щоб побачити всі рівні реєстрації файлів.

У затемненні ви можете порівняти історію, використовуючи плагін EGit та "Клацніть правою кнопкою миші -> Порівняти з" у файлі. Як я можу порівняти дві редакції в git в Eclipse?


1
Для того, щоб бути більш чітким, ви клацаєте на 7-значне "шестизначне" ім'я комітету (під час наведення курсора на нього немає ярлика чи підказки інструменту, це біля правої сторони, поруч із "копією до буфера обміну" піктограму), і це перенесе вас на сторінку, яка показує різницю між версією цього комітету і тією, що я припускаю, попередньою версією.
JonathanZ підтримує MonicaC

@Jonathan Yeah; це правда
Канагавелу Сугумар

Гей, я не бачив цього захоплення екрана востаннє, коли я дивився. Я не знаю, чи просто вона не завантажувалася для мене тоді, чи ви додали її з тих пір, але в будь-якому випадку дякую за вашу відповідь; це чудово.
JonathanZ підтримує MonicaC

Для введення 5000 файлів це не приводить мене до однофайлового розл. З цієї історії спробуйте знайти дельту до цього файлу з цього величезного комітету .
Карл Уолш

0

Я використовував відповідь nulltoken, щоб зібрати простий скрипт зручності для виведення відмінності між двома комітами на GitHub з командного рядка.

Ви можете знайти повний сценарій на gist , але ось хороші біти:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com: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, для того, щоб вказати на один файл у розд., Вам потрібно буде натиснути на заголовок файла, щоб заставити рядок прив’язки на панелі url, який ви зможете скопіювати.


будь-який спосіб отримати рядок прив’язки для порівняння, який не показує потрібний файл, оскільки їх занадто багато?
sgarg

@sgarg Якір - "diff- <md5 імені файлу>" - не задокументований AFAIK - але це мене дратувало, і я здогадався.
Бен Уолдінг

0

Оскільки це все ще неможливо, ось метод диф-інструменту на основі браузера. Він не використовує автоматизацію, а вимагає лише можливості встановлення розширень Chrome:

  1. Встановіть Diff Tools для браузерів Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Відкрити інструменти Diff ( http://iblogbox.com/devtools/diff/ )
  3. З GitHub перейдіть до ПІДЗВИМКУВАННЯ, тегу чи гілки, відкрийте файл, потім натисніть на Rawкнопку, щоб отримати перегляд необробленого файлу, виберіть все та скопіюйте, а потім помістіть у ліве текстове поле зліва інструменти Diff Tools
  4. Повторіть крок 3, але для файлу ПІСЛЯ та вставте у правий рядок у Diff Tools
  5. Клацніть Compare Nowта виконайте різні спеціальні послуги
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.