для проекта мне нужно получить один файл из репозитория. Но мне нужно go через все коммиты. Идея состоит в том, чтобы отслеживать изменения внутри этого файла. Моя идея заключалась в том, чтобы создать репозиторий inMemory и просто скопировать один файл на диск. Но я не знаю, как перебирать коммиты для этого файла. Он отлично работает, если я подключаюсь к локальному репо git. Но у меня не будет его на сервере, на котором будет работать эта программа.
До сих пор я следил за этим .
Но когда я пытаюсь сделать что-то вроде
LogCommand logCommand = git.log().addPath("componentModel.xml");
List<ObjectId> commitIds = new ArrayList<>();
for (RevCommit revCommit : logCommand.setMaxCount(20).call()) {
commitIds.add(revCommit.getId());
revCommit.disposeBody();
}
Collections.reverse(commitIds);
Я получаю сообщение об ошибке при достижении logcommand.call()
org.eclipse.j git .api.errors.NoHeadException: HEAD не существует и нет явной начальной версии был указан
в org.eclipse.j git .api.LogCommand.call (LogCommand. java: 131)
Пока это мой код
DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();
InMemoryRepository repository = new InMemoryRepository(repoDesc);
Git git = new Git(repository);
git.fetch()
.setRemote(myRemoteGitRepo)
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("myToken", ""))
.setRefSpecs(new RefSpec("+refs/heads/*:refs/heads/*"))
.call();
repository.getObjectDatabase();
LogCommand logCommand = git.log().addPath("componentModel.xml");
List<ObjectId> commitIds = new ArrayList<>();
for (RevCommit revCommit : logCommand.setMaxCount(20).call()) {
commitIds.add(revCommit.getId());
revCommit.disposeBody();
}
Collections.reverse(commitIds);
for (ObjectId id : commitIds) {
RevWalk revWalk = new RevWalk(repository)
RevCommit commit = revWalk.parseCommit(id);
RevTree tree = commit.getTree();
TreeWalk treeWalk = new TreeWalk(repository)
treeWalk.addTree(tree);
treeWalk.setRecursive(true);
treeWalk.setFilter(PathFilter.create("componentModel.xml"));
if (!treeWalk.next()) {
throw new IllegalStateException("Did not find expected file componentModel.xml");
}
ObjectId objectId = treeWalk.getObjectId(0);
ObjectLoader loader = repository.open(objectId);
FileOutputStream fileOutputStream = new FileOutputStream(path + "componentModel.xml", false);
loader.copyTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
transformXML(path, commit.getId().toString(), Date.from(Instant.ofEpochSecond(commit.getCommitTime())), extractJiraTicketNumber(commit.getFullMessage()));
}
Спасибо за любую помощь!