It it possible to configure Compare to use the Merge tool instead of the Diff tool? - visual-studio

I often need to compare the current version of a file with some previous one, and copy bits from one to the other. I can get close with TFS Compare:
except that by default, Compare uses the Diff tool, which only lets me view the diffs, but not copy from one file to another:
TFS comes with a Merge tool, which does let me copy, so is there a way to use this for comparing, or some other way to invoke the Merge tool, specifying the current file and a previous version? (I know that I could set this up with command line arguments, but then I'd have to do a lot of manual work to pass the current filename, get the previous version from TFS into a temp file and pass that filename. I'm looking for something that's integrated into Solution Explorer, and works like Compare, so it's just a couple of clicks away.)

I love using WinMerge for both the operations. You can find instructions on how to do it here: http://blog.degree.no/2013/12/using-winmerge-as-the-default-diffmerge-tool-in-visual-studio-2012/

Related

SVN: How to list author, date and comments from svn log

I am using SVN on Windows 10 machine. I want to list Author, Date and Comment of all commits within a date range. So I want to report 1 line per commit and each line has 3 columns. How can I do that?
I want to be able to copy that report and paste in Excel.
Thanks
Short answer
Nohow. You can't change format of log output in pure SVN, you can only disable (-q option) log-message in separate line(s)
Longer answer
Because svn log have always single (documented) format of output and -r option accept date as parameters you can write appropriate log-command and post-process results (in standard human-readable form or in xml-output)
Long answer
If generating different custom reports from SVN-repositories is your long-running regular task, you can to think (at least) about using Mercurial (with hgsubversion) as interface for processing data. With HG you'll have
- transparent access to original SVN-repos
- full power of templating and revsets for extracting and manipulating of data for your needs and requirements
What you are looking for is called the Subversion Webview. These are third party mostly free to use web view of your repository where you can filter out commints like the following:
You can either filter there in the view or copy it in excel and add a filter yourself.
Hope this helps.

svn external merge tool

On Linux, I am using diffuse as a diff tool with SVN, which is quite handy in my opinion. However, I would like to use it as a merge tool as well. When using an external merge tool (option (l) while merging) SVN passes five files to it: (i) the unmodified file, (ii) theirs, (iii) mine, (iv) the one to be stored, (v) the current working copy. I don't have a screen that allows me to handle diffuse with five files open at the same time, therefore I would like to know the following:
How can I close just one or two of the open files in diffuse?
or
How can I tell diffuse not to open all of them but just the once I need?
I have tried the following, with out success: The merge-tool is defined in the file ~/.subversion/config as follows:
merge-tool-cmd = diffuse
I simply replaced it by
merge-tool-cmd = diffuse $2 $3 $4
Can anyone help? Thanks and cheers in advance!
Yes, Subversion can be fun in this way...
The easiest way is to create a script that executes diffuse for you with the right parameters, and then specifying that script in your Subversion configuration.
I did the same thing with vimdiff. The Subversion manual explains what is involved and gives you an example script in Python and Windows Batch that you can hack for your own use.
From these two examples, you should be able to put together a short script in any language you prefer.

How do I get a file manifest for each revision in a git repository?

I have a git repository that was created on Microsoft Windows. Microsoft Windows has a case insensitive file system. The people checking into this repository have not been careful about the case of their filenames. This means that the same directory or file sometimes shows up under two different names.
I mean to fix this problem. But in order to really fix it, I have to get a handle on it.
Is there a quick and simple way to get a list of the files at each revision?
I need this in order to figure out which revisions (if any) have the same file under two different names so I can decide on a strategy for fixing such cases. This means I need to get this information en-masse as quickly as possible so the analysis consumes a resonable amount of time.
One way to get this is with ls-tree:
git ls-tree -r --name-only <commit>
(Note that this looks at the portion of the tree corresponding to your current directory, so you should either run it from the top level of your repo, or give the --full-tree option.)
This is essentially instantaneous, since all Git has to do is recursively examine the tree; it doesn't even have to look at the contents of files.
I'm not sure how you're going to use a list of filenames to detect the same file under two different names. If you just mean that you want to look for filenames that would be the same on a case-insensitive filesystem, then the list of filenames is all you needed.
However, if you think the files might actually have the same content, you could drop the --name-only, so that you'll also see the SHA1s of all the file, and can find identical files by looking for duplicate hashes.
You could run something like this:
git log --name-only --pretty="format:%H"
This command will show the the sha1 and the list of changed files for every revision.

Purpose of "$Id: ..." line in the header of source files

/* $Id: file.c,v 1.0 2010/09/15 01:12:10 username Exp $ */
I find this line in many source code files in the comment at the top (header) of the file. Why? Is it aimed for the version control software? -Thanks.
These sort of comments are automatically modified by various source code control systems, things like author, date, history and so forth.
See here for some common ones for RCS which is the first source code control system I ever saw to implement this sort of thing (that doesn't mean it was the first, just that RCS was the first I ever used and it had that capability).
One particular trick we used to use was to put the line:
static char *fileId = "$Id: $";
into the source file (and header files as well, although the names had to be unique) so that, when it was built, it would automatically have the ID of the files in the executable itself.
Then we could use something like strings to find out which source files were used to build the executable. Ideal for debugging problems in the field.
It tells CVS (and other VCSs) to expand the value of the Id at check-out time, so anybody reading the source file in question will know what version exactly was checked out for it. Not very popular any more (you can always ask your VCS for such info if you keep the source file in a client / repository / working directory -- or however else your VCS calls such things;-).
I believe you are correct. It appears to be a keyword substitution string for CVS.
Take a look at this question $id: name of file, date/time creation Exp $

Eliminating code duplication in a single file

Sadly, a project that I have been working on lately has a large amount of copy-and-paste code, even within single files. Are there any tools or techniques that can detect duplication or near-duplication within a single file? I have Beyond Compare 3 and it works well for comparing separate files, but I am at a loss for comparing single files.
Thanks in advance.
Edit:
Thanks for all the great tools! I'll definitely check them out.
This project is an ASP.NET/C# project, but I work with a variety of languages including Java; I'm interested in what tools are best (for any language) to remove duplication.
Check out Atomiq. It finds code that is duplicate that is prime for extracting to one location.
http://www.getatomiq.com/
If you're using Eclipse, you can use the copy paste detector (CPD) https://olex.openlogic.com/packages/cpd.
You don't say what language you are using, which is going to affect what tools you can use.
For Python there is CloneDigger. It also supports Java but I have not tried that. It can find code duplication both with a single file and between files, and gives you the result as a diff-like report in HTML.
See SD CloneDR, a tool for detecting copy-paste-edit code within and across multiple files. It detects exact copyies, copies that have been reformatted, and near-miss copies with different identifiers, literals, and even different seqeunces of statements.
The CloneDR handles many languages, including Java (1.4,1.5,1.6) and C# especially up to C#4.0. You can see sample clone detection reports at the website, also including one for C#.
Resharper does this automagically - it suggests when it thinks code should be extracted into a method, and will do the extraction for you
Check out PMD , once you have configured it (which is tad simple) you can run its copy paste detector to find duplicate code.
One with some Office skills can do following sequence in 1 minute:
use ordinary formatter to unify the code style, preferably without line wrapping
feed the code text into Microsoft Excel as a single column
search and replace all dual spaces with single one and do other replacements
sort column
At this point the keywords for duplicates will be already well detected. But to go further
add comparator formula to 2nd column and counter to 3rd
copy and paste values again, sort and see the most repetitive lines
There is an analysis tool, called Simian, which I haven't yet tried. Supposedly it can be run on any kind of text and point out duplicated items. It can be used via a command line interface.
Another option similar to those above, but with a different tool chain: https://www.npmjs.com/package/jscpd

Resources