2016-03-03 87 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

鹰眼!刚刚更新了我的答案,谢谢指出。 –