JGit FetchCommand

Я понимаю концепцию Git fetch. Я хотел бы получать объекты через класс FetchCommand в API JGit.

У меня есть репозиторий Git. Например C:\jGit\.git.

Я клонировал этот репозиторий. Например: C:\jGitClone\jGit\.git.

Я снова клонировал этот репозиторий. Например C:\Users\user\Desktop\jGitClone\.git.

Используя API JGit, у меня есть класс Git:

Git git = new Git(repository); // this is the cloned repository. C:\jGitClone\jGit\.git

Как бы я установил клонированный репозиторий, который находится на рабочем столе, чтобы при вызове выборки он знал, что нужно получить в этот репозиторий.

Я просмотрел некоторые веб-сайты, включая 1 ниже, но все еще застрял.

Ошибка выборки Git с использованием jgit: Remote не имеет ‹branchname› доступного для выборки


person user1646481    schedule 14.09.2012    source источник


Ответы (2)


Я думаю, вы что-то пропустили. в Git/jGit локальная копия определяется path (как в файловой системе) и remote, что является удаленным репо.

В вашем случае вы хотите, чтобы ваш клонированный репозиторий на рабочем столе имел ссылку на ваш репозиторий jGitClone/jGit. Итак, во-первых, если клонирование уже выполнено, репозиторий рабочего стола знает о своем удаленном репо. Итак, в вашем коде вам просто нужно указать, где находится репозиторий вашего рабочего стола:

Builder builder = new FileRepositoryBuilder()
Git repo = builder.setGitDir(new File("C:\Users\user\Desktop\jGitClone.git"))
  .readEnvironment()
  .build()

Код может не работать напрямую (я его не проверял, у меня есть сомнения по пути предоставления и объектам для использования: Builder, Git), но он основан на этом ответе, который, я думаю, вам поможет: JGit и поиск главы

Кстати, ваш вопрос не так ясен: вы уже все клонировали или это то, что вы хотите сделать? в своем коде вы упоминаете repository : вы получили его, используя код, аналогичный тому, что я предложил? Имена, которые вы выбрали, тоже не очень ясны: вызов репозитория jGit, если он не содержит исходный код jGit, звучит немного неуклюже. Кроме того, дайте имена вашим различным репозиториям (A, B, C), чтобы иметь более четкое представление.

person Vince    schedule 17.09.2012

Вам нужно определить удаленный, который отслеживает репозиторий, из которого вы можете получить коммиты, с valina git, вы можете сделать:

# suppose you have cloned C:\jGitClone\jGit\.git
$ cd C:\Users\user\Desktop\jGitClone\.git
$ git remote add upstream "C:\jGitClone\jGit\.git"
$ git fetch upstream

Если вы хотите попробовать git24j, вы можете сделать это в java так же, как и с valina git. :

Repository remote = Repository.open("C:\jGitClone\jGit\.git");
Repository local = Repository.open("C:\Users\user\Desktop\jGitClone\.git");
// set up remote
Remote upstream = Remote.create(local, "upstream", URI.create(remote.getPath()));
// fetch from remote
upstream.fetch(null, null, "reflog");

Два nulls — это параметры, которые определяют refspecs для извлечения и параметры (где вы можете настроить учетные данные и т. д.).

person Shijing Lv    schedule 15.09.2020