178 читања

Вашата прва линија на одбрана за чист код е претприемништвото: како да го поставите

од страна на Alexandre Couedelo8m2025/07/06
Read on Terminal Reader

Премногу долго; Да чита

Pre-commit е алатка која автоматски врши проверка на квалитетот на кодот (како што се форматирање и лентирање) пред да го извршите git commit.It користи едноставна конфигурациска датотека за да ги фати грешките, спречувајќи ги да влезат во базата на кодови и да ве спаси од неуспешни изградби на цевки.
featured image - Вашата прва линија на одбрана за чист код е претприемништвото: како да го поставите
Alexandre Couedelo HackerNoon profile picture

Дали некогаш случајно сте ги туркале тајните во складиштето? Или можеби сте го туркале неформатираниот код, само за да морате да креирате натамошен "линтинг" коммис? Сите сме биле таму.


Git приклучоците се моќна алатка за спречување на овие проблеми со извршување на скрипти пред да се ангажирате или притиснете. сепак, споделувањето и стандардизирањето на овие приклучоци низ тим или проект може да биде предизвик.


Pre-commit е лесна за користење рамка за управување и споделување на повеќејазични git хакови, помагајќи ви да ги фатите проблемите пред дури и да ја напуштат вашата работна станица.

Започнување: Правилното поставување

Пред да можете да ја искористите моќта на пред-завршување, треба да го инсталирате и конфигурирате за вашите проекти.

Инсталација

Постојат неколку начини да го инсталирате Pre-Commit:

  • macOS и Linux:
brew install pre-commit
  • Python/Pip (преку платформа):
pip install pre-commit
  • Други методи: За инсталации со користење на Conda или на Windows, ве молиме погледнете ја Официјалната документација.
Официјална документација

Проектно-специфично поставување (Стандардниот начин)

Ова е најчестиот пристап за овозможување на пред-завршување во одреден проект:

  1. Create a Configuration File: In the root of your repository, create a file named .pre-commit-config.yaml. This file will define the hooks pre-commit should run. (We’ll cover how to populate this file in the next section).


  2. Install Hooks: Navigate to your repository’s root directory in your terminal and run:

pre-commit install
  1. Оваа команда ги инсталира git hooks во директориумот .git/hooks на вашиот репозиториум. Од сега натаму, pre-commit автоматски ќе ги изврши своите чекови пред секој коммит што го правите во овој специфичен репозиториум.

Глобална поставеност (метод на поставување и заборавајте го)

Ако често започнувате нови проекти или клонирате репозиториуми и сакате претприемникот да биде активен по дефолт (ако постои конфигурација), можете да го поставите глобално.init.templateDirФункција на .


  1. A Configuration File: All your repository must have a .pre-commit-config.yaml. This file will define the hooks that pre-commit should run. The best would be to use a template repository with a minimal pre-commit file.


  2. Configure Git’s Template Directory: Tell Git to use a specific directory as a template for new repositories:

git config --global init.templateDir ~/.git-template

(Можете да изберете поинаков директориум ако сакате, само бидете сигурни дека е конзистентен во следниот чекор.)


Инициализирајте Pre-commit во директориумот на шаблони: Извршете ја следната команда:

pre-commit init-templatedir ~/.git-template

(Ако сте избрале поинаков директориум во претходниот чекор,~/.git-templateСоодветно на тоа.)


Ова има голема предност: Со оваа глобална поставка, секој нов репозиториум што го иницијализирате (git init) или клонот автоматски ќе го инсталира приклучокот за претходна задача..pre-commit-config.yamlдатотеката, пред-заедникот едноставно нема да направи ништо, па затоа е безбедно да се овозможи глобално.


Сепак, ми се допаѓа да одам еден чекор понатаму со додавање на приклучок по дефолт~/.git-template/hooks/pre-commitтоа систематски би пропаднало ако репозиториумот нема.pre-commit-config.yamlЕве ја содржината на хаубата.

#!/usr/bin/env bash
if [ -f .pre-commit-config.yaml ]; then
    echo 'pre-commit configuration detected, but `pre-commit install` was never run' 1>&2
    exit 1
fi

Изградба на вашата конфигурација (.pre-commit-config.yaml)

Срцето на претприемништвото е.pre-commit-config.yamlОваа датотека, поставена на коренот на вашиот репозиториум, кажува пред-коммит кој проверува да се изврши.

# https://github.com/xNok/infra-bootstrap-tools/blob/main/.pre-commit-config.yaml
repos:
  # Lint all yam files
  - repo: https://github.com/adrienverge/yamllint.git
    rev: v1.29.0
    hooks:
      - id: yamllint
  # Runs Ansible lint
  - repo: https://github.com/ansible/ansible-lint
    rev: v24.7.0
    hooks:
      - id: ansible-lint
        args:
          - "ansible"
        additional_dependencies:
          - ansible

Основна структура објаснето

Типична конфигурација вклучува листа на репозиториуми, секоја со специфични куки:

  • repos: Ова е клуч на највисоко ниво кој зема листа на репозиториски мапирање. Секој елемент во листата укажува на Git репозиториум кој содржи пред-коммитски хакови.


  • repo: URL на складиштето хостирање на приклучоците (на пример, https://github.com/pre-commit/pre-commit-hooks). Ова е многу добар начин за управување со зависности. Кога ќе знаете повеќе за алатката, можете да одите на складиштето.


  • Rev: Таа ја одредува верзијата на приклучоците што треба да се користат, со врзување на или Git таг, SHA или гранка. Но, се препорачува секогаш да се користи одредена ознака или SHA (не гранка како мајстор) за да се осигура дека вашето поврзување не се распаѓа неочекувано кога оддалечениот репозиториум се ажурира.


  • Hooks: Листа под секој репо запис. Секој елемент овде дефинира специфичен приклучок за користење од тој репозиториум.


  • id: Уникатен идентификатор на кукот (на пример, trailing-whitespace, check-yaml). Можете да ги најдете достапните идентификатори на кукот во документацијата за складиштето на кукот. или едноставно .pre-commit-hooks.yaml на коренот на репото.

Практична почетна конфигурација

Еве една основна.pre-commit-config.yamlЗа овој пример, ви препорачувам да одите на Github и да погледнетеpre-commit/pre-commit-hooks/blob/main/.pre-commit-hooks.yamlОва е листа на едноставни хокеи коиpre-commitтимот е имплементиран, и каде можете да најдете наidод секој од релевантните хауби што може да сакате да ги користите.

Pre-commit-hooks / Pre-commit-hooks / Pre-commit-hooks / Pre-commit-hooks / Pre-commit-hooks / Pre-commit-hooks


Јас би реколtrailing-whitespaceиend-of-file-fixerсе навистина корисни, така што конфигурацијата ќе изгледа вака.

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0  # Check for the latest stable version on the pre-commit-hooks repo!
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
# Add other repositories and their specific hooks below
# -   repo: ...
#     rev: ...
#     hooks:
#     -   id: ...

Забелешка: Верзиите за приклучоци се менуваат со текот на времето. Добро е понекогаш да се провериpre-commit-hooksрепозиториумот (или било кој друг репозиториум за приклучување што го користите) за најновата ознака за стабилна верзија и ажурирање наrevИли имаат автоматизација на место, како Renovate или Dependabot, за да ги ажурирате редовно.


Можете да најдете голема листа на претходно постоечки куки наВеб-страница на претпријатиетоОд моето искуство, оваа листа е далеку од исцрпувачка; наместо тоа, јас претпочитам да ги проверам алатките што сакам да ги користам.pre-commit-hooks.yamlПогледнете дали има хокеисти.

Веб-страница на претпријатието

Добро да се знае кога да се користи Pre-Commit

Откако ќе се чувствувате удобно со основите, претплатата нуди повеќе напредни функции за фино прилагодување на вашиот работен тек.

Ручно вртење на кучињата

Додека хокеите автоматски работат наgit commit, можеби ќе сакате да ги активирате рачно во други времиња:

  • Извршете одредена кука: За да извршите една кука (на пример, да ја тестирате нејзината конфигурација или да ги примените нејзините промени без да се ангажирате), користете:
pre-commit run <hook_id>


Замена на<hook_id>со вистинскиот ИД од вашата конфигурациска датотека.)

  • Извршете ги сите датотеки: За да ги извршите сите конфигурирани приклучоци на секоја проследена датотека во вашиот репозиториум (не само фазирани промени), користете:
pre-commit run --all-files


Ова е корисно за почетно чистење или при додавање на нови куки во постоечки проект.

Креирање на сопствени локални куки

Понекогаш, може да имате специфични за проектот скрипти или чекови кои не се дел од јавен складиште за приколки.

  1. Напишете го вашиот скрипт: Креирајте го вашиот скрипт (на пример, скрипт за школки, скрипт за Python) во вашиот депозитар. За овој пример, да речеме дека креирате my_custom_script.sh.
  2. Дефинирање во .pre-commit-config.yaml: Додадете локален влез за приколка во вашата конфигурација:
# .pre-commit-config.yaml
-   repo: local
    hooks:
    -   id: my-custom-check
        name: My custom check
        entry: ./my_custom_script.sh # Path to your script
        language: script             # Or python, node, etc.
        files: \.(py)$               # Example: regex to run only on Python files
        # verbose: true              # Uncomment for more output
        # args: [--custom-arg]       # Optional arguments for your script

Ова кажува пред-заедница да се кандидираmy_custom_script.shза сите промени во Python (.pyдатотеки. наlanguage: scriptТипот е многу флексибилен; за специфични средини како што се Python или Node, можете да ги наведете оние за управување со зависности доколку е потребно.bashХокеј


Сепак, претплатата е многу паметна во однос на работните средини, бидејќи создава изолирана средина за работно време за алатките и потребните зависности.


Не сите куки, за жал, ја искористија функцијата за зависност, и можеби ќе треба сами да ги инсталирате алатките за да можете да го покренете кукот (мислам на терраформ, на пример)

Пред-ангажирање во тим и CI / CD животната средина

Додека претпријатието блеска на индивидуалните машини на програмерите, неговите придобивки се множат кога се интегрираат во тимските работни процеси и CI/CD цевките. Дури и со локално инсталирани предпријатнички куки, некој може случајно да се ангажира без куки (на пример, користејќиgit commit --no-verify) или имаат застарена конфигурација на кука. Вашиот CI / CD цевка може да дејствува како конечен чувар.


Со извршување на проверките за пред-завршување во вашата CI цевка, ќе се осигурате дека нема да се спои код кој ги крши стандардите на вашиот проект.

pre-commit run --all-files


Оваа команда ги проверува сите датотеки во репозиториумот, а не само промените, обезбедувајќи сеопфатна валидација.


Концептуални CI Pipeline чекор (на пример, GitHub акции):

# Example for a GitHub Actions workflow
# ... (other steps like checkout, setup python/node, etc.)
- name: Install pre-commit and dependencies
  run: |
    pip install pre-commit
    # Install any other dependencies your hooks might need (e.g., linters)
    # This might be minimal if your hooks install their own dependencies (common).
- name: Run pre-commit checks
  run: pre-commit run --all-files


Убаво е да имате концептуална цевка која работи со било кој CI систем, но ако користите акции на GitHub, не треба да се грижите; користете гоОфицијална акција.

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v3
    - uses: pre-commit/action@v3.0.1


Со интегрирањето на CI, циклусот е завршен и истата валидација се применува во средините на програмерите како и во средината на CI.

Заклучок

За да се реализира тамуимаЗа да биде подобар начин отколку рачните проверки и "опс" ангажира, ние истраживме како тоа може да се направи.pre-commitТрансформирајте го вашиот работен тек за развој.


Со автоматизирање на проверките за сè, од грешки во белиот простор и тајно откривање до форматирање на кодот и лентирање, пред-коммит дејствува како вашиот неуморен локален чувар на квалитетот на кодот кој дури може да се интегрира "бесконечно" во цевките на CI / CD за да послужи како крајна врата за квалитет.

L O A D I N G
. . . comments & more!

About Author

Alexandre Couedelo HackerNoon profile picture
Alexandre Couedelo@alexcouedelo
Tech Writer && DevOps && Maker Write about DevOps, Security, DevXP, and Mechanical Keyboards

ВИСЕТЕ ТАГОВИ

ОВОЈ СТАТИЈА БЕШЕ ПРЕТСТАВЕН ВО...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks