2010-03-18 11 views

Respuesta

7

Después de haber hecho

from git import Git 
g = Git() 

(y posiblemente algún otro comando para iniciar g en el repositorio que le interese) todas las solicitudes de atributos en g se transforman más o menos en una llamada de git attr *args.

Por lo tanto:

g.checkout("mybranch") 

debe hacer lo que quiera.

g.branch() 

enumerará las ramas. Sin embargo, tenga en cuenta que estos son comandos de muy bajo nivel y devolverán el código exacto que devolverán los archivos ejecutables de git. Por lo tanto, no esperes una buena lista. Seré una cadena de varias líneas y una línea tendrá un asterisco como primer personaje.

Puede haber una forma mejor de hacerlo en la biblioteca. En repo.py, por ejemplo, es un comando especial active_branch. Tendrás que ir un poco a la fuente y buscar por ti mismo.

+0

cuando corro r = Git.clone ("git ...") r.checkout ("desarrollo") no funciona .. AttributeError: objeto 'str' no tiene atributo 'check out' – Mike

+0

bien parece que necesito ejecutar ag = Git ("dir ") entonces puedo pagar – Mike

+0

podría ser. Acabo de clonar con 'g' y luego funcionó. – Debilski

4

Para una lista ramas Actualmente se puede utilizar:

from git import Repo 
r = Repo(your_repo_path) 
repo_heads = r.heads # or it's alias: r.branches 

r.heads vuelve git.util.IterableList (hereda después list) git.Head de objetos, para que pueda:

repo_heads_names = [h.name for h in repo_heads] 

Y al Pago por ejemplo. master:

repo_heads['master'].checkout() 
# you can get elements of IterableList through it_list['branch_name'] 
# or it_list.branch_name 

módulo mencionado en la pregunta es la que GitPythonmoved de gitorious a Github.

1

Tuve un problema similar. En mi caso, solo quería enumerar las sucursales remotas que se rastrean localmente. Esto funcionó para mí:

import git 

repo = git.Repo(repo_path) 
branches = [] 
for r in repo.branches: 
    branches.append(r) 
    # check if a tracking branch exists 
    tb = t.tracking_branch() 
    if tb: 
     branches.append(tb) 

En caso de que se necesitan todas las ramas remotas, preferiría correr git directamente:

def get_all_branches(path): 
    cmd = ['git', '-C', path, 'branch', '-a'] 
    out = subprocess.check_output(cmd, stderr=subprocess.STDOUT) 
    return out 
+1

Si ya tiene una instancia de Repo, puede llamar a los comandos de git directamente como: '' 'repo.git.branch ('- a')' '' – dusktreader

0

Sólo para que quede claro - para obtener una lista de sucursales de los actuales repo:

import os, git 

# Create repo for current directory 
repo = git.Repo(os.getcwd()) 

# Run "git branch -r" and collect results into array 
remote_branches = [] 
for ref in repo.git.branch('-r').split('\n'): 
    print ref 
    remote_branches.append(ref) 
Cuestiones relacionadas