title: Git "failed to push some refs to..." with custom Git bridge
body: <p>I have been working on setting up a git server by using Paramiko to act as an SSH bridge for Git. I am able to clone my repository without issue, and even push changes up, however I get an annoying error message.</p>
  
  <pre><code>Pushing to git@localhost:/pckprojects/heyworld
  Counting objects: 5, done.
  Delta compression using up to 2 threads.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (3/3), 262 bytes, done.
  Total 3 (delta 1), reused 0 (delta 0)
  To git@localhost:/pckprojects/heyworld
       348dfdc..1c0468e  master -&gt; master
  updating local tracking ref 'refs/remotes/origin/master'
  error: failed to push some refs to 'git@localhost:/pckprojects/heyworld'
  </code></pre>
  
  <p>My git's config looks like this:</p>
  
  <pre><code>[core]
      repositoryformatversion = 0
      filemode = true
      bare = true
      sharedRepository = all
  [receive]
      denyNonFastForwards = false
      denyCurrentBranch = false
      denyDeletes = false
  </code></pre>
  
  <p>The odd thing is "master" actually does get updated, and I have no other branches in the repository. In addition, if I clone / push the repository from disk rather than via SSH, I don't see any errors.</p>
  
  <p>Anyone have any thoughts on why I'm seeing this error?</p>
  
  <p>Thanks...</p>
  
  <p>EDIT:</p>
  
  <p>Since it seems likely my issues are related to my SSH server, the main loop is below:</p>
  
  <pre><code>        proc = subprocess.Popen(command, stdin=subprocess.PIPE,
                  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  
          while True:
              try:
                  r_ready, w_ready, x_ready = select.select(
                      [channel, proc.stdout, proc.stderr], [proc.stdin], [])
              except Exception, e:
                  print e
                  print 'channel: ' + str(channel)
                  print 'proc: ' + str(proc)
  
              if channel in r_ready and channel.recv_ready():
                  data = channel.recv(128)
                  if len(data) &gt; 0:
                      print 'IN&gt;channel ' + repr(data)
                      proc.stdin.write(data)
                  else:
                      pass
  
              if proc.stdout in r_ready:  
                  data = proc.stdout.read(1)
                  channel.sendall(data)
  
              if proc.stderr in r_ready:
  
                  data = proc.stdout.read(1)
                  if len(data) &gt; 0:
                      channel.sendall(data)
  
                  else:
                      print "Encountered empty stderr, breaking"
                      break                       
  
          print 'will close'
          channel.shutdown(2)
          channel.close()
  </code></pre>
  
  <p><strong>More Information</strong></p>
  
  <p>I thought it might be helpful to see the actual communication. This is at it appears on the server side, since the git client doesn't allow you to see nearly this much.</p>
  
  <pre><code>git-receive-pack /home/www/data/project/heyworld/
  
  OUT &gt;&gt;
  00721ee2436e45c80236878132dc87d9e9fee6a81de5 refs/heads/master\x00 report-status delete-refs side-band-64k ofs-delta\n0000
  
  IN &gt;&gt;
  00841ee2436e45c80236878132dc87d9e9fee6a81de5 6054b3358787bafd1d96c0fdfbf016d620ccdf09 refs/heads/master\x00 report-status side-band-64k0000
  
  IN &gt;&gt;
  PACK\x00\x00\x00\x02\x00\x00\x00\x03\x96\x0ex\x9c\xa5\x8cM\x0e\xc2 \x14\x06\xf7\x9c\x82\x0b\xd8&lt;(?\x8f\xc4\x18\xf7n\xbc\x02\xc2\x87%\x16\xdb4\xb8\xf0\xf66\xbd\x82\xcb\x99d\xa6o\x80\x846\xd9!)\x1b\x0b\xb1\r1$dO\x05\xa6\xb0\xa3@\x06%D&lt;\xb2\x16k\xdc\xf0\xeeRa/F\x07c\x13\x93\x1e\x1d{V\xa3\xce\x89}\x0e\x08\x05p\x91U\x86\x15\xf1\xd3\xa7e\x93\xf7\xa9\xceu\x95\xb7\xda\x1a\xbe\xf2\xbc\x1e8\xbc\x0e\xbc&gt;[\xac\xf3\x90\x96v\x91J\xfb`X\xb3V\xf2D\x96H\xec\xb6\xd5\xde\xf1\xc7B4,\xe2\x07\xff\x8aF\xba\xaf\x01x\x9c340031Q\xc8H\xaddP\xd8P\xfcmzGg\x8aY\xc4\x8e\xad\xb1&lt;\xca\x1b\xa3\x93\xee\xbd\x05\x00\xa8\xb4\x0c\x9by\xd3\xfe\xa0C\x86fU\x18\xbe\xa5\x86\xac5*\xf7\x11\x89\x8b9$x\x9c\x0b\x8b\x9a\x10\xc6\x92\x9b\x9a\xcf\x05\x00\x0f\xb2\x02\xe6=\x12?\xde\x1f\x9a=v\x0c3c\xf66\xc6\xcc1y\xe4\xb8\xa0
  
  OUT &gt;&gt;
  0030\x01000eunpack ok\n009krf/ed/atr0000
  
  CLOSE CONNECTION
  </code></pre>