On Fri, 30 Oct 2015 10:59:49 -0700 (PDT)
Ivan Švaljek <ivan.sval...@gmail.com> wrote:

> Yes I would like to get the diff state in a C# program of mine, Git
> is one candidate if it's the easiest way to get such a state.
> Git is also a candidate because it has some merge functionality if
> I'm not wrong.

Well, you can leverage git for diffing, and it supports several diffing
algorythms of various properties (and respective sets of tradeoffs) but
you should be aware of certain things:

* Git's tools related to diffing and merging only work on objects
  contained in a Git repository.
  That is, to use these algos on arbitrary data you'd need to either
  shovel such data to a Git repo or extract those algos from the Git
  source code and re-write them in C#.

* Your notion of "destructiveness" is *very* specific to your particular
  task.  Sure, no generic tool such as Git does not implement anything
  even remotely resembling what you are after.  Git is only smart about
  fuzzy matching and ignoring whitespace changes (when told to do so).
  Sure it knows nothing about CSS or any other textual data format.

Hence my personal opinion on this is that you will hardly be able to
leverage existing *generic* tools except for actually using them to
detect the changed lines of text; after that, you'd need to use your
custom logic to classify those changes.  But that really is not that
simple: take CSS for instance -- it's not a line-wise but rather a
block-wise format with the complicated set of rules of how a block or a
declaration in it applies to the DOM.  So IMO to *semantically* diff CSS
files you actually should have code which parses both complete versions
to abstract syntax trees and then compares them, not files.

And if you still think that a poor man's line-wise approach would be
"good enough", that's okay, and I think that there should exist
pure-.NET libraries implementing diffing algorythms for textual data.
So why not just use these assemblies instead of depending on a
hard-to-package external tool like Git?

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to