Як я "git diff" у певному каталозі?


132

git diffнасправді працює розбіжність у всіх вихідних кодах. Як це зробити в певному каталозі, щоб я міг переглянути зміни у файлах під ним?


2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Відповіді:


126

Вкажіть шлях (папка в цьому випадку) і просто запустіть:

git diff myfolder/

28
Я хотів би використовувати, git diff -- myfolderщоб мінімізувати неоднозначність до git. Загальне позначення для git diff (і багатьох команд git) - це те, git diff [commit-ish] -- [path]де виконувати за замовчуванням HEAD (там, де ви зараз перебуваєте), а [path]за замовчуванням - кореневий каталог git, але може бути будь-яким відносно вашого поточного каталогу. Без цього --, git здогадається, що ви маєте на увазі, [commit-ish]або [path]. У деяких випадках це призводить до того, що поняття "неоднозначне". Якщо я правильно пам’ятаю.
L0LN1NJ4

2
Це нічого не друкує, коли я спробую метод у відповіді та метод у коментарі.
промінь

@ray, що означає, що у вас немає відмінностей між робочим деревом та останньою версією
valerij vasilcenko

3
Для @ray та майбутніх людей, які бачать це, ви можете включити гілки, які ви намагаєтесь відрізняти, git diff master..develop myfolder/як @CrandellWS сказав у коментарі до оригінального питання. Статус Git покаже вам зміни, якщо це те, що ви шукаєте.
BVBAccelerate

2
@ray переконайтеся, що ви перебуваєте в кореневій директорії. Шлях буде відносно вашого поточного каталогу.
Nickofthyme

59

Якщо ви порівнюєте різні гілки, вам потрібно використовувати --для відокремлення версії Git від шляху до файлової системи. Наприклад, з двома місцевими відділеннями masterта bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

Або від місцевого відділення до віддаленого:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/

29
Після перерахування обох гілок потрібне лише одне - застереження, як у: git diff branch1 branch2 - path / to / dir
emery

4

Слід звикати дивитись документацію на подібні речі. Це дуже корисно і дуже швидко покращить вашу майстерність. Ось відповідний біт, коли ви це робитеgit help diff

   git diff [options] [--no-index] [--] <path> <path>

Два <path>s - це те, що вам потрібно змінити у відповідних каталогах.


3

Додайте "Більше порівняння", як ваш difftool в Git, і додайте псевдонім для diffdir як:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Отримайте gitdiff так:

git diffdir 4bc7ba80edf6  7f566710c7

Довідка: Порівняйте цілі каталоги з git difftool + Beyond Порівняти


1
Здається, що знак рівності є неправильним для git 2.17.1. Використовуйте git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"натомість
Марк Шефер

Зауважте, що при використанні програми "Більше порівняння" для dir diff вам потрібно налаштувати її так, щоб вона слідувала посиланням (У режимі порівняння папки -> Правила (піктограма судді) -> Обробка -> Дотримуйтесь символьних посилань) АБО, додайте --no-symlinksпараметр, щоб команда читалаgit difftool --dir-diff --no-symlinks
Ашутош Джиндал

1

Ви можете не тільки додати шлях, але й додати git diff --relativeрезультат відносно цієї папки.

git -C a/folder diff --relative

І з Git 2.28 (Q3 2020) команди в сім'ї " diff" навчилися шанувати " diff.relative" змінну конфігурації.

Див. Команду c28ded8 (22 травня 2020 р.) Лоран Арнуд ( spk) .
(Об’єднав Хуніо С Хамано - gitster- в комісії e34df9a , 02 червня 2020 р.)

diff: додати параметр config relative

Вийшов із реєстрації: Лоран Арнуд
Акціоніст: Đoàn Trần Công Danh

diff.relativeЛогічний набір опції trueпоказує зміни тільки в поточній директорії / значенні , зазначеному в pathаргументі relativeопції і шоу імен шляхів щодо вищезгаданого каталогу.

Навчіть --no-relativeпереосмислювати раніше--relative

Додати для документації з параметрами git-format-patch (1) --relativeта--no-relative

Документація в даний час включає в себе :

diff.relative:

Якщо встановлено значення " true", " git diff" не відображає змін за межами каталогу та не показує імена шляхів відносно поточного каталогу.


0

Якщо ви хочете виключити підкаталоги, ви можете використовувати

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)

0

Щоб використовувати Beyond Compare як difftool для каталогу diff, не забудьте включити наступні символьні посилання так:

У папці Порівняння поданняПравила (Ікона судді):

Введіть тут опис зображення

А потім увімкніть наступні символічні посилання та оновіть параметри сеансу:

Введіть тут опис зображення


АБО,

налаштувати псевдонім так:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Зауважте, що в будь-якому випадку будь-які зміни, внесені в бік (зліва чи справа), що стосується поточного робочого дерева, зберігаються.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.