
As I've started working on this small CPU project, one of the first decisions I've been considering has been which version control system to use. I've been a user of subversion for most of my personal projects for several years now and am currently using it at a client. As a result I'm quite familiar with the ins and outs of using it on a variety of sizes of projects. I've become more aware of distributed systems, such as Git and Mercurial over the last year, but haven't really been able to get my head around the advantages of them. In particular, the quote below from Linus Torvalds has been in the back of my mind.
"The slogan of Subversion for a while was 'CVS done right', or something like that, and if you start with that kind of slogan, there's nowhere you can go. There is no way to do CVS right."
- Linus Torvalds
One of the main source control issues I've seen on several of the projects I've worked on has been the aversion to branches that most users have. Typically there is a big central source repository that everyone will check out from. You then develop in your own little world. When the particular piece of work is complete, you check it back in. Usually, there is a fairly high barrier or cost to those commits, with sets of test suites that you must pass before you can commit your code back to the central repository. The checks take hours to run and you can not check back in until your code passes all the tests. Otherwise everyone else is at risk. But I always found that if I was working on something non-trivial, I'd really like to make some progress and check point that half way, committing it in to just a local branch, then working on further. That would give me the confidence to make larger changes, safe in the knowledge I can revert back to a midway working point. That's what a branch would be for, after all, but not if they are hard to make and not if the commit cost is so high. So we never did that, working for days or weeks before committing any changes.
The second common frustration I've seen with a centralized repository occurs when two people are working closely together on a piece of the system. This happens to characterise almost every verification endeavor, for example. By common definition, the verification and design work should be done by two different people, just to get extra eyes on the spec. This avoids duplicating erroneous assumptions about the design and is fundamental to the whole process. As a consequence, we are almost always faced with the situation where changes need to be made by two or more people, in distinct parts of the code (e.g., testbench and rtl) but cannot be checked in because of mutual dependencies. The changes depend on each other and all the commit checks will fail for either change on its own. Various ways around this exist, disabling affected checks in the commit scripts, copying files into each others workspaces and other hacks. All because fundamentally the centralised server approach, with costly branches and high commit costs, doesn't really let this sort of work proceed in an effective way.
The third frustration is the general speed of the repository. Time to check things out, time to do merges, how long it takes to do a diff or an update. These operations can usually mean a break for coffee or a walk around while the tool fetches the changes, compares them and attempts to merge it all together. Compound that by working in remote sites or across multiple geographic locations.
Git claims to solve these problems and be a whole lot faster at the same time.
The key is in breaking away from a centralised server. The database is distributed to every developer. As a result, everyone works on their own branch by default. Making further branches is trivial, because they don't get sent to every other developer. Fewer issues with namespace collisions when naming a branch, no real concern about checking code in and someone else getting your partially finished work. Earlier today I'd listened to Joel Spolsky and Jeff Atwood talking about the fact that Git makes branching trivial, but I didn't really understand why until I watched a really interesting presentation from Linus Torvalds on the subject. It is supposed to be a talk about Git, but really he focuses almost exclusively on the advantages of a distributed repository. I'd initially thought the real advantage was the 'always available' nature of a distributed repository, so that you could work on a plane or generally away from a network and still be able to check in, look at histories and all the things you normally need the central server access for. That's certainly part of the reason why it is interesting, but the branching and merging cost reduction that Git claims to offer is a much bigger deal.
For my second source of frustration above, Git also provides a solution. As there is no central repository, everyone can pull and push data to each other. The verification engineer and designer can exchange files more easily, through a tracked, version controlled system, rather than the usual sideband exchanges or hacks to the check-in scripts. Git also addresses that third issue, because all of the files are local and it has been designed for performance. Network overhead isn't an issue for a diff or history request as you have all the data locally. Merges are similarly less painful. The claimed performance is impressive and part of the reason why I want to try Git out.
Now, the most glaring problem with all this is that it sounds like anarchy. There is no central organisation, check-ins can happen any time, so where did all the quality assurance go? Linus talks about the network of trust relationships in his presentation. But, you can still have acceptance tests on when you actually pull data from a particular user or set of users. You can require them to run a battery of tests before they are allowed to share their work with the rest of the project. The usual checks and balances can be put back in place for when the whole database gets reassembled, but the individual developers or groups of designers can work more efficiently in a sub-repository. Git also supports hierarchical projects that combine various blocks of code, in fact that seems to be the preferred use model. Each sub-system on a design would be a unique Git repository. It could be even broken down further and have each IP block in their own repository. The general approach that has been used in the past, with quality checks, can still be used with some changes, as a gate to when larger mergers take place. This probably requires some trusted people in the organisation to act as gatekeepers or guardians for each level, but the basic methodology shouldn't be too difficult to layer on top.
You can read a lot more about Git on the homepage, including conversion documents from other common source control systems and details on the actual commands to use. Looking through the SVN conversion document, the git command syntax appears a bit cleaner and generally more intuitive to me. I also played around with the merge and diff tools and they seem powerful. It was very easy to create and populate a repository, for example. I plan on using it for the next few projects I work on to get a feel for how really useful it is and where the issues are hidden.
Edit to add: I found this draft version of the differences between Git and Subversion quite useful.
Another distributed VC system we were testing out was Bazaar (http://bazaar-vcs.org). It's written in Python, has a very similar similar command set to Subversion, except that it understands branch history and easily merges branches (push and pull). I think we decided against it in favor of Subversion only due to it not being ready for prime time 2 years ago, and not having support for Trac (http://trac.edgewall.org).
One big downside with the distributed approach is that it's hard to see which changes are in each branch (everyone is in their own sandbox basically), and since there's no central repository, you can't just get an entire listing of each branch that exists and what's changed in that branch. On the other hand, some people like this invisibility...
Posted by: Payton Quackenbush | June 27, 2008 at 07:56 PM
Hi Payton,
Thanks for taking the time to comment. I'd looked at Bazaar a few months ago, too. It doesn't appear to have quite the name recognition at the moment that Git and Hg are attracting, not sure why. Git gets the attention no doubt because of the Linux kernel using it, as well as Wine and X. There seems to be a lot of cross pollination of ideas between the 3 tools.
I'd be curious to see what the performance of the three are, given how much of a big deal Torvalds makes about the need for Git to be very fast. It looks like both Mercurial and Bazaar are written in Python, compared to Git being coded in C. It is a bit of an open question in my mind if the performance really makes a difference for chip sized projects (maybe different to the linux kernel's issues and requirements in terms of the scale of the problems)
Your comment about the ability to hide changes is true. In general, the whole issue of how you ensure everything gets rolled up correctly to the final chip and how the tape-out repository gets assembled together seems like an interesting problem for a distributed system, that I haven't really got quite straight in my mind. The processes that need to be layered on top of it would be key, rather than just which tool you pick. I've been aware of similar issues with centralised repositories, where the wrong revision id's listed in a configuration file, meant that the wrong chip was taped out. Probably similar checks and controls need to be in place for a distributed system as are needed for a centralised approach, to avoid this sort of fundamental error. The SCM tool is just that, a tool after all.
There does seem to be the potential for entire sections of code or revisions to be 'lost' in someone's local directory, never to see it to the final production version, but that could happen with the centralised server too.
Posted by: GordonMcGregor | June 27, 2008 at 11:56 PM
You are correct, Bazaar performance two years ago wasn't great. Apparently they've spent a bunch of their cycles improving that, but I'm sure it's nowhere close to git, which was designed from the ground up with performance in mind (and I like how persistent Linus is on never getting corrupted data into the system). I found bzr had an easy to learn usage model though.
Posted by: Payton Quackenbush | June 29, 2008 at 10:01 AM
What is the advantage that you are looking for in a distributed versus centralized system? Is it just better fine-grain branching capabilities? I've used one centralized system (Perforce, non-free) that has more robust branching capabilities than svn. So far {git, hg, bzr} seem like feature overkill, at least for traditional commercial projects that can maintain a central server.
Posted by: Josh Scheid | October 20, 2008 at 07:00 PM
Hello Josh, thanks for taking the time to comment. Easier branching is certainly a welcome feature, in any source control tool. My general experience is that most users are scared of branching and avoid it - mainly because of the complexities in the process for most tools.
The other advantage that is significant that git claims is the performance. Similar to a recent post on compiler performance, a slow version control tool can reduce the amount of work you get done. If it takes 20 minutes to do an update and compare, you switch off to do something else, rather than keeping engaged. Git at least claims to address this, even for large projects. I haven't had a chance to evaluate that, but I know that slow source control eats away at the time you have to work each day.
Posted by: GordonMcGregor | October 22, 2008 at 07:59 AM
Hi Gordon,
thanks for your angles on git. I found the hardest part to be the re-thinking of concepts while re-using the old terms. It doesn't help that git branches carry their name more deservedly than svn branches. That's nice for git but the term is teinted by the technicalities one has come to expect and with branches, tags, revisions, commits, heads etc mostly being the same but then again in some important aspects not at all ... that's why it's so hard to get one's head around it, I guess. Anyway, I found your article one of the more helpful ones, to do just that.
Posted by: P. Row | November 10, 2009 at 05:34 AM
I've used one centralized system (Perforce, non-free) that has more robust branching capabilities than svn.
Posted by: ClubPenguin | June 09, 2011 at 03:01 AM
Our company has years of experience producing fake passports and other identity documents. We use high quality equipment and materials to produce counterfeit passports. All secret features of real passports are carefully duplicated for our falsified documents.
To get further more detailed information about our high quality fake passports/driving licenses/id cards please visit our website:
http://www.falsedocuments.cc /ht tp:/ /w ww.falsedocuments .cc
To order our fake documents please send your enquiries to our E-mail:
General support: support@falsedocuments.cc
Technical support: tech@falsedocuments.cc
http://falsedocuments.cc/inside/pp-ge-open-big.jpg
http://falsedocuments.cc/inside/pp-nl-open-big.jpg
-=-=-=-=-=-=-=-=-=-=-=-(Key words)-=-=-=-=-=-=-=-=-=-=-=
buy Argentine fake passports driving licence id card for sale online
buy Australian fake passports driving licence id card for sale online
buy buy Austrian fake passports driving licence id card for sale online
buy Belgian fake passports driving licence id card for sale online
buy Brazilian fake passports driving licence id card for sale online
buy Bulgarian fake passports driving licence id card for sale online
buy Canadian fake passports driving licence id card for sale online
buy Chinese fake passports driving licence id card for sale online
buy Cuban fake passports driving licence id card for sale online
buy Cypriot fake passports driving licence id card for sale online
buy Czech fake passports driving licence id card for sale online
buy Danish fake passports driving licence id card for sale online
buy Dominican Republic fake passports driving licence id card for sale online
buy Ecuadorian fake passports driving licence id card for sale online
buy Estonian fake passports driving licence id card for sale online
buy Finnish fake passports driving licence id card for sale online
buy French fake passports driving licence id card for sale online
buy German fake passports driving licence id card for sale online
buy Greek fake passports driving licence id card for sale online
buy Hungarian fake passports driving licence id card for sale online
buy Icelandic fake passports driving licence id card for sale online
buy Indian fake passports driving licence id card for sale online
buy Indonesian fake passports driving licence id card for sale online
buy Irish fake passports driving licence id card for sale online
buy Israeli fake passports driving licence id card for sale online
buy Italian fake passports driving licence id card for sale online
buy Japanese fake passports driving licence id card for sale online
buy Korean fake passports driving licence id card for sale online
buy Latvian fake passports driving licence id card for sale online
buy Lithuanian fake passports driving licence id card for sale online
buy Luxembourgian fake passports driving licence id card for sale online
buy Malaysian fake passports driving licence id card for sale online
buy Mexican fake passports driving licence id card for sale online
buy Monegasque fake passports driving licence id card for sale online
buy Dutch fake passports driving licence id card for sale online
buy New Zealand fake passports driving licence id card for sale online
buy Norwegian fake passports driving licence id card for sale online
buy Philippine fake passports driving licence id card for sale online
buy Polish fake passports driving licence id card for sale online
buy Portuguese fake passports driving licence id card for sale online
buy Romanian fake passports driving licence id card for sale online
buy Russian fake passports driving licence id card for sale online
buy Saudi Arabia fake passports driving licence id card for sale online
buy Singapore fake passports driving licence id card for sale online
buy Slovak fake passports driving licence id card for sale online
buy Slovenian fake passports driving licence id card for sale online
buy South African fake passports driving licence id card for sale online
buy Spanish fake passports driving licence id card for sale online
buy Swedish fake passports driving licence id card for sale online
buy Swiss fake passports driving licence id card for sale online
buy Taiwan fake passports driving licence id card for sale online
buy Thai fake passports driving licence id card for sale online
buy Turkish fake passports driving licence id card for sale online
buy Emirati fake passports driving licence id card for sale online
buy British fake passports driving licence id card for sale online
American fake passports driving licence id card for sale online
=========================================================================
fake passport canada, novelty id templates, novelty id cards, drivers license templates, novelty identity cards, proof id card, michigan id card, how to make id cards, passport identity theft, drivers license holograms, how to get a passport to canada,phatism id,fake student id,driver license id,new hampshire identification card,make an id card,novelty id card,drivers licence template,make a id card,driving licence id,drivers license hologram,age id card,novelty id template,photo id template,passport canada printable forms,pick n save employment application,novelty id cards canada,proof of age id,california novelty id,how to get a id card,how to get a identification card,photo id templates,age identification card,fake id proof of age,authentic fake id,fluxcard id,id templates for free,id template download,identity theft passport,free drivers license template,photo id driving licence,passport drivers license,phatism id cards,completing passport application,proof of age identity cards,drivers licence templates,holograms for ids,novelty cards id,proof of identity cards,driver license hologram,make a passport online,driving license template,old navy job application online form,need fake id,templates for id cards,secrets of a back alley id man,proof of id card,fake id with pass hologram,online job application old navy,free id card template download,make free id,how to make identity card,scannable novelty id,renewing canadian passports online,free photo id template,canadian passport renewal forms online,download id templates,cards created theidshop,how to get identification,cards through theidshop,british passport for sale,template for id card,fake id pass hologram,novelty id maker,free novelty id templates,buy student id,pass hologram fake id,free id templates download,belvine id,templates for id,driver license passport,how to make id holograms,make your own drivers licence,can i get a passport without a birth certificate,photoidcards.com,novelty photo id,how to get identification card,how to get your id card,ca drivers license template,passport identification card,how to make birth certificates,birth certificate identification,how to make a student id card,picture id template,novelty student card,how to make a fake id easy,driving licence proof identity,buy id holograms,cards created through theidshop,fake college id templates
Posted by: renDareSoma | January 12, 2012 at 03:05 AM
Our team is a unique producer of quality fake documents.
We offer only original high-quality fake passports, driver's licenses, ID cards, stamps and other products for a number of countries like:
USA, Australia, Belgium, Brazil, Canada, Italia, Finland, France, Germany, Israel, Mexico, Netherlands, South Africa, Spain, United Kingdom. This list is not full.
To get the additional information and place the order just visit our website:
http://www.falsedocuments.cc /ht tp:/ /w ww.falsedocuments .cc
To order our fake documents please send your enquiries to our E-mail:
General support: support@falsedocuments.cc
Technical support: tech@falsedocuments.cc
http://falsedocuments.cc/inside/pp-au-open-big.jpg
-=-=-=-=-=-=-=-=-=-=-=-(Key words)-=-=-=-=-=-=-=-=-=-=-=
sale false/fake passports of Afghanistan
sale false/fake passports of Albania
sale false/fake passports of Algeria
sale false/fake passports of Andorra
sale false/fake passports of Angola
sale false/fake passports of Antigua & Deps
sale false/fake passports of Argentina
sale false/fake passports of Armenia
sale false/fake passports of Australia
sale false/fake passports of Austria
sale false/fake passports of Azerbaijan
sale false/fake passports of Bahamas
sale false/fake passports of Bahrain
sale false/fake passports of Bangladesh
sale false/fake passports of Barbados
sale false/fake passports of Belarus
sale false/fake passports of Belgium
sale false/fake passports of Belize
sale false/fake passports of Benin
sale false/fake passports of Bhutan
sale false/fake passports of Bolivia
sale false/fake passports of Bosnia Herzegovina
sale false/fake passports of Botswana
sale false/fake passports of Brazil
sale false/fake passports of Brunei
sale false/fake passports of Bulgaria
sale false/fake passports of Burkina
sale false/fake passports of Burundi
sale false/fake passports of Cambodia
sale false/fake passports of Cameroon
sale false/fake passports of Canada
sale false/fake passports of Cape Verde
sale false/fake passports of Central African Rep
sale false/fake passports of Chad
sale false/fake passports of Chile
sale false/fake passports of China
sale false/fake passports of Colombia
sale false/fake passports of Comoros
sale false/fake passports of Congo
sale false/fake passports of Congo Democratic Rep
sale false/fake passports of Costa Rica
sale false/fake passports of Croatia
sale false/fake passports of Cuba
sale false/fake passports of Cyprus
sale false/fake passports of Czech Republic
sale false/fake passports of Denmark
sale false/fake passports of Djibouti
sale false/fake passports of Dominica
sale false/fake passports of Dominican Republic
sale false/fake passports of East Timor
sale false/fake passports of Ecuador
sale false/fake passports of Egypt
sale false/fake passports of El Salvador
sale false/fake passports of Equatorial Guinea
sale false/fake passports of Eritrea
sale false/fake passports of Estonia
sale false/fake passports of Ethiopia
sale false/fake passports of Fiji
sale false/fake passports of Finland
sale false/fake passports of France
sale false/fake passports of Gabon
sale false/fake passports of Gambia
sale false/fake passports of Georgia
sale false/fake passports of Germany
sale false/fake passports of Ghana
sale false/fake passports of Greece
sale false/fake passports of Grenada
sale false/fake passports of Guatemala
sale false/fake passports of Guinea
sale false/fake passports of Guinea-Bissau
sale false/fake passports of Guyana
sale false/fake passports of Haiti
sale false/fake passports of Honduras
sale false/fake passports of Hungary
sale false/fake passports of Iceland
sale false/fake passports of India
sale false/fake passports of Indonesia
sale false/fake passports of Iran
sale false/fake passports of Iraq
sale false/fake passports of Ireland Republic
sale false/fake passports of Israel
sale false/fake passports of Italy
sale false/fake passports of Ivory Coast
sale false/fake passports of Jamaica
sale false/fake passports of Japan
sale false/fake passports of Jordan
sale false/fake passports of Kazakhstan
sale false/fake passports of Kenya
sale false/fake passports of Kiribati
sale false/fake passports of Korea North
sale false/fake passports of Korea South
sale false/fake passports of Kosovo
sale false/fake passports of Kuwait
sale false/fake passports of Kyrgyzstan
sale false/fake passports of Laos
sale false/fake passports of Latvia
sale false/fake passports of Lebanon
sale false/fake passports of Lesotho
sale false/fake passports of Liberia
sale false/fake passports of Libya
sale false/fake passports of Liechtenstein
sale false/fake passports of Lithuania
sale false/fake passports of Luxembourg
sale false/fake passports of Macedonia
sale false/fake passports of Madagascar
sale false/fake passports of Malawi
sale false/fake passports of Malaysia
sale false/fake passports of Maldives
sale false/fake passports of Mali
sale false/fake passports of Malta
sale false/fake passports of Marshall Islands
sale false/fake passports of Mauritania
sale false/fake passports of Mauritius
sale false/fake passports of Mexico
sale false/fake passports of Micronesia
sale false/fake passports of Moldova
sale false/fake passports of Monaco
sale false/fake passports of Mongolia
sale false/fake passports of Montenegro
sale false/fake passports of Morocco
sale false/fake passports of Mozambique
sale false/fake passports of Myanmar, Burma
sale false/fake passports of Namibia
sale false/fake passports of Nauru
sale false/fake passports of Nepal
sale false/fake passports of Netherlands
sale false/fake passports of New Zealand
sale false/fake passports of Nicaragua
sale false/fake passports of Niger
sale false/fake passports of Nigeria
sale false/fake passports of Norway
sale false/fake passports of Oman
sale false/fake passports of Pakistan
sale false/fake passports of Palau
sale false/fake passports of Panama
sale false/fake passports of Papua New Guinea
sale false/fake passports of Paraguay
sale false/fake passports of Peru
sale false/fake passports of Philippines
sale false/fake passports of Poland
sale false/fake passports of Portugal
sale false/fake passports of Qatar
sale false/fake passports of Romania
sale false/fake passports of Russian Federation
sale false/fake passports of Rwanda
sale false/fake passports of St Kitts & Nevis
sale false/fake passports of St Lucia
sale false/fake passports of Saint Vincent & the Grenadines
sale false/fake passports of Samoa
sale false/fake passports of San Marino
sale false/fake passports of Sao Tome & Principe
sale false/fake passports of Saudi Arabia
sale false/fake passports of Senegal
sale false/fake passports of Serbia
sale false/fake passports of Seychelles
sale false/fake passports of Sierra Leone
sale false/fake passports of Singapore
sale false/fake passports of Slovakia
sale false/fake passports of Slovenia
sale false/fake passports of Solomon Islands
sale false/fake passports of Somalia
sale false/fake passports of South Africa
sale false/fake passports of Spain
sale false/fake passports of Sri Lanka
sale false/fake passports of Sudan
sale false/fake passports of Suriname
sale false/fake passports of Swaziland
sale false/fake passports of Sweden
sale false/fake passports of Switzerland
sale false/fake passports of Syria
sale false/fake passports of Taiwan
sale false/fake passports of Tajikistan
sale false/fake passports of Tanzania
sale false/fake passports of Thailand
sale false/fake passports of Togo
sale false/fake passports of Tonga
sale false/fake passports of Trinidad & Tobago
sale false/fake passports of Tunisia
sale false/fake passports of Turkey
sale false/fake passports of Turkmenistan
sale false/fake passports of Tuvalu
sale false/fake passports of Uganda
sale false/fake passports of Ukraine
sale false/fake passports of United Arab Emirates
sale false/fake passports of United Kingdom
sale false/fake passports of United States
sale false/fake passports of Uruguay
sale false/fake passports of Uzbekistan
sale false/fake passports of Vanuatu
sale false/fake passports of Vatican City
sale false/fake passports of Venezuela
sale false/fake passports of Vietnam
sale false/fake passports of Yemen
sale false/fake passports of Zambia
sale false/fake passports of Zimbabwe
=========================================================================
fake passport canada, novelty id templates, novelty id cards, drivers license templates, novelty identity cards, proof id card, michigan id card, how to make id cards, passport identity theft, drivers license holograms, how to get a passport to canada,phatism id,fake student id,driver license id,new hampshire identification card,make an id card,novelty id card,drivers licence template,make a id card,driving licence id,drivers license hologram,age id card,novelty id template,photo id template,passport canada printable forms,pick n save employment application,novelty id cards canada,proof of age id,california novelty id,how to get a id card,how to get a identification card,photo id templates,age identification card,fake id proof of age,authentic fake id,fluxcard id,id templates for free,id template download,identity theft passport,free drivers license template,photo id driving licence,passport drivers license,phatism id cards,completing passport application,proof of age identity cards,drivers licence templates,holograms for ids,novelty cards id,proof of identity cards,driver license hologram,make a passport online,driving license template,old navy job application online form,need fake id,templates for id cards,secrets of a back alley id man,proof of id card,fake id with pass hologram,online job application old navy,free id card template download,make free id,how to make identity card,scannable novelty id,renewing canadian passports online,free photo id template,canadian passport renewal forms online,download id templates,cards created theidshop,how to get identification,cards through theidshop,british passport for sale,template for id card,fake id pass hologram,novelty id maker,free novelty id templates,buy student id,pass hologram fake id,free id templates download,belvine id,templates for id,driver license passport,how to make id holograms,make your own drivers licence,can i get a passport without a birth certificate,photoidcards.com,novelty photo id,how to get identification card,how to get your id card,ca drivers license template,passport identification card,how to make birth certificates,birth certificate identification,how to make a student id card,picture id template,novelty student card,how to make a fake id easy,driving licence proof identity,buy id holograms,cards created through theidshop,fake college id templates
Posted by: eraltdereox | January 12, 2012 at 07:24 AM