Subject: Re: Verilog/ASIC development support is insufficient in git , help!

From: Jakub Narebski <[email-masked]>
Date: Sun, 11 May 2008 02:23:54 -0700 (PDT)

"Justin Leung" <[email-masked]> writes:

> Hi all,
> 
> * This email probably represent the whole hardware ASIC community
>   about git *
> 
> I'm evaluating Git as the replacement of CVS for the ASIC group in
> my company, but things are moving along very bumpy.
> 
> I (and many others doing the evaluation) love the tool dearly; we
> love the local repository and inter-db sync'ing .  I see a lot of
> potential in productivity and changes in work model that helps
> efficiency in ASIC dev.

Please note that Git is not the only OSS DVCS.  There is Mercurial,
which has repute of being easy to use (in my opinion: at least for
mainly linear development), and there is Bazaar (formerly Bazaar-NG).
Both are mature products.

IMHO the main strength of Git (besides performance, but now I think it
is less of an edge, especially for not very large projects) is deling
with nonlinear history and branch-based (topic  branches) development.
If that is the worth paying essential complexness (as opposed to
accidental complexness, which unfortunately Git also has some) for...

> BUT, my managers, some veterans, and directors are EXTREMELY
> concerned about the ease-of-use..  so much that they are going to
> pick SVN !  uh-oh....i m serious =(
> 
> Alot of people argued, why not SVN ? it's CVS++ and it's ease of use
> not a problem when comparing to Git.

Perhaps Subversion is the right tool for you.

> Here are the things not fitting right in ASIC dev:
> 
> - no incremental revision numbers (they are so scared of the 40hex SHA1)

Incremental revision numbers _require_ single, central authority
assigning them.  You cannot have simple revision numbers in truly
distributed development.

Both Mercurial and Bazaar allow to use incremental revsision numbers,
at least for revisions (commits) along trunk (mainline).  Note that
revision numbers are either local to repository (Mercurial, Bazaar),
or require treating one of repository as special, i.e. use different
commands for central repository from commands used when merging in
other repositories (Bazaar).

> - Inability to reference without SHA1, they want simple numbering (ie,
> version 100, 120, 120.1, 130.4.5)

You can tag, and use git-describe output, i.e. v1.4.2, or
v1.5.5.1-182-g7480b28.  Or you can use transitional "reverse"
numbering, counting from latest revision, like HEAD^, master~10,
or master@{2} (the last has only local meaning, and only if reflogs
are enabled which is now default).

> - Inability to refer to a file by a simple number

Errr... refer to _file_ by a number? Why not a pathname, or revision
and pathname (<rev>:<path> format)?

> (the backend guys will be confused by SHA1; they can't work with
> anything more than 4-5 digits)

You can use shortened sha1, usually 7 characters... but I think this
is an artificial fear.  When using git you almost never have to use
either SHA1, or shortened SHA1 identifier.

> - Complexity of commands (although we can have warpper, but real git
> commands for non-sw guys is not going to happen)

Now that Cogito is unmaintained, you can try EasyGit (eg) or Pyrite,
although AFAIK both are in early development stages.  And there is
also git-gui and other commit tools there...

> Most hardware chip designers were using CVS since their first job.
> It suited the purpose very well.

And is probably responsible for some SCM bad habits...

> Most RTL design veterans only use less then 5-6 cvs commands in their
> whole life (LOL, i m serious)
[...]
> We don't use branches.

Bad habit!

Probably because branching in CVS was very complicated, error prone,
and just plain uncomfortable to use (sticky tags, blehhh...).

Subversion makes it easy to branch, but developers forgot to make it
easy to merge (this is to be corrected in upcoming 1.5 release, and
you can migitate it using third party tools / extensions like svnmerge
or SVK; the last also gives replicability, and beginnings of
distributed development).

> Our model is strict forward with a centralized, one main branch model
> to avoid mistakes .
> We see branches as evil ; some merges in Verilog codes means another
> 10+ hours of simulation and regression.

Bad habit!

Branches are there to not stomp on each other changes when deveoping
independent features.  They are also a must have if you plan to
maintain fixes to old releases.

When merging is easy it allows you to merge early, or do a try merge,
and fix conflict early, when they are easy to spot and resolve.

Please watch Linus Torvalds opinionated Google Tech Talk on Git:
  http://www.youtube.com/watch?v=4XpnKHJAok8
  http://git.or.cz/gitwiki/LinusTalk200705Transcript

> I'm a verification engineers for the hardware chips designers, there
> we use Vera and SystemVerilog which requires much in
> depth use of SCM functions.  So, the choice of tools is much more
> important on our side (the designers only checkin and out, diff, and
> minimal merging)

Could you elaborate? What SCM functions do you need?

> I m frustrated about the situration, i truly want Git in ASIC world !!!
> (yell out loud... no p4, no svn, no clearcase... or i rather keep cvs)

Subversion _is_ improvement on CVS, some brain damages of it aside (as
for example lack of _unchangeable_ tags; and no, unchangeable by
convention doesn't count).  You can use git-svn to interact with it.
 
> Is there a way to specify the use of a simple GIT model in config,
> or like, info/attribute, such that (in git main repository model of
> course):
> 
> (1) SHA1s are hidden, but replaced by simple numbers
> (2) Simple, incremental numbers (like 'git-5432' ; what we use
> 'git-describe' to generate)
> (3) Reference of simple revision numbers in all git commands and tools
> like gitk, not SHA1

I think you can get it by heavy use of tags from within hooks, even
without changes to git core, and without using any wrapper /
porcelain.  But this might affect performance.

Note (again) that "simple numbers" for revision names are possible
_only_ in centralized development, with centralized authority
assigning those incremental numbers ("monitor" in parallell
computing).

> I personally have no problem with the SHA1 . but many are allergic to it .

Again: in my use of git I almost never need to use SHA1, or shorthened
SHA1, even for copy'n'paste.

-- 
Jakub Narebski
Poland
ShadeHawk on #git