2012-08-03 75 views

回答

5

Github上提供了一个Git database API,让您可以访问读取和写入原始对象,并列出和更新您的引用(分支头和标签)。为了更好地理解这个话题,我强烈建议你阅读Pro Git书的Git Internals一章。

按文档,这是一个7个步骤的过程要提交修改到你的资料库文件:

  1. 得到当前commit对象
  2. 检索它指向的树
  3. 检索树对该特定文件路径的blob对象的内容
  4. 以某种方式更改内容并使用该新内容发布新的blob对象,获得blob SHA返回
  5. 发布新文件路径指针替换新文件路径指针SHA获取树SHA SHA
  6. 创建一个新的提交对象,包含当前提交SHA作为父代和新树SHA,获取提交SHA返回
  7. 更新您的分支点的新基准提交SHA

This blog在解释用perl这个过程中做了伟大的工作。对于python实现,您可以使用PyGithub库。

7

你可以看到,如果新的更新GitHub CRUD API (May 2013)可以帮助

repository contents API已经允许读取文件一会儿。现在,您可以轻松地将更改提交到单个文件,就像您在Web UI中所做的一样。

从今天开始,这些方法都可以给你:

+0

这是最容易的解决方案。您可以在这里找到图书馆:http://developer.github.com/libraries/#python – timaschew 2014-01-24 10:56:49

0

我在Google App Engine (GAE)所以旁边的蟒蛇,我可以create一个新的文件,它update,甚至delete it经提交,并在PHP,JAVA推到我的GitHub库与GitHub API v3去。

检查和审查一些可用的第三方libraries创建像在Perl中提出的example script的,我会建议使用以下方法:

如您所知,您可以为每个GitHub帐户和组织提供一个站点,以及无限制的项目站点,其中网站直接从您的仓库托管,并且默认为Jekyll

结合JekyllWebhooks,并在GAE的API GitHub的脚本,用适当的GAE Setting一起,它会给你一个广泛的可能性,像calling external script并在GitHub上创建一个动态页面。

除了GAE,还有一个选项在Heroku上运行。使用JekyllBot,它位于(免费)Heroku实例上,为silently生成每个帖子的JSON文件并将更改推回到GitHub。

1

这是一个完整的片段:

def push_to_github(filename, repo, branch, token): 
    url="https://api.github.com/repos/"+repo+"/contents/"+filename 

    base64content=base64.b64encode(open(filename,"rb").read()) 

    data = requests.get(url+'?ref='+branch, headers = {"Authorization": "token "+token}).json() 
    sha = data['sha'] 

    if base64content.decode('utf-8')+"\n" != data['content']: 
     message = json.dumps({"message":"update", 
          "branch": branch, 
          "content": base64content.decode("utf-8") , 
          "sha": sha 
          }) 

     resp=requests.put(url, data = message, headers = {"Content-Type": "application/json", "Authorization": "token "+token}) 

     print(resp) 
    else: 
     print("nothing to update") 

token = "lskdlfszezeirzoherkzjehrkzjrzerzer" 
filename="foo.txt" 
repo = "you/test" 
branch="master" 

push_to_github(filename, repo, branch, token)