2016-03-03 81 views
2

我發現GitHub有Create TreeCreate File API,但我仍然不確定如何爲Create Tree Api創建子模塊項目,如何爲創建文件指定Sha, Api,看來我們不能設置項目類型。順便說一句,我需要先創建.gitmodules文件嗎?如何在GitHub中使用GitHub Rest Api創建子模塊

+0

你應該提到你試過了什麼。如果你的谷歌爲你的問題,你會發現第一個結果 - https://developer.github.com/v3/git/trees/ –

回答

4

今天早些時候我試圖做到這一點。

這是我的工作流程:

  1. Create a tree
  2. Create a commit
  3. Update the reference

讓我舉一個小例子,以使其更清晰。

說你想要添加子模塊的倉庫的master分支上的最新提交是$BASE_SHA


1.創建一個樹

假設你沒有對你的回購的子模塊,然而,你需要創建一個名爲.gitmodules第一個文件。然後你可以創建一個對它的引用。

POST /repos/:owner/:repo/git/trees 
{ 
    "base_tree": $BASE_SHA, 
    "tree": [ 
     // create submodule config 
     { 
      "path": ".gitmodules", 
      "mode": "100644", 
      "type": "blob", 
      "content": "[submodule \"rails\"]\n\tpath = rails\n\turl = https://github.com/rails/rails" 
     }, 
     // link to submodule 
     { 
      "path": "rails", 
      "mode": "160000", 
      "type": "commit", 
      "sha": "39e087cbf5628ecc351fc86a3a1e320be193bf29" 
     } 
    ] 
} 

的API服務器將發送給您迴應

{ 
    "sha": $TREE_SHA, 
    "url": "...", 
    "tree": [...] 
} 



2.創建一個提交

然後,我們用的的sha新創建的樹吃掉一個提交(以$BASE_SHA作爲其父)。

POST /repos/:owner/:repo/git/commits 
{ 
    "message": "commit message", 
    "tree": $TREE_SHA, 
    "parents": [$BASE_SHA] 
} 

,服務器將返回

{ 
    "sha": $COMMIT_SHA, 
    "url": "...", 
    // other content omitted here .. 
} 

3.更新參考

然後,我們需要更新master

PATCH /repos/:owner/:repo/git/refs/heads/master 
{ 
    "sha": $COMMIT_SHA, 
    "force": true 
} 

如果不返回錯誤,我們都設定。

刷新你的GitHub回購頁面,你會發現添加了子模塊。

+0

謝謝程宇,偉大的工作。只有一件事我發現可能需要修改的是請求方法應該是「POST」在創建一棵樹 – Huachao

+0

鷹眼!剛剛更新了我的答案,謝謝指出。 –