[JAVA] Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git

motivation

Dans un certain environnement, git ne peut pas être installé pour des raisons telles que" vous n'avez pas l'autorité sudo "ou" moss avec make". J'avais des problèmes, je l'ai essayé comme l'une des contre-mesures, et cela a fonctionné, alors je vais le présenter

(J'ai fait de mon mieux pour la compilation croisée, mais j'espère que cela aide les gens même si cela ne fonctionne pas.)

idée

"Si vous utilisez jgit, qui est une implémentation Java de git, ** cela fonctionnera partout où il y a une JVM ** "

manière

Dans l'ensemble, C'est comme récupérer eclipse / jgit et le construire. Je pense que vous pouvez le construire si vous pouvez utiliser la commande mvn. (Je pense que cela fonctionne mieux que make`` git)

#Obtenez le référentiel
#(Je l'ai fait dans un environnement avec un git approprié)
git clone [email protected]:eclipse/jgit.git
# (Ou w obtenez https://github.com/eclipse/jgit/tree/stable-4.Je pense que vous pouvez télécharger le zip à 11)

#Déplacer le répertoire
cd jgit/

#Découvrez la dernière version stable actuelle
git checkout stable-4.11

#Installer
mvn clean install

#Essayez d'exécuter le jgit intégré
./org.eclipse.jgit.pgm/target/jgit --version

. / org.eclipse.jgit.pgm / target / est portable, et vous pouvez définir ce répertoire target dans l'environnement où vous voulez la commande git.

** Je pense que c'est correct d'avoir un environnement séparé pour la construction de jgit et où vous voulez installer jgit ** (croyez au slogan Java ** Écrivez une fois, exécutez n'importe où ** ...).

Ensuite, créez un lien symbolique avec la commande suivante avec le nom "" git " vers. / Org.eclipse.jgit.pgm / target / jgit`.

#Créez une symbolique avec le nom git ($Créé en PWD)
ln -s ./org.eclipse.jgit.pgm/target/jgit git

Si vous passez le chemin ici, vous pouvez le traiter comme une commande git.

Qu'est-ce que JGit? Est-ce fiable?

** JGit est une implémentation Java de git. ** **

La déclaration officielle est la suivante, donc ce n'est pas comme frapper git dans les coulisses.

An implementation of the Git version control system in pure Java.

Je pense que l'utilisation principale est de gérer des instructions telles que commit et checkout de git depuis Java (ou langage JVM) à partir du programme. Ce qui suit est un exemple.

//exemple de git commit
Git git = new Git(db);
CommitCommand commit = git.commit();
commit.setMessage("initial commit").call();
//exemple de journal git
Git git = new Git(db);
Iterable<RevCommit> log = git.log().call();

Il ressemble à system (), donc je pense que le but principal est de le faire fonctionner sans appuyer sur la commande git. Il existe un document officiel sur la façon de l'utiliser comme une CLI comme cette fois, et il ne devrait y avoir aucun moyen de l'utiliser.

Concernant la fiabilité, Il semble qu'Eclipse le développe, donc il sera également utilisé dans Eclipse. Il semble être utilisé dans Gitbucket (comme la version open source de GitHub) écrit en Scala, donc je pense que c'est assez fiable.

Contrôle de fonctionnement de jgit

(Remarque: le git ci-dessous est un lien symbolique vers jgit)

$ git --version
jgit version 5.0.0-SNAPSHOT
$ git
jgit --git-dir GIT_DIR --help (-h) --show-stack-trace --version command [ARG ...]

The most commonly used commands are:
 add              Add file contents to the index
 archive          Zip up files from the named tree
 branch           List, create, or delete branches
 checkout         Checkout a branch to the working tree
 clean            Remove untracked files from the working tree
 clone            Clone a repository into a new directory
 commit           Record changes to the repository
 config           Get and set repository or global options
 daemon           Export repositories over git://
 debug-lfs-store  Run LFS Store in a given directory
 describe         Show the most recent tag that is reachable from a commit
 diff             Show diffs
 fetch            Update remote refs from another repository
 gc               Cleanup unnecessary files and optimize the local repository
 init             Create an empty git repository
 log              View commit history
 ls-remote        List references in a remote repository
 ls-tree          List the contents of a tree object
 merge            Merges two development histories
 push             Update remote repository from local refs
 reflog           Manage reflog information
 repo             Parse a repo manifest file and add submodules
 reset            Reset current HEAD to the specified state
 rm               Stop tracking a file
 show             Display one commit
 status           Show the working tree status
 tag              Create a tag
 version          Display the version of jgit

référence

Recommended Posts

Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
Comment gérer la différence dans chaque environnement avec yml sans augmenter le nombre de RAILS_ENV
Comment exécuter avec des commandes de langage de développement normales dans l'environnement de développement Docker
Comment installer Docker dans l'environnement local d'une application Rails existante [Rails 6 / MySQL 8]
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Comment obtenir la longueur d'un fichier audio avec Java
Comment utiliser les variables d'environnement dans RubyOnRails
Comment convertir un tableau de chaînes en un tableau d'objets avec l'API Stream
Sortie de la façon d'utiliser la méthode slice
Comment utiliser JQuery dans Rails 6 js.erb
[Rails] Comment créer un environnement avec Docker
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment vérifier les commandes Rails dans le terminal
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Vue ~
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Organisé comment interagir avec le JDK par étapes
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment démarrer par environnement avec Spring Boot de Maven
[Rails] Comment afficher les images dans la vue
Si vous utilisez SQLite avec VSCode, utilisez l'extension (comment voir le fichier binaire de sqlite3)
Pour ceux qui souhaitent utiliser MySQL pour la base de données dans la construction de l'environnement de Rails6 ~.
Comment demander en passant un tableau à une requête avec le client HTTP de Ruby
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
Comment utiliser la méthode getter / setter (en orientation objet)
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Comment passer un objet à Mapper dans MyBatis sans passer par un argument
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Mettez en majuscule uniquement la plage spécifiée avec la sous-chaîne. (Comment utiliser la sous-chaîne)
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment ajouter des éléments sans spécifier la longueur du tableau
Comment dériver le dernier jour du mois en Java
Comment modifier le contenu du fichier jar sans décompresser
Comment utiliser la même classe Mapper dans plusieurs sources de données avec Spring Boot + MyBatis
Je veux recréer le contenu des actifs à partir de zéro dans l'environnement construit avec capistrano
Comment utiliser la méthode link_to
Comment utiliser Lombok au printemps
Comment utiliser la méthode include?
[Débutant] Procédure de connexion à l'environnement virtuel construit avec Vagrant
[Sprint Boot] Comment utiliser les trois types de SqlParameterSource définis dans org.springframework.jdbc.core.namedparam
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment créer une application avec ruby on rails (en supposant que l'environnement a été construit)
Comment utiliser la classe wrapper
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Comment utiliser setDefaultCloseOperation () de JFrame
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment utiliser mssql-tools avec Alpine
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
L'histoire de toString () commençant par le passage d'un tableau à System.out.println
Comment utiliser InjectorHolder dans OpenAM