2012-06-12 16 views
8

Estoy tratando de usar GitPython para escribir algunos scripts de Python que puedo usar para simplificar mis tareas diarias ya que administro muchas ramas.Usando el módulo GitPython para obtener la rama HEAD remota

También soy bastante nuevo para Python cuando se trata de escribir guiones complicados.

Esta es la API utilicé: GitPython API doc

quiero escribirlo en GitPython que simplemente hace lo siguiente y analizar fuera de la parte que Quiero la cabeza rama distancia apunta muestra. En otra palabra, quiero conseguir básicamente el remotes/origin/HEAD

$ git branch -a 
    master 
* branch_to_remove 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/testing 

hojeo la documentación del API muchas veces, en un primer momento que estoy teniendo problemas para comprender el formato del pitón de estos documentos de la API, y no pude encontrar nada útil para hacer esto aparte de remote_head en class git.refs.reference.Reference(repo, path, check_path=True)

Pero ni siquiera sé cómo llamarlo/inicializarlo.

Aquí es lo que tenía hasta ahora, y se puede decir lo que estoy tratando de hacer, para restablecer simplemente a estado 'ninguna rama' y retirar la rama actual Estoy en:

import git 
from git import * 
repo = git.Repo("/some/path/testing") 
repo.git.branch() 
[some code to get the remotes/origin/HEAD, set it to remoteHeadBranch ] 
repo.git.checkout(remoteHeadBranch) # this should reset the Git back to 'no branch' state 
repo.git.checkout(D="branch_to_remove") 

¡Cualquier ayuda es muy apreciada!

Gracias.

Respuesta

3

Acabo de ver su pregunta Me estaba preguntando acerca de este gitPython, parece una herramienta muy buena, y estaba buscando esta pregunta específica en la documentación de GitPython sin suerte pero si busca en github verá muchas pruebas allí y hay una prueba para eso.

Usted verá algo como esto cuando se busca "eliminar nueva sucursal":

# remove new branch 
Head.delete(new_remote_branch.repo, new_remote_branch) 

GitPython Reference

+0

Gracias por su comentario! Voy a probar esto! ¿Puede alguien ayudarme un poco al leer estos documentos de Python API?Quise decir que el documento es muy diferente y difícil de leer para un tipo Java como yo :-( ¡Gracias! – xbeta

+0

Esto * NO * funcionará porque no se puede eliminar la rama en la que se encuentra actualmente, por lo que el primer paso es siempre volver al estado 'sin rama', lo que estoy tratando de hacer. 'Error al cambiar a 'no' estado de rama 'git branch -d newMaster' devuelto estado de salida 1: error: No se puede eliminar la rama 'newMaster' en el que se encuentra actualmente. – xbeta

3

para imprimir la rama actual:

print(repo.head.ref) 

lista A ramas

print [str(b) for b in repo.heads] 

A la caja una rama

repo.heads[branch].checkout() 

o repo.git.checkout(branch)

Si usted está tratando de eliminar una rama, usted necesita estar en una rama local diferente, lo que se puede hacer de varias maneras

repo.heads['master'].checkout() 

o repo.git.checkout('master') o repo.git.checkout('remotes/origin/master')

Espero que esto ayude

Cuestiones relacionadas