If you’re tired of manually running migrations, clearing caches, and recaching configurations every time you git pull
or git merge
, Git hooks are here to make your life easier. But rather than running every command every time, let’s make this hook smarter, so it only performs these actions when necessary.
Automate Laravel Workflow with Git Hooks
This post will walk you through setting up a post-merge hook that checks for changes in specific files or folders and only runs migrations, and recaches configuration, views, and routes if something’s been updated. Let’s dive in!
What Are Git Hooks?
Git hooks are scripts that Git runs before or after specific events, like committing or merging code. We’ll use the post-merge hook for our setup, which runs every time you pull or merge new changes into your local repository. This way, your development environment will always be ready to go without you lifting a finger.
Setting Up a Smart Post-Merge Hook
Locate or Create the post-merge File. Navigate to the
.git/hooks
directory in your project. If you don’t already see apost-merge
file, create one there.Write the Script with Conditions for Each Action. Here’s a smart, optimized script that checks for changes before running commands:
#!/bin/bash
echo "Running optimized post-merge hook..."
# Check for new migration files
if git diff --name-only HEAD@{1} HEAD | grep -qE '^database/migrations/.*\.php'; then
echo "New migrations found. Running database migrations..."
php artisan migrate --force
else
echo "No new migrations found. Skipping migration step."
fi
# Check for changes in config files
if git diff --name-only HEAD@{1} HEAD | grep -qE '^config/.*\.php'; then
echo "Config changes detected. Recaching config..."
php artisan config:cache
else
echo "No config changes detected. Skipping config cache."
fi
# Check for changes in view files
if git diff --name-only HEAD@{1} HEAD | grep -qE '^resources/views/.*\.(php|blade\.php)'; then
echo "View changes detected. Recaching views..."
php artisan view:cache
else
echo "No view changes detected. Skipping view cache."
fi
# Check for changes in route files
if git diff --name-only HEAD@{1} HEAD | grep -qE '^routes/.*\.php'; then
echo "Route changes detected. Recaching routes..."
php artisan route:cache
else
echo "No route changes detected. Skipping route cache."
fi
echo "Optimized post-merge tasks completed!"
Explanation
Database Migrations: This part of the script checks if there are new migration files located in the
database/migrations
directory. If it finds any, it runsphp artisan migrate --force
to automatically apply the changes.Config Caching: The script checks for any modifications in the config files. If changes are detected, it runs the command to recache the configuration.
View Caching: It examines the
resources/views
directory for any updates. If there are changes, it will recache the views to ensure the latest versions are used.Route Caching: Lastly, the script looks for modifications in the
routes
directory. If any route files have been altered, it executes the command to recache the routes.
Make Your Script Executable
To allow Git to execute the post-merge hook script, you need to run the following command:
chmod +x .git/hooks/post-merge
You can even find the code at https://gist.github.com/itxshakil/54845e124959bfb70d040964ba0a0eef
Test It Out!
After setting up your post-merge hook, it's time to see it in action! Whenever you execute a git pull
or git merge
that includes updates to migration, config, view, or route files, the script will intelligently decide which tasks to run. This means your development environment will remain synchronized without unnecessary processing, enhancing your workflow efficiency.
Key Takeaways
*Automate Smartly: * By adding conditions to your Git hook, it only executes migrations, config caching, view caching, or route caching when needed, which saves you valuable time and system resources.
Easy to Implement: A few lines of Bash scripting can significantly streamline your setup tasks.
Keep Your Environment in Sync with Minimal Effort: This hook ensures your local environment is always up-to-date with the latest changes, all without requiring manual intervention.
Conclusion
Implementing this optimized Git hook can transform your development experience, particularly for projects that receive frequent updates. With just a few lines of code, you establish a workflow that is efficient, automated, and consistently aligned with your latest changes—no more missed migrations or forgotten caches. Give it a try, and let Git take care of the repetitive tasks for you!
Happy coding, and here's to a smoother, smarter development experience!
Top comments (0)