Git has some serious disadvantages when compared to a centralized VCS like Perforce. It just can&#x27;t handle anything more than 10~15 million lines of code (this is the size of linux.git).<p>In a way, Perforce is a cute middle ground. It has &quot;pending changelists&quot; that ReviewBoard or Phabricator can slurp up and present to reviewers. You can easily give another person your changes by &quot;shelving&quot; them. Mutable history is only really a &quot;feature&quot; in tiny projects; in massive ones, immutability simplifies life greatly and restores peace of mind. In many ways, the way Perforce handles conflicts is nicer: it doesn&#x27;t pollute the actual files with conflict markers, and has an option to resolve conflicts in a nice 3-pane UI. Although it does get merges wrong every now and then.<p>Non-linear history is considered an &quot;anti-feature&quot; by many, and the LLVM community runs a primary SVN server; users submit via git-svn.<p>Having cheap and lightweight branching is what leads to merge headaches. In fact, (from one Tech Talk), I believe that Google runs a single branch to evade merge problems altogether.<p>I think git&#x27;s greatest asset is the excellent local development experience. You can muck around as much as you like, making local branches&#x2F;commits as checkpoints, and squash them in to submit a final patch. The command-line UI is fantastic, and everything is snappy (provided you have a small checkout). I think having a single linear &quot;trunk&quot; on the server-side is a good idea.