Руководство по JGit

Руководство по JGit

1. Вступление

JGit - это легковесная, чистая реализация библиотеки Java системы контроля версий Git, включая процедуры доступа к репозиторию, сетевые протоколы и основные алгоритмы контроля версий.

JGit является относительно полнофункциональной реализацией Git, написанной на Java, и широко используется в сообществе Java. Проект JGit находится под эгидой Eclipse, и его домашняя страница находится вJGit.

В этом руководстве мы объясним, как с ним работать.

2. Начиная

Есть несколько способов соединить ваш проект с JGit и начать писать код. Вероятно, самый простой способ - использовать Maven - интеграция достигается путем добавления следующего фрагмента в тег<dependencies> в нашем файлеpom.xml:


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

ПосетитеMaven Central repository для получения последней версии JGit. Как только этот шаг будет выполнен, Maven автоматически получит и использует библиотеки JGit, которые нам понадобятся.

Если вы предпочитаете пакеты OSGi, есть также репозиторий p2. ПосетитеEclipse JGit, чтобы получить необходимую информацию о том, как интегрировать эту библиотеку.

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

JGit имеет два основных уровня API:plumbing иporcelain. Терминология для этого происходит от самого Git. JGit делится на те же области:

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

  • APIplumbing - прямое взаимодействие с низкоуровневыми объектами репозитория

Отправной точкой для большинства сеансов JGit является классRepository. Первое, что мы собираемся сделать, это создать новый экземплярRepository.

Командаinit позволит нам создать пустой репозиторий:

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

Это создаст репозиторий с рабочим каталогом в месте, указанном дляsetDirectory().

Существующий репозиторий можно клонировать с помощью командыcloneRepository:

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

Приведенный выше код клонирует репозиторий JGit в локальный каталог с именемpath/to/repo.

4. Объекты Git

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

В объектной модели Git есть четыре типа объектов:

  • blob - используется для хранения файловых данных

  • tree - каталог; он ссылается на другиеtrees иblobs

  • commit - указывает на одно дерево

  • tag - помечает фиксацию как особую; обычно используется для обозначения конкретных выпусков

Чтобы разрешить объект из репозитория, просто передайте правильную ревизию, как в следующей функции:

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

4.1. Refс

Ref - это переменная, содержащая единственный идентификатор объекта. Идентификатором объекта может быть любой действительный объект Git (blob,tree,commit,tag).

Например, чтобы запросить ссылку на заголовок, вы можете просто позвонить:

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 более высокого уровня, который имитирует некоторые команды Gitporcelain в пакетеorg.eclipse.jgit.api.

5.1. AddCommand (git-add)

AddCommand позволяет добавлять файлы в индекс с помощью:

  • addFilepattern ()

Вот быстрый пример того, как добавить набор файлов в индекс с помощью APIporcelain:

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

5.2. CommitCommand (git-commit)

CommitCommand позволяет выполнять коммиты и имеет следующие доступные параметры:

  • setAuthor ()

  • setCommitter ()

  • setAll ()

Вот быстрый пример того, как выполнить фиксацию с помощью APIporcelain:

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 ()

Вот быстрый пример пометки фиксации с помощью 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)

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-cloneс

Требуются следующие атрибуты:

  • uri: URI для клонирования из

Следующие атрибуты являются необязательными:

  • dest: место назначения для клонирования (по умолчанию используется удобочитаемое имя каталога на основе последнего компонента путиURI)

  • bare:true /false /yes /no, чтобы указать, должен ли клонированный репозиторий быть пустым или нет (по умолчаниюfalse)

  • branch: начальная ветка для проверки при клонировании репозитория (по умолчаниюHEAD)

6.2. git-initс

Для выполнения задачиgit-init атрибуты не требуются.

Следующие атрибуты являются необязательными:

  • dest: путь, по которому инициализируется репозиторий git (по умолчанию$GIT_DIR или текущий каталог)

  • bare:true /false /yes /no, чтобы указать, должен ли репозиторий быть пустым или нет (по умолчаниюfalse)

6.3. git-checkoutс

Требуются следующие атрибуты:

  • src: путь к репозиторию git

  • branch: начальная ветвь для оформления заказа

Следующие атрибуты являются необязательными:

  • createbranch:true /false /yes /no, чтобы указать, следует ли создавать ветку, если она еще не существует (по умолчаниюfalse)

  • force:true /false /yes /no: еслиtrue /yes и ветвь с данным именем уже существует, начальная точка существующей ветви будет установлена ​​на новую начальную точку; еслиfalse, существующая ветка не будет изменена (по умолчаниюfalse)

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

API высокого уровня JGit не сложно понять. Если вы знаете, какую команду git использовать, вы можете легко угадать, какие классы и методы использовать в JGit.

Доступен набор готовых к запуску фрагментов кода JGithere.

Если у вас все еще есть трудности или вопросы, оставьте здесь комментарий или обратитесь за помощью кJGit community.