Subject: Re: Git for design

From: Junio C Hamano <[email-masked]>
Date: Tue, 03 Mar 2015 12:48:06 -0800

Ernesto Alonso Montaño Ramírez  <[email-masked]> writes:

> I've a question about Git, can I use this application for design
> (architecture, no programming)? for example, controlling the versions
> of designs on AUTOCAD, PHOTOSHOP, ILLUSTRATOR, etc; management of
> documents...

Yes you can use this application.

But it depends on your definition of "use" how "useful" the end
result would be.  The features programmers find helpful by placing
their end products (i.e. the source code and text files in general)
under control in Git are:

 1. You can go back to any arbitrary version.

 2. You can inspect what the textual differences between two
    arbitrary versions A and B (but most often, two adjacent
    versions) are.  This is called "diff".

 3. You can take the "textual differences" from 2. and replay the
    change between A and C on top of another version C, which lets
    you pretend as if you did the same work you did going from A to
    B but starting at version C.  This is "apply", "merge",
    "cherry-pick", and "rebase".

Using Git (or any version control system) on non-text files, you
would still get the same benefit 1., obviously.

If the assets you feed Git are not something intelligible as "text"
(and I am guessing AUTOCAD, PHOTOSHOP and ILLUSTRATOR files are
not), you would not gain 2. or 3. immediately.

You however can still gain benefit 2., if you have a way to
"compare" two versions of these files in a non-textual way.  For
example, I do not know AUTOCAD at all, but if the program "autocad"
has a mode where it lets you feed two AUTOCAD files and point out
how the two are different visually (let's assume there is such a
program "autocad-compare" that takes two filename parameters to
compare), Git has a way for you to plug into its machinery so that
"git diff v1.0 v2.0 -- an-autocad-file" will write out the file at
version 1 and version 2 into two temproary files and call out to
"autocad-compare tmp1 tmp2" to have them compared.

For 3., too, Git has a mechanism to plug in a "merge-driver" of your
own, e.g. if you have a version of an AUTOCAD file A that was
modified to B by you and modified to C by your colleague and an
AUTOCAD program "autocad-merge A B C" is a way to merge the work you
two did starting from the same A to produce B and C into a single
unified version, then "git merge" can be told to use such an
external program as a plug-in to perform the file-level merge.