2012-08-03 13 views

Respuesta

5

Github proporciona un Git database API que le da acceso a la lectura y escritura de objetos sin formato y a la lista y actualización de sus referencias (cabezas de bifurcación y etiquetas). Para una mejor comprensión del tema, le recomiendo que lea el capítulo Git Internals del libro Pro Git.

De acuerdo con la documentación, se trata de un proceso de 7 pasos para cometer un cambio en un archivo en su repositorio:

  1. conseguir la corriente cometer objeto
  2. recuperar el árbol al que apunta
  3. recuperar el contenido del objeto blob que tiene ese árbol para esa ruta de archivo particular
  4. cambiar el contenido de alguna manera y publicar un nuevo objeto blob con ese nuevo contenido, obteniendo un SHA de blob SHA
  5. publicar un nuevo objeto de árbol con ese puntero de ruta de archivo reemplazado con su nuevo blob SHA recuperar un árbol SHA
  6. crear un nuevo objeto de confirmación con el compromiso actual SHA como padre y el nuevo árbol SHA, obteniendo un SHA de confirmación
  7. actualización de la referencia de su rama a punto de cometer el nuevo SHA

This blog hace un gran trabajo de explicar este proceso usando perl. Para una implementación de python, puede usar la biblioteca PyGithub.

7

se puede ver si la nueva actualización GitHub CRUD API (May 2013) puede ayudar

El repository contents API ha permitido la lectura de archivos por un tiempo. Ahora puede enviar cambios fácilmente a archivos individuales, tal como lo hace en la interfaz de usuario web.

A partir de hoy, estos métodos están disponibles para usted:

+0

esta es la solución más fácilmente. Bibliotecas que puedes encontrar aquí: http://developer.github.com/libraries/#python – timaschew

0

Estoy en Google App Engine (GAE) tan fuera de Python, puede create un nuevo archivo, update, incluso delete it a través de un compromiso y empuje en mi repo en GitHub con GitHub API v3 en php, java y listo.

Comprobación y revisión de algunos de los terceros disponible libraries para crear como el example script que presenta en Perl, yo recomendaría usar el siguiente:

Como sabe, puede obtener un sitio por cuenta y organización de GitHub, y sitios de proyectos ilimitados donde los sitios web se alojan directamente desde su repositorio y funcionan con Jekyll de manera predeterminada.

Combinando Jekyll, Webhooks y GitHub API script en GAE, junto con una adecuada GAE Setting, se le dará una amplia posibilidad como calling external script y crear una página dinámica en GitHub.

Aparte de GAE, también hay una opción ejecutarlo en Heroku. Use JekyllBot que viva en una instancia (libre) de Heroku al silently genera archivos JSON para cada publicación y devuelva los cambios a GitHub.

0

He tenido curiosidad sobre esto, pero no he encontrado una solución que funcione con la API V3.

Sin embargo, me wrote a blog post along with code acerca de cómo hacer esto utilizando Node.js

1

Aquí hay un fragmento 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) 
Cuestiones relacionadas