Git Diff z Beyond Compare

111

Udało mi się zmusić git do uruchomienia Beyond Compare 3 jako narzędzia do porównywania, jednak kiedy robię różnicę, plik, z którym porównuję, nie jest ładowany. Ładowana jest tylko najnowsza wersja pliku i nic więcej, więc w prawym okienku Beyond Compare nic nie ma.

Używam git 1.6.3.1 z Cygwin z Beyond Compare 3. Skonfigurowałem nieporównywalne, jak sugerują w części wsparcia ich strony internetowej ze skryptem takim jak:

#!/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

Czy ktoś jeszcze napotkał ten problem i zna rozwiązanie tego problemu?

Edycja:
Postępowałem zgodnie z sugestiami VonC, ale nadal mam dokładnie ten sam problem, co wcześniej. Jestem trochę nowy w Git, więc być może nie używam poprawnie różnicy.

Na przykład próbuję zobaczyć różnicę w pliku za pomocą polecenia takiego jak:
git diff main.css

Beyond Compare otworzy się i wyświetli tylko mój bieżący plik main.css w lewym okienku, w prawym okienku nic nie ma. Chciałbym zobaczyć mój aktualny plik main.css w lewym okienku w porównaniu do HEAD, w zasadzie to, co ostatnio zatwierdziłem.

Mój git-diff-wrapper.sh wygląda tak:

#!/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

Moja konfiguracja git wygląda tak dla Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh
Avanst
źródło

Odpowiedzi:

140

Nie używam dodatkowych plików .sh opakowania. Moje środowisko to Windows XP, git 1.7.1 na cygwin i Beyond Compare 3. Poniżej znajduje się mój plik .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"

Następnie używam $ git difftool do porównania i $ git connectetool do scalenia.

Informacje o trustExitCode : W przypadku niestandardowego polecenia scalania określ, czy kod zakończenia polecenia scalania może służyć do określenia, czy scalenie zakończyło się powodzeniem. Jeśli nie jest ustawiona na wartość true, sprawdzana jest sygnatura czasowa pliku docelowego scalania, a scalanie zakłada się, że zakończyło się powodzeniem, jeśli plik został zaktualizowany, w przeciwnym razie użytkownik zostanie poproszony o wskazanie powodzenia scalenia.

yehnan
źródło
12
Pracuję w systemie Windows 7 z powłoką mingw git. Musiałem użyć ścieżki w stylu linux /c/program fileszamiast c:/program files. Usunąłem też "$(cygpath -w $LOCAL)"i właśnie użyłem "$LOCAL". Wydawało się, że to działa.
Landon Poch,
5
Jak wspomina @pClass poniżej, „bc3” jest teraz wewnętrznym narzędziem w nowszych wersjach git. Powinieneś użyć unikalnej nazwy, takiej jak „outsidecompare3”
Scott Wegner
4
GitHub Shell (na Windows 8) powiedział mi bcompare: command not found- dopóki nie zmieniłem NAZWY narzędzia z bc3na coś innego (np abc3.). Wydaje mi się, że przeszkadzało to jakieś wewnętrzne ustawienie Githuba. Usunąłem też "$(cygpath -w $LOCAL)"część i zastąpiłem ją "$LOCAL". Teraz działa dobrze. Dzięki!
Felix Alcala
1
To było dla mnie błędne, kiedy patrzyłem na różnice między dwoma zatwierdzeniami. Oto lepsze rozwiązanie: blog.kifaru.be/2011/07/…
balajimc55
2
Znalazłem również ten artykuł: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham
28

Podziękowania dla @dahlbyk , autora Posh-Git , za opublikowanie jego konfiguracji jako sedna . Pomogło mi to rozwiązać problem z konfiguracją.

[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
Nick Josevski
źródło
Wypróbowałem tę odpowiedź i nie byłem w stanie odróżnić, może robię to źle.
Epu
1
@Epu, czy potwierdziłeś, że twoje ścieżki są takie same na twojej maszynie? I to jest Beyond Compare 3, a nie starsza wersja v2 czy coś takiego?
Nick Josevski
Potwierdziłem, że ścieżki są takie same i że to bc3.
Epu
1
Zabawne jest to, że „git difftool file.txt” i „git connectetool file.txt” działają poprawnie, więc przełączyłem się na te. Ale 'git diff file.txt' jest teraz zbankrutowany (zanim był używany do pokazania mi domyślnego porównania konsoli). Teraz daje mi `` błąd: nie można spawn bc3: Żaden taki plik lub katalog \ nzewnętrzny diff nie żyje, zatrzymuję się w
pliku.txt
Na wypadek, gdyby ktoś napotkał ten sam problem, co ja (nierozpoznany plik .gitconfig po edycji) musiałem dodać ścieżkę w następujący sposób:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez
20

Uruchom te polecenia dla Beyond Compare 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

Uruchom te polecenia dla Beyond Compare 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

Następnie użyj git difftool

użytkownik
źródło
1
Czy Beyond Compare 4 jest obsługiwany?
Danijel
2
@Danijel oficjalny dokument podany w odpowiedzi @Daniel Magnussons stwierdzaNote: Use bc3 on the command line for both BC version 3 and 4
BNT
9

Oficjalna dokumentacja zadziałała dla mnie

Daniel Magnusson
źródło
Dzięki stary za wskazanie mi oficjalnego doktora !!! przynajmniej określa, jaka konfiguracja diff jest wymagana dla GIT vs GitHub
shridutt kothari
6

Oto mój plik konfiguracyjny. Wymagało to trochę zapasów, ale teraz działa. Używam serwera Windows, msysgit i nie tylko porównać 3 (najwyraźniej wersja x86). Zauważysz, że nie muszę podawać żadnych argumentów i używam „path” zamiast „cmd”.

[user]
        name = PeteW
        email = [email protected]
[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
nachonachoman
źródło
4

Strona Porównaj wsparcie Beyond jest nieco krótki.

Sprawdź moją zewnętrzną odpowiedź diff., Aby uzyskać więcej informacji (dotyczących dokładnej składni)

Wyciąg:

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

w wierszu polecenia, zastępując ścieżką do „ git-diff-wrapper.sh”, więc plik ~/.gitconfigzawiera

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

Upewnij się, że używasz poprawnej składni do określenia ścieżek do skryptu opakowującego i narzędzia porównywania, tj. Użyj ukośnika w przód zamiast ukośnika odwrotnego. W moim przypadku mam

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

w .gitconfigi

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

w skrypcie opakowania.


Uwaga: możesz również użyć git difftool.

VonC
źródło
3

Zwróć uwagę, że robisz złą ścieżkę o wartości 2 USD. ponieważ jesteś pod Cygwin, ale nie BC3, więc powinieneś określić pełną ścieżkę do niego. takie jak „d: / cygwin $ 2”

Proszę odnieść się do mojego git-diff-wrapper.sh tutaj:

$ 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"

Powodzenia.

z33
źródło
3
Naprawdę powinieneś do tego użyć cygpath; np bcompare.exe $(cygpath -w $2). Twoje zdrowie.
Dan Molding
3

Jeśli używasz systemu Windows 7 (profesjonalnego) i Git dla Windows (wersja 2.15 lub nowsza), możesz po prostu uruchomić poniższe polecenie, aby dowiedzieć się, jakie są różne narzędzia porównywania obsługiwane przez Twój Git dla Windows

git difftool --tool-help

Zobaczysz wyniki podobne do tego

git difftool --tool = 'można ustawić na jedną z następujących:
vimdiff vimdiff2 vimdiff3

oznacza to, że twój git nie obsługuje (nie może znaleźć) nieporównywalnego porównania jako difftool w tej chwili.

Aby Git znalazł nieporównywalne narzędzie jako poprawne narzędzie diff, powinieneś mieć katalog instalacyjny Beyond Compare w zmiennej środowiskowej ścieżki systemowej . Możesz to sprawdzić, uruchamiając bcompare z powłoki (cmd, git bash lub powershell. Używam Git Bash). Jeśli Beyond Compare nie uruchomi się, dodaj jego katalog instalacyjny (w moim przypadku C: \ Program Files \ Beyond Compare 4) do zmiennej ścieżki systemowej. Następnie uruchom ponownie powłokę. Git pokaże Beyond Compare jako możliwą opcję difftool. Możesz użyć dowolnego z poniższych poleceń, aby uruchomić poza porównywaniem jako difftool (na przykład, aby porównać dowolny plik lokalny z inną gałęzią)

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

Możesz skonfigurować poza porównaniem jako domyślny difftool za pomocą poniższych poleceń

   git config --global diff.tool bc

ps pamiętaj, że bc w powyższym poleceniu może być bc3 lub bc w oparciu o to, co Git mógł znaleźć w zmiennej systemowej ścieżki.

sarabdeep singh
źródło
2

Aktualizacja dla BC4 w wersji 64-bitowej: działa dla systemu Git dla systemu Windows 2.16.2 i nowszych Porównaj 4 - wersja 4.2.4 (wersja 64-bitowa)

Ręcznie wyedytowałem plik .gitconfig znajdujący się w katalogu głównym mojego użytkownika „C: \ Users \ MyUserName” i zastąpiłem znaczniki diff / difftool i merge / connectetool na

[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\"
mitaka
źródło
1

Różnica polega na wywołaniu exe: skonfiguruj go tak, aby wywoływał bcomp.exe, a wszystko będzie działać. Skonfiguruj swoje środowisko, aby wywołać bcompare.exe, a skończysz z pustą stroną porównania pobraną z systemu wersji.

rrozema
źródło
1

Uruchom te polecenia dla Beyond Compare 3 (jeśli ścieżka BCompare.exe jest inna w twoim systemie, zamień ją zgodnie z twoim):

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

Następnie użyj git difftool

Jerry Z.
źródło
1

Windows 10, Git v2.13.2

Mój .gitconfig. Pamiętaj, aby dodać znaki zmiany znaczenia dla „\” i „” ”.

[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

Możesz się odwołać ustawienia poza porównaniem jako difftool, aby użyć poleceń git do skonfigurowania go.

zhangyu12
źródło
Cześć, miałem podobny skrypt i nie udało mi się przejść do C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe. W przypadku BCompare.exe plik tymczasowy został usunięty, zanim mógł zostać porównany, więc widziałem tylko najnowszy plik, bez wersji zaewidencjonowanej.
gabriel
0

Z jakiegoś powodu dla mnie plik tmp utworzony przez git diff był usuwany, zanim został otwarty w nie do porównania. Najpierw musiałem go skopiować w inne miejsce.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"
Dustin
źródło
0

W przypadku MAC po przeprowadzeniu wielu badań zadziałało to dla mnie ..! 1. Zainstaluj nieporównywalne rozwiązanie, które zostanie zainstalowane w poniższej lokalizacji

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

Wykonaj następujące kroki, aby ustawić bc jako narzędzie porównywania / scalania w git http://www.scootersoftware.com/support.php?zz=kb_mac

Sreedhar GS
źródło
0

Dla wersji git 2.15.1.windows.2 z BC2.exe.

Poniższa konfiguracja w końcu działa na moim komputerze.

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

YChi Lu
źródło