Git Diff з Порівнюючи


111

Мені вдалося отримати git, щоб запустити програму Beyond Compare 3 як інструмент diff, однак, коли я роблю diff, файл, з яким я порівнюю, не завантажується. Завантажується лише остання версія файлу, і нічого іншого, тому на правій панелі "Більше порівняння" немає нічого.

У мене працює git 1.6.3.1 з Cygwin з Beyond Compare 3. Я встановив поза порівнянням, як вони пропонують у частині підтримки свого веб-сайту із таким сценарієм:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

Хто-небудь ще стикався з цією проблемою і знає рішення цієї проблеми?

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

Наприклад, я намагаюся побачити diff у файлі з такою командою:
git diff main.css

Поза межами Порівняння відкриється і відображатиметься лише мій поточний main.css на лівій панелі, у правій області нічого немає. Мені б хотілося побачити мій поточний main.css на лівій панелі порівняно з HEAD, в основному те, що я востаннє здійснив.

Мій git-diff-wrapper.sh виглядає так:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

Мій конфігурація git виглядає так для Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

Відповіді:


140

Я не використовую додаткові обгорткові .sh файли. Моє середовище - це Windows XP, git 1.7.1 на cygwin та Beyond Compare 3. Далі йде мій .git / config файл.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

Потім я використовую $ git difftool для порівняння та $ git mergetool для злиття.

Про trustExitCode : Для користувацької команди злиття вкажіть, чи може код виходу команди злиття визначати, чи було злиття успішним. Якщо це значення не встановлено як істинне, перевіряється часова позначка цільового файлу об'єднання, і злиття вважається успішним, якщо файл було оновлено, інакше користувачеві буде запропоновано вказати на успіх злиття.


12
Я працюю в Windows 7 з оболонкою ging mingw. Мені довелося використовувати шлях до стилю Linux /c/program filesзамість c:/program files. Також я зняв "$(cygpath -w $LOCAL)"і тільки що використав "$LOCAL". Це, здавалося, трюк.
Landon Poch

5
Як згадує @pClass нижче, "bc3" тепер є внутрішнім інструментом у новіших версіях git. Вам слід використовувати унікальне ім’я, наприклад, "понадкомп'ютер3"
Скотт Вегнер,

4
GitHub Shell (у Windows 8) сказав мені bcompare: command not found- поки я не змінив НАЗВУ інструменту bc3на щось інше (як abc3). Я здогадуюсь, що якісь внутрішні налаштування Github заважали. Також я зняв "$(cygpath -w $LOCAL)"деталь і замінив її "$LOCAL". Зараз це працює просто чудово. Дякую!
Фелікс Алкала

1
Для мене це було баггі, коли дивився на різницю між двома комітами. Ось краще рішення: blog.kifaru.be/2011/07/…
balajimc55

2
Я також знайшов цю статтю: scootersoftware.com/support.php?zz=kb_vcs
Гай Аврахам

28

Завдяки @dahlbyk , автору Posh-Git , за публікацію його конфігурації як суть . Це допомогло мені вирішити проблему з конфігурацією.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

Я спробував цю відповідь і не зміг розібратися, можливо, я роблю це неправильно.
Епу

1
@Epu Ви підтвердили, що ваші шляхи однакові на вашій машині? І це Beyond Compare 3, а не старіший v2 чи щось таке?
Нік Хосевський

Я підтвердив, що шляхи однакові, і що це bc3.
Епу

1
Найсмішніше, що "git difftool file.txt" і "git mergetool file.txt" працюють нормально, тому я перейшов на ці. Але 'git diff file.txt' тепер розбито (раніше він показував мені, що консоль за замовчуванням відрізняється). Тепер це дає мені «помилку: не можна породити bc3: не загинув такий файл чи каталог \ nexternal diff, зупинившись на file.txt»
12.12

На всякий випадок, якщо хтось стикається з тією ж проблемою, що і я (нерозпізнаний .gitconfig після його редагування), я повинен був додати шлях таким чином:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

Виконайте ці команди для команди "Більше порівняння 2":

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Виконайте ці команди для команди "Більше порівняння 3":

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Потім використовуйте git difftool


1
Чи підтримується Beyond Compare 4?
Данієль

2
@Danijel офіційний документ, зазначений у відповіді @Daniel Magnussons,Note: Use bc3 on the command line for both BC version 3 and 4
BNT


6

Ось мій конфігураційний файл. Потрібна була боротьба, але зараз вона працює. Я використовую сервер Windows, msysgit і вище порівняння 3 (мабуть, версія x86). Ви помітите, що мені не потрібно вказувати жодних аргументів, і я використовую "шлях" замість "cmd".

[user]
        name = PeteW
        email = petew@petew.com
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool

4

Сторінка підтримки Beyond Compare трохи коротка.

Щоб дізнатися більше (щодо точного синтаксису), перевірте мою відповідь diff.external

Витяг:

$ git config --global diff.external <path_to_wrapper_script>

у командному рядку, замінюючи шлях до " git-diff-wrapper.sh", тому ваш ~/.gitconfigмістить

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

Обов’язково використовуйте правильний синтаксис, щоб вказати шляхи до скрипту обгортки та інструменту "diff", тобто використовуйте косу нахил вперед замість відкосів. У моєму випадку я маю

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

в .gitconfigі

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

в сценарії обгортки.


Примітка: ви також можете використовувати git difftool.



3

Зауважте, що ви зробили неправильний шлях у розмірі 2 доларів. тому що ви перебуваєте під Cygwin, але BC3 ні, то вам слід вказати повний шлях до цього. наприклад "d: / cygwin $ 2"

Будь ласка, зверніться до мого git-diff-wrapper.sh тут:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

Удачі.


3
Ви дійсно повинні використовувати цигапу для цього; напр bcompare.exe $(cygpath -w $2). Ура.
Дан Ліплення

3

Якщо ви використовуєте Windows 7 (професійний) та Git для Windows (v 2.15 або вище), ви можете просто запустити команду нижче, щоб дізнатися, які різні інструменти, які підтримуються вашим Git для Windows

git difftool --tool-help

Ви побачите вихід подібний до цього

git difftool --tool = 'може бути встановлено одним із наступних:
vimdiff vimdiff2 vimdiff3

це означає, що ваш git не підтримує (не може знайти) поза порівнянням як difftool зараз.

Для того, щоб Git знаходив понад порівняння як дійсний difftool, вам слід мати каталог встановлення Beyond Compare у змінній середовища вашого системного шляху . Ви можете перевірити це, запустивши bcompare з оболонки (cmd, git bash або powershell. Я використовую Git Bash). Якщо Beyond Compare не запускається, додайте до своєї змінної системного шляху його каталог встановлення (у моєму випадку C: \ Program Files \ Beyond Compare 4). Після цього перезавантажте оболонку. Git покаже опцію "Більше порівняння" як можливий варіант difftool. Ви можете використовувати будь-яку з наведених нижче команд для запуску поза порівнянням як difftool (наприклад, для порівняння будь-якого локального файлу з якоюсь іншою гілкою)

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

Ви можете налаштувати поза порівнянням як difftool за замовчуванням, використовуючи команди нижче

   git config --global diff.tool bc

ps майте на увазі, що команда bc у вищезгаданій команді може бути bc3 або bc на основі того, що Git зміг знайти з вашої системної змінної шляху.


2

Оновлення для BC4 64bit: Це працює для Git для Windows v.2.16.2 і більше порівняння 4 - v.4.2.4 (64-бітове видання)

Я вручну відредагував .gitconfig файл, що знаходиться в моєму корені користувача "C: \ Users \ MyUserName", і замінив теги diff / difftool та merge / mergetool на

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"


1

Різниця полягає в тому, що викликається exe: налаштуйте його на виклик bcomp.exe, і він буде добре працювати. Налаштуйте своє оточення для виклику bcompare.exe, і ви закінчите, коли порівняння, взятое вашою системою ревізії, буде порожнім.


1

Запустіть ці команди для програми "Більше порівняння 3" (якщо шлях BCompare.exe у вашій системі відрізняється, замініть його відповідно до вашої):

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Потім використовуйте git difftool


1

Windows 10, Git v2.13.2

Моя .gitconfig. Не забудьте додати символ втечі для '\' та '"'.

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

Ви можете вказати налаштування поза порівнянням як difftool для використання команд git для його налаштування.


Привіт, у мене був подібний сценарій, і він не вдався, поки я не перейшов на C: \\ програмні файли \\ Більше порівняння 4 \\ BComp.exe. З BCompare.exe тимчасовий файл був видалений, перш ніж його можна порівняти, тому я побачив лише останній файл, не зареєстровану версію.
Габріель

0

З будь-якої причини для мене файл tmp, створений git diff, видалявся перед відкриттям у порівнянні. Мені спочатку довелося скопіювати його в інше місце.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"

0

Для MAC після багато досліджень він працював на мене! 1. Встановіть нижче порівняння, і це буде встановлено нижче

/ Програми / Поза \ Порівняти.app/Contents/MacOS/bcomp

Виконайте ці кроки, щоб перетворити bc як інструмент diff / merge в git http://www.scootersoftware.com/support.php?zz=kb_mac


0

Для git версії 2.15.1.Windows.2 з BC2.exe.

Конфігурація нижче, нарешті, працює на моїй машині.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

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