title: Single working branch with Git
body: <p><strong>Bounty short description</strong></p>
  
  <p>Is there a <em>portable</em> way to use <strong>a single repository w/ multiple checkouts</strong>? As an alternative to having 
  multiple clones where there is just too much overhead (pushing/pulling/syncing...) and the risk of overwriting the <code>.git/objects</code> hard links (which does not even work on Windows).</p>
  
  <hr>
  
  <p>New to git and curious to hear thoughts from experienced git users.</p>
  
  <p>Is there a conceptual reason why git only works with ONE branch at a time? It seems absolutely impractical having to switch back and forward between branches, when most of the time I need to work on at least two different branches at the same time, e.g. building, running in parallel a.s.o.</p>
  
  <p>Ok, so maybe a developer does not really need to work on two branches exactly at the same time. But checking out another branch does not automatically carry ignored stuff like build output files. So a new rebuild is required a.s.o.</p>
  
  <p>There is this script <code>git-new-workdir</code> that is supposed to allow multiple working branches, but for one, it is not part of the git release althoug it has been around for about 3 years, so I do not trust it to keep my files consistent. And secondly, I cannot find it as part of the Windows distribution, which is one of the machines I use for development.</p>
  
  <p>So the only official option is to create a new "clone" for every branch, which seems incorrect, since each clone is a full-blown repository. I would not even know what to call the clone directories -- do I use the repository name or the branch name or both? What if I create another branch off that branch, a.s.o.</p>
  
  <p><strong>Real-use case update</strong> <em>(@Philip's suggestion)</em></p>
  
  <p>I usually work on two major/minor releases, with features going on both in parallel. There is also an occasional development branch, where experimental features go into, before being merged to some future release.</p>
  
  <p>During feature development, often behaviour degrades and it is more efficient to compare it with the behaviour before the changes. Checking out a previous branch/revision is not good enough, because many times it comes down to debugging side-by-side, which means both revisions need to be checked out simultaneously on the harddrive.</p>
  
  <p>So the more convenient and natural approach would be to keep a few so-called "active" branches checked out each in its own directory, with its own compiled binaries. This would also save compilation time and occasional local setup (i.e. configuration files that need to be changed after every checkout in order to get the product running).</p>