2012-08-03 15 views

risposta

5

Github fornisce un Git database API che consente di accedere a leggere e scrivere oggetti grezzi e di elencare e aggiornare i riferimenti (diramazioni e tag). Per una migliore comprensione dell'argomento, ti consiglio vivamente di leggere il capitolo Git Internals del libro Pro Git.

Come per la documentazione, si tratta di un processo di 7 passi per commettere una modifica a un file nel repository:

  1. ottenere la corrente commettere oggetto
  2. recuperare l'albero a cui punta
  3. recupera il contenuto dell'oggetto blob che l'albero ha per quel particolare percorso file
  4. cambia il contenuto in qualche modo e pubblica un nuovo oggetto blob con quel nuovo contenuto, ottenendo un blob SHA indietro
  5. postare un nuovo oggetto albero con quel puntatore percorso file sostituito con il nuovo blob SHA ottenere un albero SHA indietro
  6. creare un nuovo oggetto commit con il commit corrente SHA come padre e il nuovo albero SHA, ottenendo un commit SHA indietro
  7. aggiornamento il riferimento del ramo per puntare alla nuova commettere SHA

This blog fa un grande lavoro a spiegare questo processo utilizzando perl. Per un'implementazione Python, è possibile utilizzare la libreria PyGithub.

7

si può vedere se il nuovo aggiornamento GitHub CRUD API (May 2013) può aiutare

Il repository contents API ha permesso la lettura di file per un po '. Ora puoi facilmente commutare le modifiche ai singoli file, proprio come puoi nell'interfaccia utente web.

A partire da oggi, questi metodi sono a vostra disposizione:

+0

questo è il più semplice soluzione. Librerie che puoi trovare qui: http://developer.github.com/libraries/#python – timaschew

0

Sono su Google App Engine (GAE) così a fianco del pitone, io può create un nuovo file, update esso, anche delete it tramite un commit e push nel mio repo in GitHub con GitHub API v3 in php, java e go.

Controllo e rivedere alcuni dei terzi disponibili libraries per creare come il example script che ha presentato in Perl, mi sento di raccomandare di utilizzare il seguente:

Come saprete, è possibile ottenere un sito per account e organizzazione GitHub e siti di progetto illimitati in cui i siti Web sono ospitati direttamente dal repository e alimentati da Jekyll come predefinito.

Combinando Jekyll, Webhooks, e GitHub API Script su GAE, insieme ad un adeguato GAE Setting, che vi darà un'ampia possibilità come calling external script e creare una pagina dinamica su GitHub.

Oltre a GAE, è disponibile anche un'opzione su Heroku. Utilizzare JekyllBot che vive su un'istanza Heroku (gratuita) su silently genera file JSON per ciascun post e trasferisce le modifiche su GitHub.

1

Ecco un frammento completo:

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) 
Problemi correlati