As a long time Sublime Text[1] user, I've been using Sublime Merge[2] since the day it's been launched and it brings me the same speed and minimalism I get with Sublime Text and has evolved quite a lot to be able to do most things I need in a merge tool.
a nice feature of sublime merge that i haven't seen in other programs is actually showing you the git commands that will run when you press whatever button
Another fan of Beyond Compare here, but I want to point out something everyone else has missed so far, which is that BC is great for comparing all sorts of files, not just code.
For example, I use its "Table Compare" feature to compare log files from different machines, sorted by timestamp. This lets me easily see the order of operations in a distributed system.
I've been using Meld since years ago, and it's my default go-to diff viewer. The visual style they implemented helps me a lot to reason about how lines have been added or deleted from documents in the side by side comparison. Very neat!
The directory contents tree diff is also really useful.
I wish they made it even easier the basic case of comparing aribtrary text. Maybe it should be the default mode after opening the program, instead of having to click on a couple buttons, because I use it a lot to manually paste pieces of text. For example, logs from a server during testing, to compare what went different between runs.
Another welcomed addition would be "ignore masks". Some kind of regex input that could be used to quickly tell Meld which parts of the text to skip comparing. That way, comparison of log files could be made where a timestamps column would be ignored.
Yeah, I use it a lot, but 80% of that is comparing arbitrary text that I just want to copy-paste in. To be fair, that's just two clicks now (first click "File" comparison, then "blank comparison"), but that still feels a bit cumbersome.
I actually don't understand what people love about BC. The only thing I find it extremely useful for is the occasional files where inline diffs are practically mandatory, like CSVs. Other than that, I generally find it frustrating compared to TortoiseGitMerge, except perhaps for some very specific/unusual scenarios. In particular the line highlighting is annoying - instead of coloring the lines that were added vs. removed differently, it colors lines according to whether they're an "important difference" or "unimportant difference" (?!), which is borderline useless to me. What do people love about it so much?
Meld might be useful for comparison, but in my opinion it is inconvenient as a git merge tool. For git merge I need four panels: original file, version A, version B, merged result. Meld has only three panels.
Currently I am using KDiff3. It is a little buggy and doesn't have a nice UI but it is the best open source merging tool that I am aware of. It allows choosing lines from original file, from A, B and manual editing.
I noticed that certain popular and highly praised commercial IDE also provides only 3-panel interface for merging. This makes resolving conflicts more difficult and prone to errors.
My .gitconfig for using meld at the git merge tool - which gives you that:
[alias]
mt = mergetool
[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
# Gives you meld, with three comparison tabs. Assuming you're merging others changes into
# your branch, this shows you:
# - 1st tab: yours|merged result|theirs (do the merge here into the middle pane)
# - 2nd tab: base vs your changes (look at just your changes)
# - 3rd tab: base vs their changes (look at just their changes)
cmd = meld $LOCAL $BASE $REMOTE --output $MERGED --diff $BASE $LOCAL --diff $BASE $REMOTE --auto-merge
I agree 100% on the utility of a 4 panel diff, but I'd be careful using kdiff3... I also used it for quite a while but found that it would "auto resolve" some merge conflicts which git would flag, and I found it would sometimes auto resolve them wrong (maybe about 10-20% of the time?), and I couldn't figure out how to turn this feature off... I'm using tortoise git merge now (which also does do some auto resolve but only simpler resolutions)
i've used kdiff3 for some hairy merges with good results.
back in the days when i was responsible for regular merges for a pretty big project (weekly or so, 10-30 devs on both sides, n*1e7 LoC), i took the time to learn ediff and did my merges in lucid/xemacs.
i had colleagues at the time who had nice things to say about beyondcompare.
more recently i have seen this meld thing and it has piqued my curiosity.
favorite tool for quick no-frills out-of-practice-with-real-tools visual diff is fldiff built on fltk.
Another vote from here. I've tried a good number of merge tools but always go back to KDiff3. It has the best automatic merge conflict resolver I've seen, and really just enables me to fix things and continue.
I often have colleagues who are inexplicably afraid of merge conflicts and try to negotiate who's working on which parts of the app. I think a proper merge tool could help them to overcome this.
Since everyone else is mentioning other tools, here’s my mention for vimdiff. I think I have meld installed but rarely use it because vimdiff is usually enough. As a bonus I get to use my usual editing keys when working with it.
it may not be the best merge tool in existence but it's adequate (which is actually, suprisingly good, given it is not at all its intended function) and at that point having all my standard vim configuration, editing capabilities etc. beats anything another tool would bring to the table.
Not to mention, 100% terminal UI and built-into-vim means I can use it everywhere and anywhere without thinking about it.
Or on terminals https://github.com/mookid/diffr with specific settings that use 256 colors for highlighting word differences as well.
But for manual merging I haven't found anything better than ediff. That's the only reason I install emacs on my work machines. Seemless integration into a text editor is just unbeatable.
My .gitconfig for using meld at the git merge tool:
[alias]
mt = mergetool
[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
# Gives you meld, with three comparison tabs. Assuming you're merging others changes into
# your branch, this shows you:
# - 1st tab: yours|merged result|theirs (do the merge here into the middle pane)
# - 2nd tab: base vs your changes (look at just your changes)
# - 3rd tab: base vs their changes (look at just their changes)
cmd = meld $LOCAL $BASE $REMOTE --output $MERGED --diff $BASE $LOCAL --diff $BASE $REMOTE --auto-merge
I use Beyond Compare mainly for sync of folders by comparing files (sizes, dates) and not for file contents diff as such. Part of my backup strategy while copying/syncing file between windows/mac/NAS ;-)
> On OS X, Meld is not yet officially supported. For pre-built binaries, these OS X builds are the best option.
> You can also get Meld from MacPorts, Fink or Brew; none of these methods are supported.
Can anyone recommend any of these unsupported options? The best diff GUI tool I've been able to find for OSX is DiffMerge (https://sourcegear.com/diffmerge/) on the App Store, and I'd like to have a tree view for folder comparisons.
It's not open source, and comes with all the baggage of perforce, but p4merge and p4diff are just excellent tools that I install on every machine I work on.
I use vimdiff and occasionally kdiff3 for git merging. what I really like meld for is merging two directory trees (e.g. reconciling two forks of the same code), they have the best tree diff ux of any of the common tools I've tried.
I was given a fresh copy of Windows at work the other week and had to install all tooling afresh. I decided to take the opportunity to try meld.
The first merge I did, even after reading the website, I couldn't fathom it. I understood the paradigm of merging into $BASE but couldn't figure out how to simply take these 5 lines from $REMOTE and these 3 from $LOCAL, so went back to the trusty Beyond Compare.
I don't like the whole "balloons with tails" thing meld does.
xxdiff strikes the best balance between "being a graphical tool" and "not having distracting clutter" in my opinion.
Is Meld aware of the programming language when it does diffs? The problem I have with many diff tools is that they'll detect block moves without regard for things like method boundaries. Instead of showing the change as moving a method's ordering, with some changes within those methods, most diff tools treat it as just text moves and changes.
So to me, "targeted at developers" should mean something more than what Meld seems to offer (i.e., more than just syntax highlighting and regex filtering).
It's disappointing that programming language-sensitivity isn't more common. [I developed a Visual Basic compare/merge app in the early 90s that did a good job of this because it did extra work to understand the structure of the code, splitting methods and sorting them before comparing.]
There's the commercial SemanticMerge [0] which might work if it has a parser for the language that you use. According to their docs they currently only support C#, Java, C, C++ and PHP [1].
I have used Meld very happily for years on various Linuxes. But am not a developer—use it mainly for sync conflicts on things like to-do lists and article drafts. Thank you builders! It is an awesome tool.
I remember at one point there was a new version (based on gtk3 perhaps) that didn't work as well (useless type of scrollbars and slow) and I did some shenanigans to have an older version again on archlinux. However now even fresh installs do look and work good, I'm not sure what happened to that new version, maybe they improved the gtk3 based one to be as good as the one before it and I don't notice the difference anymore...
I've ben using Meld daily for more than 10 years now. I am not so sure it can be defined "performant". Maybe your box is really powerful, but on small and mid-sized systems its performance is more on the clunky side.
I remember its performance worsened when it migrated to GTK3. It has stayed semi-slow for me since then.
WinMerge is better. It has better UI: bottom line comparison, keyboard shortcuts, copy left to right and vice-versa, lots of preferences settings, etc. Too bad it is Windows-only.
If you can accept a paid version of WinMerge for Linux and Mac I'd highly recommend BeyondCompare (U$ 30.00).
Meld is great. The only nitpick I have is that winmerge was more efficient in resolving a file with the alt-down alt-left/right commands going one diff block at a time.
In meld, these commands operate depending on focus. When the focus is in the left file, alt-right merges to the right, but you cannot do alt-left to merge from the right file.
I use both Meld and Diffuse[1] depending on what I do. I find Diffuse represents diffs better visually, while Meld being better for actually merging contents since you can just click on those arrows.
I used it a lot many years ago, not so much now. I don't even know if it's on my laptop. I'm not using any other alternative. Maybe git merge and git diff are good enough for my needs. I'm also using both gitk and gitg, usually gitg. Maybe they qualify as alternatives.
Haven't tried Meld and i'm always up for an enhanced workflow but merge/diff is all about context, the more context you can add about where something came from / is going to, its history etc the better. In this regard it is almost impossible (never say never) to beat your IDE for the possibility of a good merge/diff, it has all the context plus syntax highlighting, compiler errors / build scripts etc. I can merge two files, plus git blame where the changes came from, plus syntax highlight and see likely compile errors, remove unused imports and apply consistent formatting all in one step.
This is why I always use IntelliJ merge/diff for supported languages, it just has so much more information about the merge/diff already available.
I only recently used this for the first time and I must say: perfect for a quick file comparison. Don't know about other use cases. Nice to see it mentioned here.
With the switch to GTK3, it no longer fits on my screen (and headerbars stand out like a sore thumb too). Kdiff3 was confusing for a moment, but does a good job too.
It depends on the user I suppose. I use the `git diff` and bare `diff` and `patch` commands which works fine for me, but there are a lot of people who either just don't like it or don't want to dive that deep into those tools.
I too wish Kaleidoscope wasn't quite so expensive. I've had my eye on since the v3 rewrite but can't bring myself to spend $150 on a tool I'll only use occasionally. I wish there was a "lite" version for $50.
brunno|4 years ago
Not affiliated with them in any way by the way.
[1] https://www.sublimetext.com/ [2] https://www.sublimemerge.com/
rubyist5eva|4 years ago
mackrevinack|4 years ago
recov|4 years ago
LeicaLatte|4 years ago
wallstprog|4 years ago
For example, I use its "Table Compare" feature to compare log files from different machines, sorted by timestamp. This lets me easily see the order of operations in a distributed system.
j1elo|4 years ago
The directory contents tree diff is also really useful.
I wish they made it even easier the basic case of comparing aribtrary text. Maybe it should be the default mode after opening the program, instead of having to click on a couple buttons, because I use it a lot to manually paste pieces of text. For example, logs from a server during testing, to compare what went different between runs.
Another welcomed addition would be "ignore masks". Some kind of regex input that could be used to quickly tell Meld which parts of the text to skip comparing. That way, comparison of log files could be made where a timestamps column would be ignored.
Vinnl|4 years ago
andrewshadura|4 years ago
diego_moita|4 years ago
On Windows, WinMerge[1] is a better alternative. Too bad is Windows only.
For a non-FOSS and cross platform solution I recommend BeyondCompare (U$30.00)[2]. It replicates most of WinMerge UI.
[1] https://winmerge.org/
[2] https://scootersoftware.com/
bmitc|4 years ago
dataflow|4 years ago
zem|4 years ago
Shorn|4 years ago
crispyalmond|4 years ago
codedokode|4 years ago
Currently I am using KDiff3. It is a little buggy and doesn't have a nice UI but it is the best open source merging tool that I am aware of. It allows choosing lines from original file, from A, B and manual editing.
I noticed that certain popular and highly praised commercial IDE also provides only 3-panel interface for merging. This makes resolving conflicts more difficult and prone to errors.
dflock|4 years ago
anamexis|4 years ago
Isn't one of version A or B the original file? What am I missing?
thelittlenag|4 years ago
JSoet|4 years ago
a-dub|4 years ago
back in the days when i was responsible for regular merges for a pretty big project (weekly or so, 10-30 devs on both sides, n*1e7 LoC), i took the time to learn ediff and did my merges in lucid/xemacs.
i had colleagues at the time who had nice things to say about beyondcompare.
more recently i have seen this meld thing and it has piqued my curiosity.
favorite tool for quick no-frills out-of-practice-with-real-tools visual diff is fldiff built on fltk.
distances|4 years ago
I often have colleagues who are inexplicably afraid of merge conflicts and try to negotiate who's working on which parts of the app. I think a proper merge tool could help them to overcome this.
loloquwowndueo|4 years ago
zmmmmm|4 years ago
it may not be the best merge tool in existence but it's adequate (which is actually, suprisingly good, given it is not at all its intended function) and at that point having all my standard vim configuration, editing capabilities etc. beats anything another tool would bring to the table.
Not to mention, 100% terminal UI and built-into-vim means I can use it everywhere and anywhere without thinking about it.
noselasd|4 years ago
gebruikersnaam|4 years ago
bhaak|4 years ago
Or on terminals https://github.com/mookid/diffr with specific settings that use 256 colors for highlighting word differences as well.
But for manual merging I haven't found anything better than ediff. That's the only reason I install emacs on my work machines. Seemless integration into a text editor is just unbeatable.
funstuff007|4 years ago
dflock|4 years ago
panick21_|4 years ago
laurent123456|4 years ago
JakeAl|4 years ago
phren0logy|4 years ago
BeetleB|4 years ago
NKosmatos|4 years ago
jamesfmilne|4 years ago
neves|4 years ago
HelloNurse|4 years ago
> You can also get Meld from MacPorts, Fink or Brew; none of these methods are supported.
Can anyone recommend any of these unsupported options? The best diff GUI tool I've been able to find for OSX is DiffMerge (https://sourcegear.com/diffmerge/) on the App Store, and I'd like to have a tree view for folder comparisons.
Terretta|4 years ago
https://kaleidoscope.app/
oneplane|4 years ago
andreineculau|4 years ago
poloniculmov|4 years ago
maxekman|4 years ago
Edit: what->which
gcheong|4 years ago
technobabbler|4 years ago
maccard|4 years ago
secondcoming|4 years ago
https://www.perforce.com/products/helix-core-apps/merge-diff...
epage|4 years ago
KANahas|4 years ago
mistrial9|4 years ago
https://gitlab.gnome.org/GNOME/meld ## code
Meld 3.21.1 — 07 Jan 2022 -- thanks Meld !!
arcticbull|4 years ago
black_puppydog|4 years ago
trwhite|4 years ago
angrais|4 years ago
JamesBrooks|4 years ago
Zardoz84|4 years ago
JonChesterfield|4 years ago
zem|4 years ago
forrestthewoods|4 years ago
It’d be a great if an OSS tool was as good or better. But my experience thus far is that Araxis/BC3 are simply much better.
wackro|4 years ago
The first merge I did, even after reading the website, I couldn't fathom it. I understood the paradigm of merging into $BASE but couldn't figure out how to simply take these 5 lines from $REMOTE and these 3 from $LOCAL, so went back to the trusty Beyond Compare.
Might give it another shot.
tpoacher|4 years ago
I don't like the whole "balloons with tails" thing meld does. xxdiff strikes the best balance between "being a graphical tool" and "not having distracting clutter" in my opinion.
tedyoung|4 years ago
So to me, "targeted at developers" should mean something more than what Meld seems to offer (i.e., more than just syntax highlighting and regex filtering).
It's disappointing that programming language-sensitivity isn't more common. [I developed a Visual Basic compare/merge app in the early 90s that did a good job of this because it did extra work to understand the structure of the code, splitting methods and sorting them before comparing.]
karlding|4 years ago
[0] https://www.semanticmerge.com/
[1] https://www.semanticmerge.com/features
m12k|4 years ago
I haven't tried it, but it does seem like a good direction to be trying to take merge tools.
ntnsndr|4 years ago
Aardwolf|4 years ago
I remember at one point there was a new version (based on gtk3 perhaps) that didn't work as well (useless type of scrollbars and slow) and I did some shenanigans to have an older version again on archlinux. However now even fresh installs do look and work good, I'm not sure what happened to that new version, maybe they improved the gtk3 based one to be as good as the one before it and I don't notice the difference anymore...
neves|4 years ago
I never found one with features good enough to make me change from Kdiff3.
ubercow13|4 years ago
blobbers|4 years ago
This is older than most people here!
Klasiaster|4 years ago
I definded this wrapper script ~/bin/git-ydiff-s:
with which you can do `git ydiff-s` in your repos easily.runnerup|4 years ago
It’s slightly tricky to integrate into Sourcetree but once you configure Sourcetree with the correct command line args it works quite painlessly.
Meld is extremely performant too.
Another text editor I love is “010 Editor”, it’s the only windows app I’ve found that works well on 2+ GB files without slowing my computer down.
muxator|4 years ago
I've ben using Meld daily for more than 10 years now. I am not so sure it can be defined "performant". Maybe your box is really powerful, but on small and mid-sized systems its performance is more on the clunky side.
I remember its performance worsened when it migrated to GTK3. It has stayed semi-slow for me since then.
thunderbong|4 years ago
[0]: https://winmerge.org
diego_moita|4 years ago
If you can accept a paid version of WinMerge for Linux and Mac I'd highly recommend BeyondCompare (U$ 30.00).
david_draco|4 years ago
In meld, these commands operate depending on focus. When the focus is in the left file, alt-right merges to the right, but you cannot do alt-left to merge from the right file.
wooptoo|4 years ago
[1]: https://github.com/MightyCreak/diffuse
layer8|4 years ago
[0] e.g. https://stackoverflow.com/questions/10594653/is-there-any-wa...
pmontra|4 years ago
sandGorgon|4 years ago
greggman3|4 years ago
yboris|4 years ago
https://diff2html.xyz/
hprotagonist|4 years ago
politician|4 years ago
nhoughto|4 years ago
This is why I always use IntelliJ merge/diff for supported languages, it just has so much more information about the merge/diff already available.
rambambram|4 years ago
rhn_mk1|4 years ago
whateveracct|4 years ago
pxeger1|4 years ago
oneplane|4 years ago
ris|4 years ago
rasz|4 years ago
umvi|4 years ago
throwaway81523|4 years ago
gnufx|4 years ago
Xenoamorphous|4 years ago
eddyg|4 years ago
juddlyon|4 years ago
luckman212|4 years ago
spyc|4 years ago
thefz|4 years ago
LeicaLatte|4 years ago
albina82|4 years ago
[deleted]
wetpaws|4 years ago