使用GitHub API,我可以create a tree包含提交的所有已修改文件,指定将使用此更改树更新的base_tree
,然后提交它。
但是,正如documentation所说,新树只能包含具有模式的文件的路径
100644
表示文件(blob),100755
表示可执行文件(blob),040000
表示 子目录(树),子模块(提交)的160000
或者120000
一个指定符号链接路径的blob。
如果我想将某些路径标记为已删除,则不会说我应该怎么做,就像使用git rm <path>
一样。
答案 0 :(得分:7)
目前,从树中删除条目(blob或其他树)的唯一方法是construct a new tree,而不是列出该条目。获得该树后,construct a new commit链接到这个新树,并且不要忘记bump the ref指向此新提交。
答案 1 :(得分:2)
@ivan-zuzak 的回答已经过时,因为 GitHub API 支持通过传递 null sha 来删除文件。
要删除文件,您可以使用 octokit 在 Javascript 中创建一棵树,如下所示:
await octokit.request('POST /repos/{owner}/{repo}/git/trees', {
owner: 'octocat',
repo: 'hello-world',
tree: [
{
path: 'path/to/file-that-will-be-deleted.py',
mode: '100664',
type: 'blob',
sha: null,
}
],
base_tree: 'sha'
})
base_tree 应包含要从中删除文件的现有 Git 树对象的 SHA1。
在那之后,Ivan 所说的一切仍然成立,所以你应该构建一个链接到这个新树的新提交,并将引用指向这个新提交。
答案 2 :(得分:0)
我发现最简洁的方法是create a new branch,创建,删除和更新文件它使用contents API,然后是create a merge commit with the master branch,最后是update the master branch to this last commit(最后你还应该delete the temporary side-branch)。