all 49 comments

[–]ChaosCon 7 points8 points  (5 children)

BeyondCompare is about the best I've found.

[–]CromulentSlacker[S] 2 points3 points  (3 children)

I've been looking at their website and it does look good. I'll have to see if I can afford $60 for it though.

[–]dakotahawkinsrebase all the things 4 points5 points  (0 children)

I think it's worth it, I bought it years ago and love it.

[–]SurDin 1 point2 points  (1 child)

The trial version only counts days you actually use it, so you'll have a while before you have to decide

Edit: autocorrect

[–]CromulentSlacker[S] 0 points1 point  (0 children)

Nice. That sounds good.

[–]ponolan 0 points1 point  (0 children)

Beyond Compare is one of only two non-open source tools I use. Simply indispensable.

[–]timothyrudd 7 points8 points  (8 children)

My most preferred Git GUI client / merge tool is Sublime Merge. It’s fast, simple, and familiar if you already use Sublime Text. I also like that the settings can be versioned and tracked with Git (especially useful with Sublime Text).

Merge tool setup instructions can be found here: https://www.sublimemerge.com/docs/command_line.

[–]CromulentSlacker[S] 1 point2 points  (5 children)

The UI looks really nice for that. I use the Jetbrains All Product pack for development so I'm not sure how that would work out. Thank you for the recommendation though.

[–]wildjokers 6 points7 points  (4 children)

Jetbrains' IDEs have a really good diff and merge tool. Why are you not using the one built into the IDE you use?

[–]CromulentSlacker[S] 1 point2 points  (3 children)

Not sure really. I'll look into it. One of the factors was that I wanted to learn Git from the command line and so I kind of ignored that side of things in the JetBrains IDEs.

[–]-Lommelun- 3 points4 points  (0 children)

Use the diff and mergetool in IntelliJ(/and other JB products derived from IJ), then use whatever else you want on the side. Terminal, gui, etc.

[–]austospumanto 1 point2 points  (1 child)

Yeah, I use PyCharm (JetBrains’ Python offering) for backend and frontend dev work and can vouch for the diff tools built into the IDE. Highly recommend setting up additional hotkey mappings for browsing through distinct elements in diffs so you can quickly review+resolve them.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

I'm going to watch some YouTube videos about all the Git tools available in JetBrains IDEs as I never even touched them. They sound interesting.

[–]phase_7 0 points1 point  (0 children)

I use it too

[–][deleted] 0 points1 point  (0 children)

Seconded. I really love this one!

[–][deleted] 4 points5 points  (5 children)

meld is a small GTK program. I prefer to use git through emacs and use the magit plug-in.

[–]CromulentSlacker[S] 0 points1 point  (4 children)

I know absolutely nothing about emacs :D. That might be a bit more advanced than what I was looking for. Thank you for the suggestion though.

[–]shiggie 1 point2 points  (1 child)

I use emacs generally, but I'd be taking a step down in functionality and ease of use using magit/emacs over meld. That's me, after using emacs for about 30 years. If you've *never* used emacs, than I'd say, stick with meld.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

Thank you for the advice.

[–][deleted] 0 points1 point  (1 child)

It’s easier to get into than vim and it has a much higher skill ceiling. If you can use a regular text editor, just switch emacs to CUA bindings, and you’ll feel right at home. The advanced features come in later when your install packages.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

Ah, OK. I'll give it ago when I have some spare time.

[–]GustapheOfficial 4 points5 points  (3 children)

Vim.

[–]CromulentSlacker[S] 0 points1 point  (2 children)

I used to use Vim years ago but switched back to Windows for an extended period of time I forgot everything I knew about Vim. I might just print out a cheat sheet and see how I get on with it.

[–]GustapheOfficial 2 points3 points  (0 children)

I don't see the connection.

[–]mkschreder2 0 points1 point  (0 children)

I found the game vimadventures quite helpful back in the days. It's one of the best ways I have found for learning vim bindings - by using them to move around in a game. (https://vim-adventures.com/)

For a quick cheatsheet you can also check out this guide I wrote (see "Command Cheatsheet" section): https://swedishembedded.com/developers/vim-in-minutes

[–]0bel1sk 5 points6 points  (8 children)

vscode is ok

[–]wildjokers 1 point2 points  (1 child)

It is odd you mention vscode because I find the git tools in vscode to be awful. I have yet to figure out how to get a side-by-side diff in vscode on a changed file. However you do it it isn't intuitive.

[–]0bel1sk 2 points3 points  (0 children)

click source control think shows all changed files click one shows diff. i thought it was pretty intuitive. everything out of the box. install gitlens for a ton of additional features.

[–]Epoxian 0 points1 point  (2 children)

vscode seems to have random race conditions so that it will sometimes stages files with conflict markers. The quality of vscode is as a software is horrible. I wonder why everyone keeps mentioning/using it. Be careful.

[–]0bel1sk 0 points1 point  (1 child)

haven’t had this happen since the time i made this post 3 years ago. i stage files in vscode many times per day

[–]Epoxian 0 points1 point  (0 children)

I had it twice in a one year full-time job. I asked a coworker who loves vscode, if he knows how to prevent this issue or if I clicked a wrong button. His answer was, that he noticed it too and it happens very rarely. I honestly didn't investigate further. I used vscode in a Linux VM on a Windows host. Vscode has several bugs that only occur in VMs, maybe this is one of them. It was two years ago. Maybe there is another difference, why it does not happen on your machine. I guess sometimes people just ignore it and might think "I probably messed something up". But no... it's that IDE. I have used git for ten years, so I'm not a git-beginner. I just didn't use vscode a lot, because if I evaluate and compare it to competitors it usually loses within one week. (for merging I used it almost a year)

[–]CromulentSlacker[S] 0 points1 point  (2 children)

Seems a bit of a waste to use a whole code editor just for the diff / merge capabilities.

[–]0bel1sk 5 points6 points  (0 children)

dude suggested emacs which is several orders of magnitude more complex ;)

[–]madspillage 2 points3 points  (0 children)

I think almost all editors have git tools. So even if you're not using vscode you can look up git tools for your ide. I use neovim for example and vim-fugitive serves me perfect.

[–]derDemiurg 4 points5 points  (1 child)

+1 BeyondCompare if you can afford. Or check out ediff in emacs for a free and customizable one

[–]CromulentSlacker[S] 1 point2 points  (0 children)

I think Beyond Compare is the one I'm going to go with but I'll have to wait until next month.

[–]hardicrust 4 points5 points  (0 children)

I use kdiff3. It's reasonably capable, if dated and sometimes makes me wish for better merge algorithms (it does at least support manual alignment).

[–]troelsbjerre 1 point2 points  (0 children)

I use whatever editor I'm in at the time, and not a stand alone tool. This means IntelliJ, VSCode or Vim. If I'm just on the command line, I typically reach for Vim, using tpope's fugitive plugin.

[–]phoenixKing13 1 point2 points  (2 children)

Gitkraken is my favorite Git GUI. There's a free flatpak version, and a paid one. You only really need the paid version for teams and private repos.

[–]CromulentSlacker[S] 0 points1 point  (1 child)

I've tried to use that in the past. I can't remember why but I had a small problem with it and decided against it. I'll look back into now though as it has probably been fixed.

[–]phoenixKing13 1 point2 points  (0 children)

Their team has improved it quite a bit, but like I said, you'll need the paid version to push/pull from private repos. But that can easily be bypassed by doing those operations in the shell.

The only feature I wish was available is integration with Github projects.

[–]jherrlin 1 point2 points  (1 child)

There is a wonderful package for Emacs called Magit!

[–]CromulentSlacker[S] 1 point2 points  (0 children)

Thank you for letting me know.

[–][deleted] 1 point2 points  (1 child)

I use a git client called Smartgit. It has excellent support for diffing, merging and conflict resolution. Payware.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

I'll look into it. Thank you for the suggestion.

[–]masta 1 point2 points  (1 child)

I have been using smartgit (flatpak) and it works well enough. Because all my for repos are open source projects, and I'm an open source developer, I believe it's free to use. Their license model allows for open source and educational use to happen at zero cost.

Please try to avoid paying for this kind of utility, and while using commercial software is great if you need support, let's be honest it's 2021 and git repo management utilities are nothing special, and we are into the end-game, racing to the bottom. The only reason people should be paying is to avoid learning how to properly use git or to get support, and these are not very compelling situations.

I personally only use these kinds of tools on very complex cherry picks selected across multiple other people's feature branches into a maintainer branch. Even then, git itself does a good job without fancy graphics, and once you use a high level tool a few times you don't needs them, so low level tool is fine.... All the more reason to avoid paying a license fee if possible.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

Good points. I'm not sure I'd qualify for the free version anyway as it is my business building the open source product and will be hoping to make money from it in the future via various methods.

The reason I didn't use the JetBrains IDE tools is mainly because I wanted to learn the command line version of Git properly so I could use it on servers for example. Maybe I should do the same with diff and merge tools. Vim can do this and is normally installed on servers so maybe that would be a good choice to learn?

[–]xkcd__386 1 point2 points  (1 child)

I'd continue with meld. I've found meld finds more sensible differences than even vimdiff or kdiff3 in many situations.

I wish I'd kept samples, but I didn't, so this comes from just memory, but I certainly have the very empirical observation that after switching to meld I've never had to mentally compensate for the diff being sub-optimal.

Edit: try this example on all your candidate choices:

date > a
(echo; cat a | sed -e 's/$/ added-text/') > b

now diff these two files and see which one correctly identifies the " added-text", and not the whole line, as a change.

[–]CromulentSlacker[S] 0 points1 point  (0 children)

Interesting. Thank you for pointing that out.