Beyond Compare ile Git Diff


111

Git Beyond Compare 3'ü bir diff aracı olarak başlatmayı başardım, ancak bir diff yaptığımda, karşılaştırdığım dosya yüklenmiyor. Dosyanın yalnızca en son sürümü yüklenir ve başka hiçbir şey yüklenmez, dolayısıyla Beyond Compare'in sağ bölmesinde hiçbir şey yoktur.

Beyond Compare 3 ile Cygwin ile git 1.6.3.1 çalıştırıyorum. Web sitelerinin destek bölümünde önerdikleri gibi, aşağıdaki gibi bir komut dosyasıyla karşılaştırmanın ötesine geçtim:

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

Başka biri bu sorunla karşılaştı ve buna bir çözüm biliyor mu?

Düzenleme:
VonC'nin önerilerini takip ettim ama hala eskisi gibi aynı sorunu yaşıyorum. Git için biraz yeniyim, bu yüzden belki de diff'i doğru kullanmıyorum.

Örneğin,
git diff main.css gibi bir komutla bir dosyadaki diff'i görmeye çalışıyorum

Ötesinde Karşılaştırma açılacak ve sol bölmede yalnızca geçerli main.css'imi görüntüleyecek, sağ bölmede hiçbir şey yok. Şu anki main.css'mi HEAD ile karşılaştırıldığında sol bölmede görmek istiyorum, temelde en son yaptığım şey.

Benim git-diff-wrapper.sh şuna benzer:

#!/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 yapılandırmam Diff için şöyle görünüyor:

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

Yanıtlar:


140

Fazladan sarmalayıcı .sh dosyaları kullanmıyorum. Ortamım Windows XP, cygwin'de git 1.7.1 ve Karşılaştırmanın Ötesinde 3. Aşağıdaki .git / config dosyam .

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

Sonra kullandığım $ git difftool ve karşılaştırmak için $ git mergetool birleştirme için.

Hakkında trustExitCode : Bir özel birleştirme komutu için, birleştirme komutun çıkış kodu birleştirme başarılı olup olmadığını belirlemek için kullanılabilir belirtin. Bu doğru olarak ayarlanmadıysa, birleştirme hedef dosyası zaman damgası kontrol edilir ve dosya güncellenmişse birleştirmenin başarılı olduğu varsayılır, aksi takdirde kullanıcıdan birleştirmenin başarısını belirtmesi istenir.


12
Windows 7'de mingw git kabuğu ile çalışıyorum. Bunun /c/program filesyerine linux tarzı bir yol kullanmak zorunda kaldım c:/program files. Ayrıca kaldırdım "$(cygpath -w $LOCAL)"ve sadece kullandım "$LOCAL". İşe yarayacak gibiydi.
Landon Poch

5
@PClass'ın aşağıda bahsettiği gibi, "bc3" artık git'in daha yeni sürümlerinde dahili bir araçtır. "Beyondcompare3" gibi benzersiz bir ad kullanmalısınız
Scott Wegner

4
GitHub Shell (Windows 8'de) bana dedi ki bcompare: command not found- aracın bc3İSMİNİ başka bir şeyden (gibi abc3) değiştirene kadar. Sanırım bazı dahili Github ayarları müdahale etti. Ayrıca "$(cygpath -w $LOCAL)"parçayı çıkardım ve yerine koydum "$LOCAL". Şimdi gayet iyi çalışıyor. Teşekkürler!
Felix Alcala

1
İki işlem arasındaki farka baktığımda bu benim için hatalıydı. İşte daha iyi bir çözüm: blog.kifaru.be/2011/07/…
balajimc55


28

Teşekkür etmek @dahlbyk , yazarı Posh-Git onun yazabilmek için, bir ana fikri olarak yapılandırma . Yapılandırma sorunumu çözmeme yardımcı oldu.

[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

Bu cevabı denedim ve fark edemedim, belki yanlış yapıyorum.
Epu

1
@Epu, makinenizde yollarınızın aynı olduğunu onayladınız mı? Ve Beyond Compare 3, daha eski bir v2 falan değil mi?
Nick Josevski

Yolların aynı olduğunu ve bc3 olduğunu doğruladım.
Epu

1
Komik olan, 'git difftool file.txt' ve 'git mergetool file.txt' iyi çalışıyor, ben de onlara geçtim. Ancak 'git diff file.txt' artık bozuldu (öntanımlı konsol farkını göstermeden önce). Şimdi bana 'hatası veriyor: bc3 üretilemiyor: Böyle bir dosya veya dizin yok \ nexternal diff öldü, file.txt'de durdu'
Epu

Herkesin benim yaşadığım aynı problemle karşılaşması durumunda (onu düzenledikten sonra tanınmayan .gitconfig) yolu aşağıdaki gibi cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
eklemem gerekiyordu

20

Beyond Compare 2 için şu komutları çalıştırın:

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

Beyond Compare 3 için şu komutları çalıştırın:

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

Sonra kullan git difftool


1
Beyond Compare 4 destekleniyor mu?
Danijel

2
@Danijel, @Daniel Magnussons cevap durumlarında belirtilen resmi belgeNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

İşte benim yapılandırma dosyam. Biraz güreş aldı ama şimdi işe yarıyor. Windows sunucusu, msysgit ve ötesi karşılaştırma 3 kullanıyorum (görünüşe göre bir x86 sürümü). Herhangi bir argüman belirtmeme gerek olmadığını ve "cmd" yerine "yol" kullandığımı fark edeceksiniz.

[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

Ötesinde Karşılaştırma destek sayfası biraz kısa.

Daha fazlası için diff.external cevabımı kontrol edin (tam sözdizimi ile ilgili olarak)

Ayıkla:

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

komut isteminde, " git-diff-wrapper.sh" yolunu değiştirerek ~/.gitconfig,

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

Sarmalayıcı betiğine ve diff aracına giden yolları belirtmek için doğru sözdizimini kullandığınızdan emin olun, yani ters eğik çizgi yerine eğik çizgi kullanın. Benim durumumda var

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

içinde .gitconfigve

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

sarmalayıcı komut dosyasında.


Not: Ayrıca kullanabilirsiniz git difftool.



3

Lütfen 2 $ 'lık yanlış bir yol yaptığınızı fark edin. Cygwin altındasınız ama BC3 değil, bu yüzden onun için tam bir yol belirlemelisiniz. "d: / cygwin $ 2" gibi

Lütfen git-diff-wrapper.sh sayfama bakın:

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

İyi şanslar.


3
Bunun için gerçekten cygpath kullanmalısınız; ör bcompare.exe $(cygpath -w $2). Şerefe.
Dan Molding

3

Windows 7 (profesyonel) ve Windows için Git (v 2.15 veya üstü) çalıştırıyorsanız, Windows için Git'iniz tarafından desteklenen farklı diff araçlarının neler olduğunu öğrenmek için aşağıdaki komutu çalıştırabilirsiniz.

git difftool --tool-help

Buna benzer çıktı göreceksiniz

git difftool --tool = 'şunlardan birine ayarlanabilir:
vimdiff vimdiff2 vimdiff3

bu, git'inizin şu anda difftool olarak karşılaştırmanın ötesinde desteklemediği (bulamadığı) anlamına gelir.

Git'in karşılaştırmanın ötesinde geçerli bir diftool olarak bulması için, sistem yolu ortam değişkeninizde Beyond Compare kurulum dizinine sahip olmanız gerekir . Bunu, kabuktan bcompare çalıştırarak kontrol edebilirsiniz (cmd, git bash veya powershell. Git Bash kullanıyorum). Beyond Compare başlamazsa, kurulum dizinini (benim durumumda, C: \ Program Files \ Beyond Compare 4) sistem yolu değişkeninize ekleyin. Bundan sonra kabuğunuzu yeniden başlatın. Git, Olası Diftool seçeneği olarak Ötesi Karşılaştırma seçeneğini gösterecektir. Diftool olarak karşılaştırmanın ötesinde başlatmak için aşağıdaki komutlardan herhangi birini kullanabilirsiniz (örneğin, herhangi bir yerel dosyayı başka bir dalla karşılaştırmak için)

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

Karşılaştırmanın ötesinde aşağıdaki komutları kullanarak varsayılan diftool olarak yapılandırabilirsiniz.

   git config --global diff.tool bc

ps, yukarıdaki komuttaki bc'nin Git sistem değişkeninizden bulabildiklerine bağlı olarak bc3 veya bc olabileceğini unutmayın.


2

BC4 64bit Güncellemesi: Bu, Windows v.2.16.2 için Git ve Beyond Compare 4 - v.4.2.4 (64bit Sürümü) için çalışır

"C: \ Users \ MyUserName" kullanıcı kökümde bulunan .gitconfig dosyasını manuel olarak düzenledim ve diff / difftool ve merge / mergetool etiketlerini şu şekilde değiştirdim:

[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

Aradaki fark, çağrılan exe'de: bcomp.exe'yi çağıracak şekilde ayarlayın ve iyi çalışacaktır. Ortamınızı bcompare.exe'yi çağıracak şekilde yapılandırın ve sonuçta revizyon sisteminizden alınan karşılaştırmanın tarafı boş kalır.


1

Beyond Compare 3 için bu komutları çalıştırın (BCompare.exe yolu sisteminizde farklıysa, lütfen sizinkine göre değiştirin):

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

Sonra kullan git difftool


1

Windows 10, Git v2.13.2

.Gitconfig. '\' Ve '"' için çıkış karakteri eklemeyi unutmayın.

[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

Sen referans verebilir difftool olarak karşılaştırmak ötesinde kurma bunu yapılandırma için git komutlarını kullanarak için.


Merhaba, benzer bir betiğim vardı ve C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe'ye geçene kadar başarısız oldu. BCompare.exe ile geçici dosya karşılaştırılamadan silindi, bu yüzden yalnızca en son dosyayı gördüm, teslim edilmiş sürüm yok.
gabriel

0

Her ne sebeple olursa olsun, benim için git diff tarafından oluşturulan tmp dosyası, karşılaştırılamayacak kadar açılmadan önce siliniyordu. Önce başka bir yere kopyalamam gerekiyordu.

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

0

MAC için çok araştırma yaptıktan sonra benim için çalıştı ..! 1. Karşılaştırmanın ötesini kurun ve bu aşağıdaki konuma kurulacaktır

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

Bc'yi git http://www.scootersoftware.com/support.php?zz=kb_mac olarak fark / birleştirme aracı yapmak için lütfen bu adımları izleyin


0

BC2.exe ile 2.15.1.windows.2 git sürümü için.

Aşağıdaki yapılandırma sonunda makinemde çalışıyor.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.