2013年3月7日 星期四

Github Pull Request 500 錯誤原因

今年一月的時候,因為客戶需求開了新的 branch ,來作另一個 Android 版本的開發,卻遇到了每每 pull request 的時候,不管如何都會先吐個 500 error 給你。
Github 500 error.
一開始不明白發生的原因,只能藉由手動修改網址來指定對應的 branch 下 PR。後來終於察覺到是因為在下 PR 前,雖然已經切換了 branch ,但對應到了客戶端的 repository 時,一樣會是master。

而 Github 的答覆是:
Github response about pull request.
只能在 PR 建立的頁面才可以選擇相對應的 branch。但是,下 PR 就發生 500 錯誤,根本沒辦法進到選擇頁面阿!!!看來目前還是只能手動改網址了...

不過,這些問題跟 500 錯誤有什麼關係呢?當發現新 branch 下 PR 會對應到 master 時就有個底了,答案是因為相對應的 branch 差異過大,導致 Github 發生 timout 例外。

Github 的回應是:
Github response about large diff for pull request
看起來 timeout 的問題 Github 目前也是無解,如果發生這些情況,只好先手動處理了。

2013年3月6日 星期三

多個 SSH Key 對應多個 Github 帳號


  1. 產生個別的 ssh keys
    $ cd ~/.ssh
    $ ssh-keygen -t rsa -C "account1@email.com" -f id_rsa_account1
    $ ssh-keygen -t rsa -C "account2@email.com" -f id_rsa_account2
    
  2. 建立 config 檔
    $ cd ~/.ssh
    $ touch config
    $ gedit config
    
    編輯內容如下
    #account1
    Host github.com-account1
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_account1
    
    #account2
    Host github.com-account2
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_account2
    
  3. 修改相對應 repo 的 remote url。例如:
    $ cd /path/to/repo1
    $ git remote set-url origin ssh://git@github.com-account1/account1/repo1.git
    
  4. 完成

Git HTTP 協定的檔案大小限制

使用 git push 經由 HTTP 協定的時候要注意了,因為有檔案大小的限制,預設是 1MB。
發生的錯誤訊息如下所示:
$ git push
Counting objects: 199918, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (188542/188542), done.
error: RPC failed; result=22, HTTP code = 413MiB | 53 KiB/s   
fatal: The remote end hung up unexpectedly
Writing objects: 100% (199918/199918), 1.98 GiB | 7.61 MiB/s, done.
Total 199918 (delta 55401), reused 0 (delta 0)
fatal: The remote end hung up unexpectedly
fatal: expected ok/error,...

有兩種方式可以解決這個問題:
  1. 使用 SSH 來作為 git 的通訊。
  2. 加大 HTTP 檔案大小限制,如下:
    git config http.postBuffer 524288000 #Set to 500MB