Рубрики
Без рубрики

Узнайте о своем проекте из истории git

История Git может быть ценным источником информации о проекте, такой как колебания команды, горячие точки исходного кода или скорость разработки.

Автор оригинала: Marcin Piczkowski.

Когда я начинаю новый проект, помимо изучения того, как его создавать и запускать, мне также нравится проверять, на что следует обратить внимание. Такие вещи, как:

  • является ли код чистым и хорошо структурированным?
  • существуют ли еще разработчики, написавшие код?
  • какие части являются источником наибольшей головной боли?

Вы можете найти часть этой информации в инструментах статического анализа кода (например, для Java: FindBugs , PMD , CheckStyle или плагин IntelliJ Idea под названием SonarLint )

Все они анализируют текущее состояние исходного кода, но, похоже, вы можете получить много ценной информации из истории проекта.

Вы могли бы получить такую информацию, как:

  • насколько интенсивна разработка, например, сколько людей работает над кодом и сколько линий производится за определенный промежуток времени.
  • сколько написано кода, связанного с ошибками и функциями (при условии, что каждое сообщение о фиксации имеет разные теги для каждой функции и исправления ошибок)
  • какие файлы чаще всего обновляются в контексте ошибки
  • какие файлы обычно обновляются вместе

Уже есть некоторые инструменты, которые могут это сделать (см. раздел “Ссылки” ниже), но провести такой анализ самостоятельно относительно просто.

Здесь – это простое приложение, написанное на Java, которое, учитывая путь к репозиторию git, выводит список из 10 наиболее часто фиксируемых файлов вместе с количеством фиксаций.

Я использовал Библиотека JGit , которая является реализацией Git на Java.

Это работает так, что я получаю список коммитов для репозитория.

  public static Stream getCommits(Git git) throws GitAPIException {
        return StreamSupport.stream(git.log().call().spliterator(), false);
    }

Затем для каждой фиксации я ссылаюсь на дерево версий, в котором содержится информация обо всех файлах в этой редакции.

public static Stream getRevTrees(Stream commitsStream) {
        return commitsStream
                .map(rev -> rev.getTree().getId());
    }

Для каждого такого дерева я сравниваю его с деревом из предыдущего коммита и получаю разницу.

    public static List diff(Git git, ObjectId newCommit, ObjectId oldCommit) throws IOException {
        DiffFormatter df = new DiffFormatter(new ByteArrayOutputStream());
        df.setRepository(git.getRepository());
        return df.scan(newCommit, oldCommit);
    }

Я собираю список всех измененных файлов во всех фиксациях и в конце группирую их по пути к файлу и подсчитываю вхождения. Наконец, я сортирую их по наиболее часто встречающимся путям.

Например, когда вы запустите приложение в популярной ветке spring-framework master, вы получите результаты, как показано ниже:

...

build.gradle - 1374
src/asciidoc/index.adoc - 444
spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java - 375
spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java - 374
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java - 362
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java - 332
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java - 323
spring-web/src/main/java/org/springframework/http/HttpHeaders.java - 323
spring-web/src/main/java/org/springframework/web/client/RestTemplate.java - 320
spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java - 320

Исходя из этого, вы можете представить, на какие файлы следует обратить внимание в первую очередь. Затем вы, вероятно, захотите проверить, где они используются для детализации ковша в проекте.

Рекомендации:

  • Рекомендации:
  • Рекомендации:
  • Рекомендации:
  • Рекомендации:

Оригинал: “https://www.codementor.io/@marcinpiczkowski/learn-about-your-project-from-git-history-obn67hw0u”