Bird
Raised Fist0
Gitdevops~5 mins

Creating custom hook scripts in Git - Quick Revision & Summary

Choose your learning style10 modes available
Recall & Review
beginner
What is a Git hook?
A Git hook is a script that Git runs before or after events like commits, pushes, or merges. It helps automate tasks.
Click to reveal answer
beginner
Where do you place custom Git hook scripts?
Custom Git hook scripts go inside the .git/hooks folder of your repository.
Click to reveal answer
beginner
How do you make a Git hook script executable?
You run chmod +x <hook-script> to make the script executable so Git can run it.
Click to reveal answer
beginner
Name two common Git hook types you can customize.
Two common hooks are pre-commit (runs before a commit) and post-commit (runs after a commit).
Click to reveal answer
intermediate
What happens if a pre-commit hook script exits with a non-zero status?
Git stops the commit process and shows an error. This lets you prevent bad commits.
Click to reveal answer
Where should you place a custom Git hook script?
Aroot folder of the project
B.git/hooks folder
Cany folder in your home directory
Dinside the .gitignore file
What command makes a Git hook script executable?
Achmod 777 <hook-script>
Bgit hook enable <hook-script>
Cchmod +x <hook-script>
Dgit run-hook <hook-script>
Which hook runs before a commit is finalized?
Apost-merge
Bpost-commit
Cpre-push
Dpre-commit
What happens if a pre-commit hook script returns a non-zero exit code?
AThe commit is stopped
BThe commit proceeds normally
CGit deletes the commit
DGit ignores the hook
Which language can you use to write Git hook scripts?
AAny scripting language like Bash, Python, or Perl
BOnly Git's own language
COnly compiled languages like C
DOnly JavaScript
Explain how to create and enable a custom pre-commit Git hook script.
Think about where the script goes and how Git runs it.
You got /4 concepts.
    Describe what happens when a Git hook script fails during a commit.
    Focus on the effect of the script's exit code.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of creating a custom Git hook script?
      easy
      A. To delete branches remotely
      B. To change the Git commit message manually
      C. To create new Git repositories
      D. To run scripts automatically at specific Git events

      Solution

      1. Step 1: Understand Git hooks

        Git hooks are scripts that run automatically at certain points in Git's workflow, like before a commit or after a push.
      2. Step 2: Identify the purpose of custom hooks

        Custom hooks let you automate tasks or enforce rules during these Git events without manual intervention.
      3. Final Answer:

        To run scripts automatically at specific Git events -> Option D
      4. Quick Check:

        Git hooks = automatic scripts at Git events [OK]
      Hint: Hooks run scripts automatically at Git events [OK]
      Common Mistakes:
      • Thinking hooks manually change commit messages
      • Confusing hooks with branch deletion
      • Assuming hooks create repositories
      2. Which of the following is the correct way to make a Git hook script executable on Linux or macOS?
      easy
      A. chmod +x .git/hooks/pre-commit
      B. git hook enable pre-commit
      C. chmod 777 .git/hooks/pre-commit
      D. git config hook.pre-commit true

      Solution

      1. Step 1: Understand file permissions for hooks

        Git hooks must be executable files to run automatically.
      2. Step 2: Use the correct command to make a file executable

        The command chmod +x adds execute permission without changing other permissions.
      3. Final Answer:

        chmod +x .git/hooks/pre-commit -> Option A
      4. Quick Check:

        Make hook executable = chmod +x [OK]
      Hint: Use chmod +x to make hook scripts executable [OK]
      Common Mistakes:
      • Using git commands that don't exist for hooks
      • Setting overly permissive permissions like 777
      • Trying to enable hooks via git config
      3. Given this pre-commit hook script placed in .git/hooks/pre-commit and made executable:
      #!/bin/sh
      if git diff --cached --quiet; then
        echo "No changes staged for commit."
        exit 1
      fi
      
      What happens when you try to commit without staging any changes?
      medium
      A. The commit is blocked with message 'No changes staged for commit.'
      B. The commit proceeds normally without any message
      C. The commit is blocked with a syntax error
      D. The commit proceeds but shows a warning

      Solution

      1. Step 1: Analyze the script logic

        The script checks if there are no staged changes using git diff --cached --quiet. If true, it prints a message and exits with code 1.
      2. Step 2: Understand Git hook exit codes

        Exiting with code 1 in a pre-commit hook stops the commit process and shows the message.
      3. Final Answer:

        The commit is blocked with message 'No changes staged for commit.' -> Option A
      4. Quick Check:

        Exit 1 in pre-commit = block commit [OK]
      Hint: Exit non-zero in pre-commit stops commit [OK]
      Common Mistakes:
      • Assuming commit proceeds despite exit 1
      • Confusing staged vs unstaged changes
      • Expecting syntax errors from correct shell script
      4. You wrote this post-commit hook script but it does not run after commits:
      #!/bin/sh
      echo "Commit done!"
      Which is the most likely reason?
      medium
      A. The script filename is incorrect
      B. The script is not executable
      C. Git hooks cannot echo messages
      D. The script must be in the project root, not .git/hooks

      Solution

      1. Step 1: Check common hook issues

        Hooks must be executable files inside .git/hooks/ with correct names.
      2. Step 2: Identify the most common cause

        Often, scripts don't run because they lack execute permission, even if named correctly.
      3. Final Answer:

        The script is not executable -> Option B
      4. Quick Check:

        Hooks must be executable to run [OK]
      Hint: Make hook scripts executable with chmod +x [OK]
      Common Mistakes:
      • Placing scripts outside .git/hooks directory
      • Assuming echo is not allowed in hooks
      • Using wrong hook filenames
      5. You want to create a custom Git hook that prevents commits if the commit message does not contain the word 'JIRA'. Which script placed in .git/hooks/commit-msg will achieve this?
      hard
      A. #!/bin/sh if grep -q 'JIRA' "$1"; then exit 1 fi
      B. #!/bin/sh grep 'JIRA' "$1" || echo "Commit message missing JIRA"
      C. #!/bin/sh if ! grep -q 'JIRA' "$1"; then echo "Commit message must include 'JIRA'." exit 1 fi
      D. #!/bin/sh echo "Checking commit message for JIRA"

      Solution

      1. Step 1: Understand commit-msg hook argument

        The commit message file path is passed as the first argument ($1) to the script.
      2. Step 2: Check script logic for enforcing 'JIRA'

        #!/bin/sh if ! grep -q 'JIRA' "$1"; then echo "Commit message must include 'JIRA'." exit 1 fi uses grep -q to check if 'JIRA' is missing, then prints a message and exits with 1 to block the commit.
      3. Step 3: Evaluate other options

        #!/bin/sh grep 'JIRA' "$1" || echo "Commit message missing JIRA" only echoes but does not block commit. #!/bin/sh if grep -q 'JIRA' "$1"; then exit 1 fi blocks if 'JIRA' is present (wrong logic). #!/bin/sh echo "Checking commit message for JIRA" just echoes without checks.
      4. Final Answer:

        #!/bin/sh if ! grep -q 'JIRA' "$1"; then echo "Commit message must include 'JIRA'." exit 1 fi -> Option C
      5. Quick Check:

        Exit 1 if 'JIRA' missing blocks commit [OK]
      Hint: Use commit-msg hook with exit 1 to block bad messages [OK]
      Common Mistakes:
      • Not exiting with non-zero to block commit
      • Checking for presence instead of absence
      • Only printing message without blocking
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard