කවදා හෝ අසාමාන්යව රහසිගත කිරීම් තැන්පතුවට තල්ලු කර තිබේද? හෝ සමහර විට ඔබ අසාමාන්ය කේතය තල්ලු කර ඇති අතර, පසුපසින් "ලෙන්ට්" කොමිසමක් නිර්මාණය කිරීමට අවශ්යද? අපි හැමෝම එහි සිටියා.
Git Hooks යනු මෙම ගැටළු වළක්වා ගැනීම සඳහා ශක්තිමත් මෙවලමක් වන අතර, ඔබ ගනුදෙනු කිරීමට හෝ ප්රවේශ කිරීමට පෙර ස්ක්රිප්ට් ක්රියාත්මක කිරීමෙන් මෙම ගැටළු වළක්වා ගත හැකිය.
Pre-commit යනු බොහෝ භාෂා Git Hooks කළමනාකරණය කිරීම සහ බෙදාහැරීම සඳහා භාවිතා කිරීමට පහසු ක්රමයක් වන අතර, ඔවුන් ඔබගේ වැඩපිළිවෙළෙන් ඉවත් වීමට පෙර ගැටළු සොයා ගැනීමට ඔබට උපකාරී වේ.
ආරම්භ කිරීම: නිවැරදි ස්ථාපනය
Pre-commit හි ශක්තිය භාවිතා කිරීමට පෙර, ඔබ එය ස්ථාපනය හා ඔබේ ව්යාපෘති සඳහා සකස් කළ යුතුය.
ස්ථාපනය
ඔබ pre-commit ස්ථාපනය කිරීමට ක්රම කිහිපයක් ඇත:
- macOS සහ Linux:
brew install pre-commit
- Python/Pip (සංස්කරණය සඳහා):
pip install pre-commit
- වෙනත් ක්රම: Conda භාවිතා කිරීම සඳහා හෝ Windows මත ස්ථාපනය කිරීම සඳහා, කරුණාකර Official Documentation වෙත යොමු කරන්න.
ව්යාපෘති විශේෂ සැකසුම් (The Standard Way)
විශේෂිත ව්යාපෘතියක pre-commit කිරීමට වඩාත් පොදු ප්රවේශය මෙයයි:
-
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).
-
Install Hooks: Navigate to your repository’s root directory in your terminal and run:
pre-commit install
- මෙම නියෝගයෙන් git hooks ස්ථාපනය කරනු ලැබේ. .git/hooks මාතෘකාව. අද සිට, pre-commit ස්වයංක්රීයව ඔබ මෙම විශේෂිත මාතෘකාව තුළ සිදු කරන සෑම commit එකකට පෙර එහි පරීක්ෂණ ක්රියාත්මක කරනු ඇත.
Global Setup (The “Set It and Forget It” Method)
ඔබ නිතරම නව ව්යාපෘති ආරම්භ කිරීමට හෝ ප්රොටෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝපෝරෝරෝපෝරෝinit.templateDir
පින්තූර
-
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.
-
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 in the Template Directory: මෙහෙයුම ක්රියාත්මක කරන්න:
pre-commit init-templatedir ~/.git-template
(පසුගිය පියවරේදී ඔබ වෙනස් ලිපිනය තෝරා ගත්තොත්,~/.git-template
ඒ අනුව )
මෙම ප්රතිලාභය විශාල ප්රතිලාභයක් ඇත: මෙම ගෝලීය ස්ථාපනය සමඟ, ඔබ ආරම්භ කරන ලද නව රබන්ධය (git init
) හෝ ක්ලෝන් ස්වයංක්රීයව pre-commit's hook ස්ථාපනය කරනු ඇත..pre-commit-config.yaml
file, pre-commit කිසිවක් නොකරයි, එබැවින් එය ගෝලීයව ක්රියාත්මක කිරීම ආරක්ෂිත වේ.
කෙසේ වෙතත්, මම ආකෘති හුවමාරුවක් එකතු කිරීමෙන් තවත් පියවරක් යන්න කැමතියි~/.git-template/hooks/pre-commit
එය පද්ධතිගතව අසාර්ථක වනු ඇත නම්, Repository has no.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 එකේ හදවත තමයි.pre-commit-config.yaml
File.This file, placed at the root of your repository, tells pre-commit which checks to run.
# 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
මූලික ව්යුහය පැහැදිලි කිරීම
සාමාන් ය සැකසුම සඳහා, සෑම විටම විශේෂිත හවුල් සහිත තැන්පතු ලැයිස්තුවක් ඇතුළත් වේ:
- Repo: මෙය ප්රධාන මට්ටමේ යතුරකි.මේ ලැයිස්තුවේ සෑම ලැයිස්තුවක්ම pre-commit hooks ඇතුළත් වන Git repository ලැයිස්තුවක් හඳුන්වනවා.
- ප්රතිපත්තිය: ප්රතිපත්තිය හුවමාරු කරන URL (උදාහරණයක් ලෙස, https://github.com/pre-commit/pre-commit-hooks). මෙම ප්රතිපත්තිය කළමනාකරණය කිරීමට ඉතා හොඳ ක්රමයකි. මෙවලම ගැන වැඩි විස්තර දැනගත් විට, ඔබට ප්රතිපත්තිය වෙත යන්න පුළුවන්.
- rev: එය Git ටැග්, SHA, හෝ අර්බුදයට පිං කිරීමෙන් භාවිතා කළ යුතු හුවමාරු වල අනුවාදය හඳුන්වනු ලබයි.එහෙත් ඔබට සෑම විටම සෘජු ටැග් හෝ SHA (මැස් වැනි අර්බුදයක් නොවේ) භාවිතා කිරීමට යෝජනා වේ ඔබේ ලින්ටන් එක අනපේක්ෂිතව අතුරුදහන් නොවී ඇති බව සහතික කිරීම සඳහා දුරස්ථ තැන්පතු යාවත්කාලීන කිරීම.
- සෑම repo ලැයිස්තුවක් යටතේ ලැයිස්තුවක්. මෙහි සෑම ලැයිස්තුවක්ම එම තැන්පතුවෙන් භාවිත කළ යුතු සංකේතයක් සංකේත කරයි.
- id: හුවමාරුව (උදාහරණයක් ලෙස, trailing-whitespace, check-yaml) සඳහා සුවිශේෂී අනන් යතාවය. ඔබ හුවමාරුව ලැයිස්තුවේ ලබා ගත හැකි හුවමාරුව IDs සොයා ගත හැකිය.
ආරම්භක පරිගණකයක්
මෙන්න මූලික.pre-commit-config.yaml
ඔබ ආරම්භ කිරීමට.මේ උදාහරණයක් සඳහා, මම ඔබට Github වෙත යන්න සහ බලන්න උපදෙස්pre-commit
කණ්ඩායම ක්රියාත්මක කර ඇති අතර, ඔබ සොයා ගත හැකි ස්ථානයid
ඔබ භාවිතා කිරීමට අවශ්ය ඕනෑම ප්රතිලාභයක්.
මම කියනවා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: ...
Note: Hooks සඳහා අනුවාදය කාලයත් සමග වෙනස් වේ.It is good practice to occasionally check thepre-commit-hooks
නවතම ස්ථාවර අනුවාදය ටැග් සඳහා repository (හෝ ඔබ භාවිතා කරන ඕනෑම අනෙකුත් Hook repositories) සහ ඔබගේrev
නැත්නම් Renovate හෝ Dependabot වැනි ස්වයංක්රියාකාරකම් ස්ථාපිත කර ඇති අතර, ඒවා නිතරම යාවත්කාලීන කරන්න.
ඔබ සොයා ගත හැකි විශාල ලැයිස්තුවක් pre-existing hooks මත.pre-commit-hooks.yaml
Hocks ලෑස්තිද කියලා බලන්න.
Pre-Commit භාවිතා කරන විට දැන ගැනීමට හොඳයි
ඔබ මූලිකයන් සමඟ පහසුවෙන් සිටියහොත්, pre-commit ඔබේ රැකියාව ක්රියාත්මක කිරීම සඳහා වඩාත් උසස් විශේෂාංග ලබා දෙයි.
මෑන්සින් Hooks Running
Hooks ස්වයංක්රීයව ක් රියාත්මක වන විටgit commit
, ඔබට වෙනත් අවස්ථාවලදී ඔවුන් අත්හදා බැලීමට අවශ්ය විය හැකිය:
- නිශ්චිත හුවමාරුව ක්රියාත්මක කිරීම: එක් හුවමාරුව ක්රියාත්මක කිරීම සඳහා (උදාහරණයක් ලෙස, එහි සැකසුම් පරීක්ෂා කිරීම හෝ එහි වෙනස්කම් ක්රියාත්මක කිරීමකින් තොරව), භාවිතා කරන්න:
pre-commit run <hook_id>
මාරු කිරීම<hook_id>
ඔබගේ සැකසුම් ගොනුවෙහි සැබෑ ID සමඟ.)
- සියලුම ගොනු මත ක්රියාත්මක කිරීම: ඔබගේ ප්රතිපත්තිය තුළ සෑම tracked ගොනුවකටම සකස් කරන ලද සියලුම හවුල් ක්රියාත්මක කිරීම සඳහා (ඔබේ ප්රතිපත්තියේ වෙනස්කම් පමණක් නොව), භාවිතා කරන්න:
pre-commit run --all-files
මෙය ආරම්භක පිරිසිදු කිරීම සඳහා හෝ පවතින ව්යාපෘතියට නව හවුල් එකතු කිරීම සඳහා ප්රයෝජනවත් වේ.
ඔබේම දේශීය Hooks නිර්මාණය කිරීම
සමහර වෙලාවට, ඔබ ව්යාපෘති-පෞද්ගලික ස්ක්රිප්ට් හෝ පරීක් ෂණ ඇති අතර, එය පොදු හුවමාරු ලැයිස්තුවේ කොටසක් නොවේ.Pre-commit ඔබට "ලෝකීය" හුවමාරු සකසන්න හැකිය.
- ඔබේ ස්ක් රිප්ටරය ලිවීම: ඔබේ ස්ක් රිප්ටරය නිර්මාණය කරන්න (උදාහරණයක් ලෙස, ෂෙල් ස්ක් රිප්ටරය, Python ස්ක් රිප්ටරය) ඔබේ තැන්පතුවේ. මෙම උදාහරණයක් සඳහා, my_custom_script.sh නිර්මාණය කරමු.
- Defines in .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
Pre-commit to Run යනුවෙන් පවසයිmy_custom_script.sh
Python හි ඕනෑම වෙනසක් සඳහා (.py
ෆයිල්ස් - Thelanguage: script
වර්ගය ඉතා මෘදුකාංගයකි; Python හෝ Node වැනි විශේෂ පරිසරයන් සඳහා, ඔබට අවශ්ය නම් ආකර්ෂණය කළමනාකරණය කිරීම සඳහා ඒවා හඳුනා ගත හැකිය.bash
හූස්
කෙසේ වෙතත්, pre-commit වැඩපිළිවෙළ සම්බන්ධයෙන් ඉතා බුද්ධිමත් වන අතර, එය මෙවලම් සහ අවශ්ය සබඳතා සඳහා තනි runtime පරිසරයක් නිර්මාණය කරයි.
අවාසනාවකට මෙන්, සියලුම හුවමාරු ප්රයෝජනවත් කර ඇති අතර, හුවමාරු ක්රියාත්මක කිරීම සඳහා ඔබම මෙවලම් ස්ථාපනය කළ යුතුය (මම උදාහරණයක් ලෙස terraform ගැන හිතනවා)
කණ්ඩායම් සහ CI / CD පරිසරය තුළ පෙර කැපවීම
තනි සංවර්ධක යන්ත්ර මත pre-commit ආලෝකය වන අතර, එහි ප්රතිලාභ කණ්ඩායම් රැකියාව ක්රියාකාරකම් හා CI / CD පයිප්ලයින් ඇතුළත් කරන විට ප්රමාණවත් වේ.git commit --no-verify
ඔබගේ CI / CD pipeline Ultimate GateKeeper ලෙස ක්රියා කළ හැකිය.
CI pipeline වල pre-commit checks ක්රියාත්මක කිරීමෙන්, ඔබ ඔබේ ව්යාපෘතියේ ප්රමිතීන් විරෝධී කේතයක් එකතු නොකිරීමට වග බලා ගන්න.
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 පද්ධතිය සමඟ වැඩ කරන අර්ථකථන pipeline එකක් ඇති කිරීම හොඳයි, නමුත් ඔබ 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 පරිසරය තුළ මෙන්ම සංවර්ධක පරිසරය තුළත් සමාන සහතික කිරීමක් යොදා ගනී.If the pipeline fails, fix it local by running pre-commit.
ප් රතිඵල
අවබෝධය එහිඇතිඅත්හදා බැලීම් සහ "Oops" කොන්දේසි වලට වඩා හොඳ ක්රමයක් බවට පත්වීම සඳහා, අපි එය කරන්නේ කෙසේදැයි සොයා බැලුවා.pre-commit
ඔබේ වැඩපිළිවෙළ සංවර්ධනය කරන්න
whitespace වැරදි සහ රහසිගත හඳුනාගැනීම සිට කේත ආකෘති කිරීම සහ ලින්ටන් කිරීම දක්වා සියලුම දේ සඳහා ස්වයංක්රීයව පරීක්ෂා කිරීමෙන්, pre-commit කේත තත්ත්වයේ නුසුදුසු දේශීය ආරක්ෂකයා ලෙස ක්රියා කරයි.