2009-05-17 11 views
4

GitPython est une manière d'interagir avec git à partir de python. J'essaie d'accéder aux commandes git de base (par exemple, git commit -m "message") à partir de ce module qui, selon this, doit être accessible via le module Git. Voici ce que j'ai essayé jusqu'à présent pour obtenir ces commandes de travail:GitPython et l'envoi de commandes à l'objet Git

>>> import git 
>>> foo = git.Git("~/git/GitPython") 
>>> bar = "git commit -m 'message'" 
>>> beef = git.Git.execute(foo,bar) 

Cela apparaît une erreur en disant qu'il n'y a pas un tel fichier ou un répertoire. J'ai aussi essayé les éléments suivants comme les chemins à mon répertoire git:

~/git/GitPython/.git
/Users/bacon/git/gitclient/

La seule autre option est que la commande ne va pas, alors j'ai essayé: commit -m "message" aussi bien, et encore obtenir " Aucun fichier ou répertoire de ce nom".

Que dois-je faire pour que ces commandes git fonctionnent correctement?

Répondre

11

Je n'ai pas encore essayé de vérifier, mais il semble que git.Git.execute attend une liste d'arguments en ligne de commande (si vous lui donnez une chaîne, il cherchera un exécutable correspondant exactement à la chaîne, aux espaces et à tout - qui naturellement ne se trouve), donc quelque chose comme cela, je pense que cela fonctionnerait:

import git 
import os, os.path 
g = git.Git(os.path.expanduser("~/git/GitPython")) 
result = g.execute(["git", "commit", "-m", "'message'"]) 

autres changements:

  • Je me attends à l'aide d'un chemin avec ~ en cela ne fonctionnerait pas si je os.path.expanduser pour développer ~ dans votre répertoire personnel
  • utilisant instance.method (* args) au lieu de Class.method (par exemple, * args) est généralement préféré donc je changé que, si elle avait encore travailler avec l'autre façon

Il pourrait y avoir des moyens plus sains que Exécution manuelle de la commande commit (je n'ai juste pas remarqué la lecture rapide de la source) donc je suggère de m'assurer qu'il n'y a pas de moyen de niveau supérieur avant de le faire de cette façon.

+0

Après avoir essayé, je reçois un message de la console: « git.errors.GitCommandError: '[\' git '\, ...] retourne l'état de la sortie 129" . Merci d'avoir passé les arguments sous forme de liste, très utile :) –

+0

J'ai fini par utiliser ['git''commit', '-a', '-m "message' '] en utilisant cette méthode. Encore merci, vous basculez –

+0

Pourquoi la documentation n'est-elle pas plus claire?Ou le 'tutoriel' en fait plus d'un tutoriel? Les docs Python peuvent parfois être frustrants. – Emmel

0

Dans le tutoriel, il dit ...

The first step is to create a ``Repo`` object to represent your repository. 

    >>> from git import * 
    >>> repo = Repo("/Users/mtrier/Development/git-python") 

Je ne vois pas votre repo.

Je regarde le fichier nommé tutorial.rst dans le répertoire doc de GitPython.

0

En général, ~ l'expansion est terminée par votre shell et n'est pas une caractéristique du système de fichiers, vous ne devriez donc pas vous attendre à ce qu'il fonctionne. Os.path.expanduser peut appliquer l'extension pour vous, mais en général, il vaut mieux écrire le chemin d'accès complet (depuis, le script fonctionne, quel qu'il soit, à condition qu'il ait accès à vos fichiers).

Je suppose que vous voulez:

'/Users/bacon/git/GitPython' 
Questions connexes