[JAVA] Verwendung von git mit der Leistung von jgit in einer Umgebung ohne git-Befehle

Motivation

In einer bestimmten Umgebung kann "git" nicht installiert werden, weil "Sie keine Sudo-Berechtigung haben" oder "Moos mit" make "". Ich war in Schwierigkeiten, ich habe es als eine der Gegenmaßnahmen versucht, und es hat funktioniert, also werde ich es vorstellen

(Ich habe mein Bestes versucht, um Cross-Compilieren zu können, aber ich hoffe, es hilft den Leuten, auch wenn es nicht funktioniert.)

Idee

"Wenn Sie" jgit "verwenden, eine Java-Implementierung von" git ", ** funktioniert es überall dort, wo es eine JVM gibt **"

Weise

Als Ganzes fließen Es ist wie das Abrufen von eclipse / jgit und das Erstellen. Ich denke, Sie können es erstellen, wenn Sie den Befehl mvn verwenden können. (Ich denke, es funktioniert besser als make`` git)

#Holen Sie sich das Repository
#(Ich habe es in einer Umgebung mit einem geeigneten Git gemacht)
git clone [email protected]:eclipse/jgit.git
# (Oder wir bekommen https://github.com/eclipse/jgit/tree/stable-4.Ich denke, Sie können die Zip um 11 herunterladen)

#Verzeichnis verschieben
cd jgit/

#Schauen Sie sich die aktuelle stabile Version an
git checkout stable-4.11

#Installieren
mvn clean install

#Versuchen Sie, das erstellte JGIT auszuführen
./org.eclipse.jgit.pgm/target/jgit --version

. / org.eclipse.jgit.pgm / target / ist portabel, und Sie können dieses target-Verzeichnis in der Umgebung festlegen, in der Sie den Befehl git möchten.

** Ich denke, es ist in Ordnung, eine separate Umgebung zum Erstellen von "jgit" zu haben und wo Sie "jgit" installieren möchten ** (glauben Sie an den Java-Slogan ** Einmal schreiben, überall ausführen ** ...).

Erstellen Sie danach eine symbolische Verknüpfung mit dem folgenden Befehl mit dem Namen "git" in Richtung ". / Org.eclipse.jgit.pgm / target / jgit".

#Erstellen Sie eine Symbolik mit dem Namen git ($Erstellt in PWD)
ln -s ./org.eclipse.jgit.pgm/target/jgit git

Wenn Sie den Pfad hier übergeben, können Sie ihn wie einen "git" -Befehl behandeln.

Was ist JGit? Ist es zuverlässig?

** JGit ist eine Java-Implementierung von git. ** ** **

Die offizielle Aussage lautet wie folgt, es ist also nicht so, als würde man hinter den Kulissen "git" schlagen.

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

Ich denke, dass die Hauptverwendung darin besteht, Anweisungen wie "Commit" und "Checkout" von "Git" aus Java (oder der JVM-Sprache) aus dem Programm zu verarbeiten. Das Folgende ist ein Beispiel.

//Git Commit Beispiel
Git git = new Git(db);
CommitCommand commit = git.commit();
commit.setMessage("initial commit").call();
//Beispiel für ein Git-Protokoll
Git git = new Git(db);
Iterable<RevCommit> log = git.log().call();

Es sieht aus wie "system ()", daher denke ich, dass der Hauptzweck darin besteht, es zu bedienen, ohne den Befehl "git" zu drücken. Es gibt ein offizielles Dokument darüber, wie man es wie dieses Mal als CLI verwendet, und diese Verwendung sollte überhaupt sein.

In Bezug auf Zuverlässigkeit, Es scheint, dass Eclipse es entwickelt, daher wird es auch in Eclipse verwendet. Es scheint in Gitbucket (wie die Open-Source-Version von GitHub) verwendet zu werden, das in Scala geschrieben wurde, daher denke ich, dass es ziemlich zuverlässig ist.

Funktionsprüfung von jgit

(Hinweis: Das unten stehende "git" ist ein symbolischer Link zu "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

Referenz

Recommended Posts

Verwendung von git mit der Leistung von jgit in einer Umgebung ohne git-Befehle
So verwalten Sie den Unterschied in jeder Umgebung mit yml, ohne die Anzahl von RAILS_ENV zu erhöhen
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
So installieren Sie Docker in der lokalen Umgebung einer vorhandenen Rails-App [Rails 6 / MySQL 8]
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So ermitteln Sie die Länge einer Audiodatei mit Java
Verwendung von Umgebungsvariablen in RubyOnRails
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
Ausgabe der Verwendung der Slice-Methode
Verwendung von JQuery in Rails 6 js.erb
[Rails] So erstellen Sie eine Umgebung mit Docker
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
So überprüfen Sie Rails-Befehle im Terminal
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
So erstellen Sie mit Docker ~ Vue ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Organisierte schrittweise Interaktion mit dem JDK
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Verwendung der JDD-Bibliothek in Scala mit Eclipse
Booten nach Umgebung mit Spring Boot of Maven
[Schienen] So zeigen Sie Bilder in der Ansicht an
Wenn Sie SQLite mit VSCode verwenden, verwenden Sie die Erweiterung (wie die Binärdatei von sqlite3 angezeigt wird)
Für diejenigen, die MySQL für die Datenbank in der Umgebungskonstruktion von Rails6 ~ verwenden möchten.
Anfordern durch Übergeben eines Arrays an eine Abfrage mit dem HTTP-Client von Ruby
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Verwendung der Getter / Setter-Methode (in Objektorientierung)
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
So übergeben Sie ein Objekt in MyBatis an Mapper, ohne ein Argument durchzugehen
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
So rufen Sie den Hashwert in einem Array in Ruby ab
Großschreibung nur des angegebenen Bereichs mit Teilzeichenfolge. (Verwendung von Teilzeichenfolgen)
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Hinzufügen von Elementen ohne Angabe der Länge des Arrays
So leiten Sie den letzten Tag des Monats in Java ab
So ändern Sie den Inhalt der JAR-Datei, ohne sie zu dekomprimieren
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
Ich möchte den Inhalt von Assets in der mit capistrano erstellten Umgebung von Grund auf neu erstellen
Verwendung der link_to-Methode
Wie man Lombok im Frühling benutzt
Verwendung der include? -Methode
[Anfänger] Verfahren zum Anmelden bei der mit Vagrant erstellten virtuellen Umgebung
[Sprint Boot] Verwendung der drei in org.springframework.jdbc.core.namedparam definierten Arten von SqlParameterSource
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
So erstellen Sie eine App mit Ruby on Rails (vorausgesetzt, die Umgebung wurde erstellt)
Verwendung der Wrapper-Klasse
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Verwendung von setDefaultCloseOperation () von JFrame
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Wie man mssql-tools mit alpine benutzt
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
Die Geschichte von toString () beginnt mit der Übergabe eines Arrays an System.out.println
Verwendung von InjectorHolder in OpenAM