Ръководство за JGit

1. Въведение

JGit е олекотена, чиста реализация на Java библиотека на системата за контрол на версиите на Git - включваща подпрограми за достъп до хранилище, мрежови протоколи и основни алгоритми за контрол на версиите.

JGit е относително пълнофункционална реализация на Git, написана на Java и се използва широко в Java общността. Проектът JGit е под чадъра Eclipse, а домът му може да бъде намерен в JGit.

В този урок ще обясним как да работим с него.

2. Първи стъпки

Има редица начини да свържете проекта си с JGit и да започнете да пишете код. Вероятно най-лесният начин е да използвате Maven - интеграцията се осъществява чрез добавяне на следния фрагмент къмтаг в нашия файл pom.xml :

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

Моля, посетете централното хранилище на Maven за най-новата версия на JGit. След като тази стъпка бъде направена, Maven автоматично ще придобие и използва библиотеките на JGit, от които се нуждаем.

Ако предпочитате пакети OSGi, има и p2 хранилище. Моля, посетете Eclipse JGit, за да получите необходимата информация как да интегрирате тази библиотека.

3. Създаване на хранилище

JGit има две основни нива на API: водопровод и порцелан . Терминологията за тях идва от самия Git. JGit е разделен на същите области:

  • порцеланови приложни програмни интерфейси (API) - интерфейс за общи действия на ниво потребител (подобно на инструмента за команден ред Git)
  • водопроводни API - директно взаимодействие с обекти на хранилище на ниско ниво

Отправната точка за повечето сесии JGit е в класа Repository . Първото нещо, което ще направим, е създаването на нов екземпляр на хранилището .

Командата init ще ни позволи да създадем празно хранилище:

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

Това ще създаде хранилище с работеща директория на мястото, зададено на setDirectory () .

Съществуващо хранилище може да се клонира с командата cloneRepository :

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

Кодът по-горе ще клонира хранилището на JGit в локалната директория с име path / to / repo .

4. Git обекти

Всички обекти са представени с идентификатор SHA-1 в обектния модел на Git. В JGit това се представя от класовете AnyObjectId и ObjectId .

В обектния модел на Git има четири типа обекти:

  • blob - използва се за съхраняване на файлови данни
  • дърво - директория; той се позовава на други дървета и петна
  • commit - сочи към едно дърво
  • tag - маркира ангажимент като специален; обикновено се използва за маркиране на специфични версии

За да разрешите обект от хранилище, просто предайте правилната редакция, както в следната функция:

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

4.1. Реф

В компанията е променлива, която притежава един единствен идентификатор обект. Идентификаторът на обекта може да бъде всеки валиден Git обект ( blob , дърво , фиксиране , таг ).

Например, за да поискате препратка към head, можете просто да се обадите:

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

4.2. RevWalk

В RevWalk ходи на извършване на графика и произвежда съвпадение извърши за:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

В RevCommit представлява извършване на обект модел Git. За да анализирате ангажимент, използвайте екземпляр на RevWalk :

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

4.4. RevTag

В RevTag представлява маркер в обектния модел на Git. Можете да използвате екземпляр RevWalk, за да анализирате маркер:

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

4.5. RevTree

В RevTree представлява дърво в обектния модел на Git. А RevWalk например се използва и да се направи разбор на дърво:

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

5. API за порцелан

Докато JGit съдържа много код на ниско ниво за работа с Git хранилища, той също така съдържа API на по-високо ниво, който имитира някои от Git порцелановите команди в пакета org.eclipse.jgit.api .

5.1. AddCommand ( git-add )

В AddCommand ви позволява да добавяте файлове към индекса чрез:

  • addFilepattern ()

Ето бърз пример за това как да добавите набор от файлове към индекса с помощта на порцелановия API:

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

5.2. CommCommand ( git-commit )

В CommitCommand ви позволява да извършвате ангажира и е следната налична възможности:

  • setAuthor ()
  • setCommitter ()
  • setAll ()

Ето бърз пример за това как да се ангажирате с помощта на порцелановия API:

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

5.3. TagCommand ( git-tag )

В TagCommand поддържа разнообразни маркиране възможности:

  • setName ()
  • setMessage ()
  • setTagger ()
  • setObjectId ()
  • setForceUpdate ()
  • setSigned ()

Ето бърз пример за маркиране на фиксиране с помощта на порцелановия API:

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 )

В LogCommand ви позволява лесно да се разходите по извършване на графика.

  • добавяне (AnyObjectId старт)
  • addRange (AnyObjectId от, AnyObjectId до)

Ето бърз пример за това как да получите някои регистрационни съобщения:

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

6. Задачи за мравки

JGit също има някои често срещани задачи Ant, съдържащи се в пакета org.eclipse.jgit.ant .

За да използвате тези задачи:

Това би предоставило задачи на git-clone, git-init и git-checkout .

6.1. git-клонинг

Необходими са следните атрибути:

  • uri : URI, от който да се клонира

Следните атрибути не са задължителни:

  • dest : местоназначението, към което се клонира (по подразбиране използва човешко четимо име на директория въз основа на последния компонент на пътя на URI )
  • bare : true / false / yes / no, за да се посочи дали клонираното хранилище трябва да е голо или не (по подразбиране е false )
  • клон : началният клон за проверка при клониране на хранилището (по подразбиране на HEAD )

6.2. git-init

Не са необходими атрибути за изпълнение на задачата git-init .

Следните атрибути не са задължителни:

  • dest : пътят, където се инициализира git хранилище (по подразбиране $ GIT_DIR или текущата директория)
  • bare : true / false / yes / no, за да се посочи дали хранилището трябва да е голо или не (по подразбиране е false )

6.3. git-checkout

Необходими са следните атрибути:

  • src : пътят до git хранилището
  • клон : началният клон за плащане

Следните атрибути не са задължителни:

  • createbranch : true / false / yes / no, за да посочи дали клонът трябва да бъде създаден, ако вече не съществува (по подразбиране е false )
  • force : true / false / yes / no : ако true / yes и клонът с даденото име вече съществува, началната точка на съществуващ клон ще бъде зададена на нова начална точка; ако е false , няма да се промени съществуващия клон (по подразбиране е false )

7. Заключение

API на JGit на високо ниво не е трудно да се разбере. Ако знаете каква git команда да използвате, можете лесно да познаете кои класове и методи да използвате в JGit.

Тук има колекция от готови за изпълнение JGit кодови фрагменти.

Ако все още имате затруднения или въпроси, моля, оставете коментар тук или помолете общността на JGit за съдействие.