Un guide pour JGit

Un guide pour JGit

1. introduction

JGit est une implémentation de bibliothèque Java pure et légère du système de contrôle de version Git, comprenant des routines d'accès au référentiel, des protocoles réseau et des algorithmes centraux de contrôle de version.

JGit est une implémentation relativement complète de Git écrite en Java et largement utilisée dans la communauté Java. Le projet JGit est sous l'égide d'Eclipse, et sa maison se trouve àJGit.

Dans ce didacticiel, nous vous expliquerons comment l'utiliser.

2. Commencer

Il existe plusieurs façons de connecter votre projet avec JGit et de commencer à écrire du code. Le moyen le plus simple est probablement d'utiliser Maven - l'intégration se fait en ajoutant l'extrait suivant à la balise<dependencies> dans notre fichierpom.xml:


    org.eclipse.jgit
    org.eclipse.jgit
    4.6.0.201612231935-r

Veuillez visiter leMaven Central repository pour la dernière version de JGit. Une fois cette étape terminée, Maven acquerra et utilisera automatiquement les bibliothèques JGit dont nous aurons besoin.

Si vous préférez les bundles OSGi, il existe également un référentiel p2. Veuillez visiterEclipse JGit pour obtenir les informations nécessaires pour intégrer cette bibliothèque.

3. Création d'un référentiel

JGit a deux niveaux de base d'API:plumbing etporcelain. La terminologie utilisée provient de Git lui-même. JGit est divisé en mêmes zones:

  • APIporcelain - front-end pour les actions courantes au niveau de l'utilisateur (similaire à l'outil de ligne de commande Git)

  • APIplumbing - interaction directe avec les objets de référentiel de bas niveau

Le point de départ de la plupart des sessions JGit est dans la classeRepository. La première chose que nous allons faire est la création d'une nouvelle instance deRepository.

La commandeinit nous permettra de créer un référentiel vide:

Git git = Git.init().setDirectory("/path/to/repo").call();

Cela créera un référentiel avec un répertoire de travail à l'emplacement donné àsetDirectory().

Un référentiel existant peut être cloné avec la commandecloneRepository:

Git git = Git.cloneRepository()
  .setURI("https://github.com/eclipse/jgit.git")
  .setDirectory("/path/to/repo")
  .call();

Le code ci-dessus clonera le référentiel JGit dans le répertoire local nommépath/to/repo.

4. Objets Git

Tous les objets sont représentés par un identifiant SHA-1 dans le modèle d'objet Git. Dans JGit, cela est représenté par les classesAnyObjectId etObjectId.

Il existe quatre types d'objets dans le modèle d'objet Git:

  • blob - utilisé pour stocker les données de fichier

  • tree - un répertoire; il fait référence à d'autrestrees etblobs

  • commit - pointe vers un seul arbre

  • tag - marque un commit comme spécial; généralement utilisé pour marquer des versions spécifiques

Pour résoudre un objet depuis un référentiel, transmettez simplement la révision appropriée comme dans la fonction suivante:

ObjectId head = repository.resolve("HEAD");

4.1. Ref

LeRef est une variable qui contient un identifiant d'objet unique. L'identifiant d'objet peut être n'importe quel objet Git valide (blob,tree,commit,tag).

Par exemple, pour rechercher la référence à head, vous pouvez simplement appeler:

Ref HEAD = repository.getRef("refs/heads/master");

4.2. RevWalk

LeRevWalk parcourt un graphe de validation et produit les validations correspondantes dans l'ordre:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

LeRevCommit représente un commit dans le modèle objet Git. Pour analyser un commit, utilisez une instanceRevWalk:

RevWalk walk = new RevWalk(repository);
RevCommit commit = walk.parseCommit(objectIdOfCommit);

4.4. RevTag

LeRevTag représente une balise dans le modèle objet Git. Vous pouvez utiliser une instanceRevWalk pour analyser une balise:

RevWalk walk = new RevWalk(repository);
RevTag tag = walk.parseTag(objectIdOfTag);

4.5. RevTree

LeRevTree représente un arbre dans le modèle objet Git. Une instanceRevWalk est également utilisée pour analyser un arbre:

RevWalk walk = new RevWalk(repository);
RevTree tree = walk.parseTree(objectIdOfTree);

5. API Porcelaine

Bien que JGit contienne beaucoup de code de bas niveau pour fonctionner avec les référentiels Git, il contient également une API de niveau supérieur qui imite certaines des commandes Gitporcelain du packageorg.eclipse.jgit.api.

5.1. AddCommand (git-add)

LeAddCommand vous permet d'ajouter des fichiers à l'index via:

  • addFilepattern ()

Voici un exemple rapide de la façon d'ajouter un ensemble de fichiers à l'index à l'aide de l'APIporcelain:

Git git = new Git(db);
AddCommand add = git.add();
add.addFilepattern("someDirectory").call();

5.2. CommitCommand (git-commit)

LeCommitCommand vous permet d'effectuer des validations et dispose des options suivantes disponibles:

  • setAuthor ()

  • setCommitter ()

  • setAll ()

Voici un exemple rapide de la procédure de validation à l'aide de l'APIporcelain:

Git git = new Git(db);
CommitCommand commit = git.commit();
commit.setMessage("initial commit").call();

5.3. TagCommand (git-tag)

LeTagCommand prend en charge diverses options de balisage:

  • setName ()

  • setMessage ()

  • setTagger ()

  • setObjectId ()

  • setForceUpdate ()

  • setSigned ()

Voici un exemple rapide de balisage d'un commit à l'aide de l'APIporcelain:

Git git = new Git(db);
RevCommit commit = git.commit().setMessage("initial commit").call();
RevTag tag = git.tag().setName("tag").call();

5.4. LogCommand (git-log)

LesLogCommand vous permettent de parcourir facilement un graphe de validation.

  • add (début AnyObjectId)

  • addRange (AnyObjectId depuis, AnyObjectId jusqu'à)

Voici un exemple rapide de la façon d'obtenir des messages de journal:

Git git = new Git(db);
Iterable log = git.log().call();

6. Tâches de fourmis

JGit a également des tâches Ant courantes contenues dans le bundleorg.eclipse.jgit.ant.

Pour utiliser ces tâches:


    
        
        
        
    

Cela fournirait les tâchesgit-clone, git-init etgit-checkout.

6.1. git-clone

Les attributs suivants sont requis:

  • uri: l'URI à partir de laquelle cloner

Les attributs suivants sont facultatifs:

  • dest: la destination vers laquelle cloner (par défaut, utiliser un nom de répertoire lisible par l'homme basé sur le dernier composant de chemin desURI)

  • bare:true /false /yes /no pour indiquer si le référentiel cloné doit être nu ou non (par défaut,false)

  • branch: la branche initiale à extraire lors du clonage du référentiel (par défaut àHEAD)

6.2. git-init

Aucun attribut n'est requis pour exécuter la tâchegit-init.

Les attributs suivants sont facultatifs:

  • dest: le chemin où un référentiel git est initialisé (par défaut,$GIT_DIR ou le répertoire courant)

  • bare:true /false /yes /no pour indiquer si le référentiel doit être vide ou non (par défaut,false)

6.3. git-checkout

Les attributs suivants sont requis:

  • src: le chemin vers le référentiel git

  • branch: la branche initiale à récupérer

Les attributs suivants sont facultatifs:

  • createbranch:true /false /yes /no pour indiquer si la branche doit être créée si elle n'existe pas déjà (la valeur par défaut estfalse)

  • force:true /false /yes /no: sitrue /yes et la branche avec le nom donné déjà existe, le point de départ d'une branche existante sera défini sur un nouveau point de départ; sifalse, la branche existante ne sera pas modifiée (par défaut àfalse)

7. Conclusion

L’API JGit de haut niveau n’est pas difficile à comprendre. Si vous savez quelle commande git utiliser, vous pouvez facilement deviner les classes et les méthodes à utiliser dans JGit.

Il existe une collection d'extraits de code JGit prêts à être exécutéshere.

Si vous avez encore des difficultés ou des questions, veuillez laisser un commentaire ici ou demander de l'aide auxJGit community.