කවදා හෝ අසාමාන්යව රහසිගත කිරීම් තැන්පතුවට තල්ලු කර තිබේද? හෝ සමහර විට ඔබ අසාමාන්ය කේතය තල්ලු කර ඇති අතර, පසුපසින් "ලෙන්ට්" කොමිසමක් නිර්මාණය කිරීමට අවශ්යද? අපි හැමෝම එහි සිටියා. 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 . This file will define the hooks pre-commit should run. (We’ll cover how to populate this file in the next section). .pre-commit-config.yaml 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 . 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. .pre-commit-config.yaml 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 මෙම ප්රතිලාභය විශාල ප්රතිලාභයක් ඇත: මෙම ගෝලීය ස්ථාපනය සමඟ, ඔබ ආරම්භ කරන ලද නව රබන්ධය ( ) හෝ ක්ලෝන් ස්වයංක්රීයව pre-commit's hook ස්ථාපනය කරනු ඇත. file, pre-commit කිසිවක් නොකරයි, එබැවින් එය ගෝලීයව ක්රියාත්මක කිරීම ආරක්ෂිත වේ. git init .pre-commit-config.yaml කෙසේ වෙතත්, මම ආකෘති හුවමාරුවක් එකතු කිරීමෙන් තවත් පියවරක් යන්න කැමතියි එය පද්ධතිගතව අසාර්ථක වනු ඇත නම්, Repository has no මෙන්න හූගේ අන්තර්ගතය. ~/.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 එකේ හදවත තමයි File.This file, placed at the root of your repository, tells pre-commit which checks to run. .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 මූලික ව්යුහය පැහැදිලි කිරීම සාමාන් ය සැකසුම සඳහා, සෑම විටම විශේෂිත හවුල් සහිත තැන්පතු ලැයිස්තුවක් ඇතුළත් වේ: 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 සොයා ගත හැකිය. ආරම්භක පරිගණකයක් මෙන්න මූලික ඔබ ආරම්භ කිරීමට.මේ උදාහරණයක් සඳහා, මම ඔබට Github වෙත යන්න සහ බලන්න උපදෙස් මෙන්න මේ සරල හවුල් වල ලැයිස්තුව කණ්ඩායම ක්රියාත්මක කර ඇති අතර, ඔබ සොයා ගත හැකි ස්ථානය ඔබ භාවිතා කිරීමට අවශ්ය ඕනෑම ප්රතිලාභයක්. .pre-commit-config.yaml pre-commit/pre-commit-hooks/blob/main/.pre-commit-hooks.yaml ප්රවෘත්ති pre-commit id pre-commit/pre-commit-hooks/blob/main/.pre-commit-hooks.yaml ප්රවෘත්ති මම කියනවා සහ ඇත්ත වශයෙන්ම, එය සැබවින්ම ප්රයෝජනවත් වේ, එබැවින් සංයුක්තය මේ ආකාරයට පෙනේ. 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 the නවතම ස්ථාවර අනුවාදය ටැග් සඳහා repository (හෝ ඔබ භාවිතා කරන ඕනෑම අනෙකුත් Hook repositories) සහ ඔබගේ නැත්නම් Renovate හෝ Dependabot වැනි ස්වයංක්රියාකාරකම් ස්ථාපිත කර ඇති අතර, ඒවා නිතරම යාවත්කාලීන කරන්න. pre-commit-hooks rev ඔබ සොයා ගත හැකි විශාල ලැයිස්තුවක් pre-existing hooks මත මගේ අත්දැකීම් වලින්, මෙම ලැයිස්තුව සම්පූර්ණ නොවේ; වෙනුවට, මම භාවිතා කිරීමට කැමති මෙවලම් පරීක්ෂා කිරීමට කැමතියි Hocks ලෑස්තිද කියලා බලන්න. Pre-commit වෙබ් අඩවිය .pre-commit-hooks.yaml Pre-commit වෙබ් අඩවිය Pre-Commit භාවිතා කරන විට දැන ගැනීමට හොඳයි ඔබ මූලිකයන් සමඟ පහසුවෙන් සිටියහොත්, pre-commit ඔබේ රැකියාව ක්රියාත්මක කිරීම සඳහා වඩාත් උසස් විශේෂාංග ලබා දෙයි. මෑන්සින් Hooks Running Hooks ස්වයංක්රීයව ක් රියාත්මක වන විට , ඔබට වෙනත් අවස්ථාවලදී ඔවුන් අත්හදා බැලීමට අවශ්ය විය හැකිය: git commit නිශ්චිත හුවමාරුව ක්රියාත්මක කිරීම: එක් හුවමාරුව ක්රියාත්මක කිරීම සඳහා (උදාහරණයක් ලෙස, එහි සැකසුම් පරීක්ෂා කිරීම හෝ එහි වෙනස්කම් ක්රියාත්මක කිරීමකින් තොරව), භාවිතා කරන්න: pre-commit run <hook_id> මාරු කිරීම ඔබගේ සැකසුම් ගොනුවෙහි සැබෑ ID සමඟ.) <hook_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 යනුවෙන් පවසයි Python හි ඕනෑම වෙනසක් සඳහා ( ෆයිල්ස් - The වර්ගය ඉතා මෘදුකාංගයකි; Python හෝ Node වැනි විශේෂ පරිසරයන් සඳහා, ඔබට අවශ්ය නම් ආකර්ෂණය කළමනාකරණය කිරීම සඳහා ඒවා හඳුනා ගත හැකිය. හූස් my_custom_script.sh .py language: script bash කෙසේ වෙතත්, pre-commit වැඩපිළිවෙළ සම්බන්ධයෙන් ඉතා බුද්ධිමත් වන අතර, එය මෙවලම් සහ අවශ්ය සබඳතා සඳහා තනි runtime පරිසරයක් නිර්මාණය කරයි. අවාසනාවකට මෙන්, සියලුම හුවමාරු ප්රයෝජනවත් කර ඇති අතර, හුවමාරු ක්රියාත්මක කිරීම සඳහා ඔබම මෙවලම් ස්ථාපනය කළ යුතුය (මම උදාහරණයක් ලෙස terraform ගැන හිතනවා) කණ්ඩායම් සහ CI / CD පරිසරය තුළ පෙර කැපවීම තනි සංවර්ධක යන්ත්ර මත pre-commit ආලෝකය වන අතර, එහි ප්රතිලාභ කණ්ඩායම් රැකියාව ක්රියාකාරකම් හා CI / CD පයිප්ලයින් ඇතුළත් කරන විට ප්රමාණවත් වේ. ඔබගේ CI / CD pipeline Ultimate GateKeeper ලෙස ක්රියා කළ හැකිය. git commit --no-verify 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 කේත තත්ත්වයේ නුසුදුසු දේශීය ආරක්ෂකයා ලෙස ක්රියා කරයි.