2010-07-16 69 views
2

我一直在努力設置一個Git服務器,通過使用Paramiko作爲Git的SSH橋樑。我能夠克隆我的存儲庫沒有問題,甚至推動變化,但我得到一個惱人的錯誤消息。Git「無法推送一些裁判...」與自定義Git橋

Pushing to [email protected]:/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 [email protected]:/pckprojects/heyworld 
    348dfdc..1c0468e master -> master 
updating local tracking ref 'refs/remotes/origin/master' 
error: failed to push some refs to '[email protected]:/pckprojects/heyworld' 

我的Git的配置是這樣的:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = true 
    sharedRepository = all 
[receive] 
    denyNonFastForwards = false 
    denyCurrentBranch = false 
    denyDeletes = false 

奇怪的是「大師」實際上並得到更新,而且我在庫中沒有其他分支。另外,如果我從磁盤而不是通過SSH克隆/推送存儲庫,我沒有看到任何錯誤。

任何人有任何想法,爲什麼我看到這個錯誤?

謝謝...

編輯:

因爲它很可能我的問題是關於我的SSH服務器,主循環低於:

 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) > 0: 
        print 'IN>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) > 0: 
        channel.sendall(data) 

       else: 
        print "Encountered empty stderr, breaking" 
        break      

     print 'will close' 
     channel.shutdown(2) 
     channel.close() 

更多信息

我認爲這可能有助於看到實際的溝通。這是它出現在服務器端,因爲git客戶端不允許你看到這麼多。

git-receive-pack /home/www/data/project/heyworld/ 

OUT >> 
00721ee2436e45c80236878132dc87d9e9fee6a81de5 refs/heads/master\x00 report-status delete-refs side-band-64k ofs-delta\n0000 

IN >> 
00841ee2436e45c80236878132dc87d9e9fee6a81de5 6054b3358787bafd1d96c0fdfbf016d620ccdf09 refs/heads/master\x00 report-status side-band-64k0000 

IN >> 
PACK\x00\x00\x00\x02\x00\x00\x00\x03\x96\x0ex\x9c\xa5\x8cM\x0e\xc2 \x14\x06\xf7\x9c\x82\x0b\xd8<(?\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\[email protected]\x06%D<\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>[\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<\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 >> 
0030\x01000eunpack ok\n009krf/ed/atr0000 

CLOSE CONNECTION 

回答

1

一個非常有用的郵件列表上的用戶使用了他認爲是在黑暗中刺傷並且正確的方法。

我沒有返回退出代碼,Git期望推送。這解決了問題。

0

正如你可能知道的,這可能是一堆問題!

  • 我最初的猜測是,有些權限是在服務器上沒有正確的,因此不能更新一些非關鍵信息
  • 也其他一些問題,以及...

夫婦快問題/建議:

  • 你能手動運行命令嗎?
  • 嘗試添加--verbose標誌的推出指令(即混帳推--verbose產地/主)

添加冗餘標誌可能把你的快車道搞清楚的問題。

+0

謝謝你的迴應。上面的輸出實際上已經使用了詳細的標誌。 權限是我的第一個想法之一,但SSH進程是以root身份運行的,所以這實際上不成問題。 我不認爲存儲庫存在問題,因爲對它進行處理(克隆,推送,拉取等)工作正常,如果我只是將它用作基於文件的源。 很遺憾Git的冗長旗幟給人的信息很少,因爲它實際上並沒有告訴你任何有用的信息。 – philipk 2010-07-18 01:48:49