Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

🧩 Git pre-commit: ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ «страТа ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²Β» Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π° Π½Π΅ Π²Ρ€Π°Π³ΠΎΠΌ

Git-Ρ…ΡƒΠΊΠΈ β€” это малСнькиС скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… дСйствиях Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ особСнно Π²Π°ΠΆΠ½Ρ‹ΠΉ: pre-commit. Он срабатываСт ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ способСн ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Ρ‚Ρ‹ случайно Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² ΠΊΠΎΠ΄ API-ΠΊΠ»ΡŽΡ‡, Π½Π΅ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» Python-Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ оставил слСд ΠΎΡ‚ console.log(). Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ β€œDiscussion of the Benefits and Drawbacks of the Git Pre-Commit Hook” ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π₯аннСс Π›ΠΎΠΉΡ‚Π»ΠΎΡ„Ρ„ (Hannes Leutloff) ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΌΡƒ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ…ΡƒΠΊΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ β€” ΠΈ считаСт, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройкС ΠΎΠ½ΠΈ становятся Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ…ΠΎΠΉ, Π° Ρ‡Π°ΡΡ‚ΡŒΡŽ Β«ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сборки» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Бамая очСвидная польза pre-commit β€” это Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Он β€” послСдняя линия ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² Git-ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.
Π”Π°ΠΆΠ΅ Ссли Ρƒ тСбя стоит .gitignore, случайно Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ config.yaml с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ OpenAI ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ SSH-ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ каТСтся.
ОглавлСниС

Git-Ρ…ΡƒΠΊΠΈ β€” это малСнькиС скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… дСйствиях Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ особСнно Π²Π°ΠΆΠ½Ρ‹ΠΉ: pre-commit. Он срабатываСт ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈ способСн ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Ρ‚Ρ‹ случайно Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² ΠΊΠΎΠ΄ API-ΠΊΠ»ΡŽΡ‡, Π½Π΅ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» Python-Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ оставил слСд ΠΎΡ‚ console.log().

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ β€œDiscussion of the Benefits and Drawbacks of the Git Pre-Commit Hook” ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π₯аннСс Π›ΠΎΠΉΡ‚Π»ΠΎΡ„Ρ„ (Hannes Leutloff) ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΌΡƒ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ…ΡƒΠΊΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ β€” ΠΈ считаСт, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройкС ΠΎΠ½ΠΈ становятся Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ…ΠΎΠΉ, Π° Ρ‡Π°ΡΡ‚ΡŒΡŽ Β«ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ сборки» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

πŸ›‘οΈ Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ

Бамая очСвидная польза pre-commit β€” это Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Он β€” послСдняя линия ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² Git-ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.
Π”Π°ΠΆΠ΅ Ссли Ρƒ тСбя стоит .gitignore, случайно Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ config.yaml с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ OpenAI ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ SSH-ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ каТСтся.

πŸ•΅οΈ Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ инструмСнты Π²Ρ€ΠΎΠ΄Π΅ Gitleaks, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с pre-commit ΠΈ ΡΠΊΠ°Π½ΠΈΡ€ΡƒΡŽΡ‚ измСнСния Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сСкрСтов (ΠΏΠΎ рСгуляркам, прСфиксам, ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² AWS, GitHub ΠΈ Ρ‚.Π΄.).

⚑ Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ½ΠΈ быстро ΠΈ практичСски Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, особСнно Ссли ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (--staged).

πŸ’‘ Мой ΠΎΠΏΡ‹Ρ‚: Π΄ΠΎΠ±Π°Π²ΠΈΠ² Gitleaks Π² pre-commit, я ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ «спас» ΠΊΠΎΠ»Π»Π΅Π³Ρƒ ΠΎΡ‚ случайной ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ git filter-repo ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

🎨 Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³ β€” быстро ΠΈ Π±Π΅Π· Π±ΠΎΠ»ΠΈ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ частый кСйс β€” Π°Π²Ρ‚ΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π»Ρ‘Π³ΠΊΠΈΠΉ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³.
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ black, isort, eslint --fix, prettier ΠΈΠ»ΠΈ nixfmt ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ автоматичСски ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅.

🧰 Π­Ρ‚ΠΎ экономит врСмя ΠΈ Π½Π΅Ρ€Π²Ρ‹:

  • πŸͺ„ Код всСгда Π² ΠΎΠ΄Π½ΠΎΠΌ стилС, Π±Π΅Π· споров Β«Π³Π΄Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΏΡΡ‚ΡƒΡŽΒ».
  • πŸ” CI Π½Π΅ ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° Π΅Ρ€ΡƒΠ½Π΄Ρ‹, вСдь Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исправляСтся Π΄ΠΎ ΠΏΡƒΡˆΠ°.
  • πŸ’¬ МСньшС Π»ΠΈΡˆΠ½ΠΈΡ… Π΄ΠΈΡ„Ρ„ΠΎΠ² Π² PR, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Но Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: Ρ‡Π΅ΠΌ большС инструмСнтов Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΡˆΡŒ, Ρ‚Π΅ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚.

πŸ‘‰ РСкомСндация Π›ΠΎΠΉΡ‚Π»ΠΎΡ„Ρ„Π°:
оставляй Π² pre-commit Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹, Π»Ρ‘Π³ΠΊΠΈΠ΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹),
Π° тСсты ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ· β€” ΠΏΡƒΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² CI.

🐌 Когда pre-commit Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Ρ‚ΡŒ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ дСсятки ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² дСнь β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, фиксит вСрстку ΠΈΠ»ΠΈ тСстируСт Π»ΠΎΠ³ΠΈΠΊΡƒ. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΆΠ΄Ρ‘Ρ‚ ΠΏΠΎΠ»ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт прСвращаСтся Π² Π±ΡŽΡ€ΠΎΠΊΡ€Π°Ρ‚ΠΈΡŽ.

🧱 ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

  • ⏳ долгая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ тСстов;
  • 🚫 Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΎΠΉ (Β«work in progressΒ») ΠΊΠΎΠΌΠΌΠΈΡ‚;
  • πŸ™ˆ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠ° Β«ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈΒ» Ρ‡Π΅Ρ€Π΅Π· --no-verify.

βš™οΈ РСшСниС β€” баланс:
ΠΎΡΡ‚Π°Π²ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самыС быстрыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ,
Π° всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” выноси Π½Π° push ΠΈΠ»ΠΈ CI.

πŸ’Ό ΠŸΡ€ΠΎΡΡ‚Π°Ρ установка β€” Π·Π°Π»ΠΎΠ³ успСха

Π₯ΡƒΠΊΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² сам Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” ΠΏΠ°ΠΏΠΊΠ° .git/hooks Π½Π΅ отслСТиваСтся систСмой контроля вСрсий. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ это Π½Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π² боль, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ инструмСнты:

🧩 Pre-Commit β€” популярный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ…ΡƒΠΊΠΎΠ² Π½Π° Python.
Он Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² .pre-commit-config.yaml, ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ зависимости ΠΈ автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ вСрсии инструмСнтов.

πŸ¦€ Prek β€” пСрСписанная Π½Π° Rust вСрсия Pre-Commit, Π΅Ρ‰Ρ‘ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π½ΠΎ быстрая.

🌳 Husky β€” Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для JavaScript/TypeScript-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (устанавливаСтся Ρ‡Π΅Ρ€Π΅Π· npm).

πŸ§™β€β™‚οΈ А Π°Π²Ρ‚ΠΎΡ€ ΡΡ‚Π°Ρ‚ΡŒΠΈ совСтуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ devenv (Π½Π° Π±Π°Π·Π΅ Nix) β€” систСму для описания ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ pre-commit настраиваСтся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ.
Команда devenv test ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сразу, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ…ΡƒΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для CI/CD.

🧠 Мой взгляд: pre-commit β€” ΠΊΠ°ΠΊ IDE Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ…ΡƒΠΊΠΈ всё большС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ «встроСнного ассистСнта» β€” ΠΎΠ½ΠΈ Π½Π΅ просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΊΠΎΠ΄, Π° Π΄Π΅Π»Π°ΡŽΡ‚ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‰ΠΈΠΌΡΡ.
Π― Π±Ρ‹ сравнил ΠΈΡ… с
Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ IDE: Ссли IDE подсказываСт Ρ‚Π΅Π±Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ pre-commit Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ошибка Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

πŸ€– ОсобСнно интСрСсно выглядит идСя ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с ИИ:
Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ pre-commit ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ просто Π»ΠΈΠ½Ρ‚ΠΈΡ‚ΡŒ, Π°
ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π²ΠΎΠΉ кусок ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасСн ΠΈΠ»ΠΈ нСэффСктивСн.
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒ: Git отклоняСт ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ β€”

«🚨 Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠ° Ρ‚ΠΎΠΊΠ΅Π½Π° Π² строкС 42. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ .env.example.Β»

Π’Π°ΠΊΠΈΠ΅ Β«ΡƒΠΌΠ½Ρ‹Π΅Β» Ρ…ΡƒΠΊΠΈ прСвратят Git ΠΈΠ· статичного инструмСнта Π² ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€Π° ΠΏΠΎ бСзопасности ΠΈ качСству.

🧾 Π’Ρ‹Π²ΠΎΠ΄

Π₯ΡƒΠΊ pre-commit β€” Π½Π΅ инструмСнт контроля, Π° инструмСнт довСрия. Он ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅, ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ бСзопаснСС, Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ β€” спокойнСС. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ быстрым, минималистичным ΠΈ прСдсказуСмым.

🧠 ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ…ΡƒΠΊΠΎΠ²:
πŸ”’ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сСкрСтов (Gitleaks);
🎨 Π°Π²Ρ‚ΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (black, prettier, nixfmt);
⚑ Π»Ρ‘Π³ΠΊΠΈΠ΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹ (ruff, eslint --fix).

А всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ β€” тСсты, сборка, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ β€” ΠΏΡƒΡΡ‚ΡŒ ΠΆΠΈΠ²Ρ‘Ρ‚ Π² CI.

πŸ“š Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ ΠΈ ссылки: