BeyondCompare 3, my favorite, has a merge functionality in the Pro edition. The good thing with its merge is that it let you see all 4 views: base, left, right, and merged result. It's somewhat less visual than P4V but way more than WinDiff. It integrates with many source control and works on Windows/Linux. It has many features like advanced rules, editions, manual alignment...
The Perforce Visual Client (P4V) is a free tool that provides one of the most explicit interface for merging (see some screenshots). Works on all major platforms. My main disappointement with that tool is its kind of "read-only" interface. You cannot edit manually the files and you cannot manually align.
Meld is a newer free tool that I'd prefer to SourceGear Diff/Merge: Now it's also working on most platforms (Windows/Linux/Mac) with the distinct advantage of natively supporting some source control like Git. So you can have some history diff on all files much simpler. The merge view (see screenshot) has only 3 panes, just like SourceGear Diff/Merge. This makes merging somewhat harder in complex cases.
PS: If one tool one day supports 5 views merging, this would really be awesome, because if you cherry-pick commits in Git you really have not one base but two. Two base, two changes, and one resulting merge.
As for merging, there aren't three views but it's all combined into one with colored highlighting for each version. You can edit the code directly or there are buttons to use whichever version of that snippet you want.
The only problem I've had is refreshing -- when working with large repositories atom can be slow to update changes you make outside of it. I just always close it when I'm finished, and then reopen when I want to view my changes/commit again. You can also reload the window with ctrl+shift+f5, which only takes a second.
I want to be able to launch an external text diff/merge tool for certain cases that Semantic Merge can't handle smart. I think I saw in one of the change logs that an external text tool can be launched by holding the shift key? When pressing the text diff button? It didn't seem to work. I don't want to override the text diff tool in general, just for particular cases where I know other tools work better.
1) You say that certain cases SM can't handle them smart, it's due to they are XML or are any supported language but the result is not what you expect? If it's the second one can you please send us the merge case to support at codicesoftware dot com?
I removed -lang=csharp option and that shows a different dialog when editing conflicts on .csproj files. If I shift+click text tool button, it still opens xmerge, but after closing xmerge I now get a new dialog saying an external merge tool was not configured. That's new and at least it tells me my configuration has not been recognized.
I tried your suggestions of using \ separator and adding extra quotes at start/end, but that did not seem to have any effect. I also re-read the articles in the hope they had been updated, but they do not seem to.
I just figured it out though, while writing this. I checked my tortoisegit settings and I had specified -edt=default and -emt=default. Obviously this took precedence over what I configured in the semanticmerge.conf file. I removed those and now the external tool is working again.
I'm Working with ArcMap 10.7.1 (Personal Use License) and the merge tool doesn't work properly. The results show up as if everything was fine, but it just doesn't create a new shape or feature class. I've tried using different folders and even, the default location for the output, but it doesn't create anything.
You will have to elaborate on the filenames and paths you are using. It sounds like you aren't navigating to a saving workspace (folder or geodatabase) but relying on something that had worked in the past
If one or more parameters are given, the merge tool program willbe run to resolve differences in each file (skipping those withoutconflicts). Specifying a directory will include all unresolved files inthat path. If no names are specified, git mergetool will runthe merge tool program on every file with merge conflicts.
If a merge resolution program is not specified, git mergetoolwill use the configuration variable merge.tool. If theconfiguration variable merge.tool is not set, git mergetoolwill pick a suitable default.
You can explicitly provide a full path to the tool by setting theconfiguration variable mergetool..path. For example, youcan configure the absolute path to kdiff3 by settingmergetool.kdiff3.path. Otherwise, git mergetool assumes thetool is available in PATH.
Instead of running one of the known merge tool programs,git mergetool can be customized to run an alternative programby specifying the command line to invoke in a configurationvariable mergetool..cmd.
When git mergetool is invoked with this tool (either through the-t or --tool option or the merge.tool configurationvariable), the configured command line will be invoked with $BASEset to the name of a temporary file containing the common base forthe merge, if available; $LOCAL set to the name of a temporaryfile containing the contents of the file on the current branch;$REMOTE set to the name of a temporary file containing thecontents of the file to be merged, and $MERGED set to the nameof the file to which the merge tool should write the result of themerge resolution.
If the custom merge tool correctly indicates the success of amerge resolution with its exit code, then the configurationvariable mergetool..trustExitCode can be set to true.Otherwise, git mergetool will prompt the user to indicate thesuccess of the resolution after the custom tool has exited.
When git-mergetool is invoked with the -g or --gui option,the default merge tool will be read from the configuredmerge.guitool variable instead of merge.tool. Ifmerge.guitool is not set, we will fallback to the toolconfigured under merge.tool. This may be autoselected usingthe configuration variable mergetool.guiDefault.
Process files in the order specified in the, which has one shell glob pattern per line.This overrides the diff.orderFile configuration variable(see git-config[1]). To cancel diff.orderFile,use -O/dev/null.
Specify the command to invoke the specified merge tool. Thespecified command is evaluated in shell with the followingvariables available: BASE is the name of a temporary filecontaining the common base of the files to be merged, if available;LOCAL is the name of a temporary file containing the contents ofthe file on the current branch; REMOTE is the name of a temporaryfile containing the contents of the file from the branch beingmerged; MERGED contains the name of the file to which the mergetool should write the results of a successful merge.
For a custom merge command, specify whether the exit code ofthe merge command can be used to determine whether the merge wassuccessful. If this is not set to true then the merge target filetimestamp is checked, and the merge is assumed to have been successfulif the file has been updated; otherwise, the user is prompted toindicate the success of the merge.
Older versions of meld do not support the --output option.Git will attempt to detect whether meld supports --outputby inspecting the output of meld --help. Configuringmergetool.meld.hasOutput will make Git skip these checks anduse the configured value instead. Setting mergetool.meld.hasOutputto true tells Git to unconditionally use the --output option,and false avoids using --output.
When the --auto-merge is given, meld will merge all non-conflictingparts automatically, highlight the conflicting parts, and wait foruser decision. Setting mergetool.meld.useAutoMerge to true tellsGit to unconditionally use the --auto-merge option with meld.Setting this value to auto makes git detect whether --auto-mergeis supported and will only use --auto-merge when available. Avalue of false avoids using --auto-merge altogether, and is thedefault value.
After performing a merge, the original file with conflict markerscan be saved as a file with a .orig extension. If this variableis set to false then this file is not preserved. Defaults totrue (i.e. keep the backup files).
When invoking a custom merge tool, Git uses a set of temporaryfiles to pass to the tool. If the tool returns an error and thisvariable is set to true, then these temporary files will bepreserved; otherwise, they will be removed after the tool hasexited. Defaults to false.
Set true to use the merge.guitool by default (equivalent tospecifying the --gui argument), or auto to select merge.guitoolor merge.tool depending on the presence of a DISPLAY environmentvariable value. The default is false, where the --gui argumentmust be provided explicitly for the merge.guitool to be used.
LOCAL, BASE and REMOTE are read-only buffers showing the contents of theconflicting file in specific commits ("commit you are merging into", "commonancestor commit" and "commit you are merging from" respectively)
MERGED is a writable buffer where you have to resolve the conflicts (using theother read-only buffers as a reference). Once you are done, save and exit Vim asusual (:wq) or, if you want to abort, exit using :cq.
When using these variants, in order to specify a custom layout you will have toset configuration variables mergetool.gvimdiff.layout andmergetool.nvimdiff.layout instead of mergetool.vimdiff.layout (though thelatter will be used as fallback if the variant-specific one is not set).
I'm a big fan of meld - a visual diff and merge tool for Gnome. It shows two files (or directories) side-by-side and with their differences highlighted, and I can easily select which parts I want to move from one file to the other.
3a8082e126