2010-03-18 8 views

Répondre

7

Une fois que vous avez fait

from git import Git 
g = Git() 

(et éventuellement une autre commande pour initier g vers le référentiel qui vous intéresse) toutes les demandes d'attribut sur g sont plus ou moins transformées en un appel de git attr *args.

Par conséquent:

g.checkout("mybranch") 

devrait faire ce que vous voulez.

g.branch() 

liste les branches. Cependant, notez qu'il s'agit de commandes de très bas niveau et qu'elles renverront le code exact que les exécutables git retourneront. Par conséquent, ne vous attendez pas à une belle liste. Je serai juste une chaîne de plusieurs lignes et avec une ligne ayant un astérisque comme premier caractère.

Il pourrait y avoir un meilleur moyen de le faire dans la bibliothèque. Dans repo.py par exemple est une commande spéciale active_branch. Vous devrez passer par la source un peu et chercher vous-même.

+0

quand je lance r = Git.clone ("git ...") r.checkout ("développer") ne fonctionne pas .. AttributeError: 'caisse' objet 'str' n'a pas d'attribut – Mike

+0

ok semble que je dois lancer ag = Git ("dir ") alors je peux commander – Mike

+0

pourrait être. Je viens de cloner avec 'g' et ça a marché. – Debilski

4

à la liste des branches que vous pouvez actuellement utiliser:

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

r.heads retours git.util.IterableList (après list hérite) de git.Head objets, vous pouvez:

repo_heads_names = [h.name for h in repo_heads] 

Et à la caisse par exemple. master:

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

Module mentionné dans la question est GitPython qui moved de gitorious à Github.

1

J'ai eu un problème similaire. Dans mon cas, je voulais seulement lister les branches distantes qui sont suivies localement. Cela a fonctionné pour moi:

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) 

Dans le cas où toutes les branches à distance sont nécessaires, je préférerais git directement:

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

Si vous avez déjà une instance Repo, vous pouvez appeler les commandes git directement comme: '' 'repo.git.branch ('- a')' '' – dusktreader

0

Juste pour le rendre évident - pour obtenir une liste des succursales à distance du courant répertoire 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) 
Questions connexes