{"id":73627,"date":"2019-12-02T04:17:48","date_gmt":"2019-12-02T11:17:48","guid":{"rendered":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/"},"modified":"2019-12-02T04:17:48","modified_gmt":"2019-12-02T11:17:48","slug":"how-to-ease-your-teams-development-workflow-with-git-hooks","status":"publish","type":"post","link":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/","title":{"rendered":"How To Ease Your Team\u2019s Development Workflow With Git Hooks"},"content":{"rendered":"<link rel=\"canonical\" href=\"https:\/\/www.smashingmagazine.com\/2019\/12\/git-hooks-team-development-workflow\/\"><title>How To Ease Your Team\u2019s Development Workflow With Git Hooks<\/title><\/p>\n<article>\n<header>\n<h1>How To Ease Your Team\u2019s Development Workflow With Git Hooks<\/h1>\n<address>Konstantinos Leimonis<\/address>\n<p>                  <time datetime=\"2019-12-02T11:00:00+00:00\">2019-12-02T11:00:00+00:00<\/time><time datetime=\"2019-12-02T11:00:00+00:00\">2019-12-02T11:06:24+00:00<\/time><\/header>\n<p>One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code changes during software development. It\u2019s been created by Linus Torvalds in 2005 for the development of the Linux kernel. It is <a href=\"https:\/\/git-scm.com\/doc\">easy to learn<\/a> and has a <a href=\"https:\/\/git-scm.com\/about\/small-and-fast\">tiny footprint with lightning fast performance<\/a>.<\/p>\n<p>There is a big chance you have already used Git (since it is one of the most popular and well-adopted VCS tools available in the development community), and you most probably already have some knowledge about staging and committing your code by pushing and pulling it from a remote repository. This article won\u2019t address the basics of git workflows but will mostly <strong>focus on git hooks and how to utilize them<\/strong> in order to achieve better collaboration in your team. With teams growing in size, it\u2019s becoming even more important to keep contributors in line and maintain different rules about the code.<\/p>\n<h3>What Are Git Hooks?<\/h3>\n<p>Git hooks are scripts that are triggered when specific actions or events are performed in a git repository. These actions are about parts of the version control workflow such as committing and pushing. Hooks can be really useful by automating tasks on your git workflow. For example, they can help us validate the syntax of our codebase based on some specific rules, or run some tests before committing our changes.<\/p>\n<div data-component=\"FeaturePanel\" data-audience=\"non-subscriber\" data-remove=\"true\"><\/div>\n<h3>How To Get Them Set?<\/h3>\n<p>Git hooks are a built-in feature, meaning that we are able to access them and start using them as long as a git repository is initialized. Let\u2019s have a look in more detail what that means by trying to get them set.<\/p>\n<p>Using your favorite terminal, create a new git repository.<\/p>\n<pre><code>mkdir my-new-repository && cd my-new-repository\ngit init\nls -la\n<\/code><\/pre>\n<p>You will notice that a new hidden directory has just been created. This folder <code>.git<\/code> is used from git for storing repository related information, such as version control hashes, information about commits, remote repository addresses, and so on. This is also the folder where hooks actually live for git <code>.git\/hooks<\/code>. You can find some pre-populated sample scripts automatically created during the initialisation. These are actually the scripts that will get triggered after specific actions.<\/p>\n<pre><code>ls .git\/hooks\n<\/code><\/pre>\n<p>Some of the samples you can find are:<\/p>\n<ul>\n<li><code>pre-commit.sample<\/code>: invoked just before making the commit.<\/li>\n<li><code>commit-msg.sample<\/code>: edit the message file in place.<\/li>\n<li><code>post-receive.sample<\/code>: invoked after the remote repository has updated.<\/li>\n<\/ul>\n<h3>Under The Hood<\/h3>\n<p>Now that we know where we can find hooks, let\u2019s take a step back in order to understand how do they actually work.<\/p>\n<p>Git hooks are event-based, so as long as we execute a git command in the development flow, git will check hooks folders in order to find if there is an associated script to run. Some of these scripts will run before or after these development flow actions.<\/p>\n<p>A good example for us to go through and more specifically understand the flow under which hooks get triggered is the committing workflow which is a quite familiar use case.<\/p>\n<p>Whenever we commit any changes to our codebase, some of these related hooks are triggered in the following order:<\/p>\n<ol>\n<li><code>pre-commit<\/code>: inspects the snapshot that\u2019s about to be committed and verify what is to be committed.<\/li>\n<li><code>prepare-commit-msg<\/code>: lets you edit the default message before the commit author sees it.<\/li>\n<li><code>commit-msg<\/code>: sets commit message to a template.<\/li>\n<li><code>post-commit<\/code>: runs an action just after the commit has been completed, and sends a notification for instance.<\/li>\n<\/ol>\n<figure><a href=\"https:\/\/i0.wp.com\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png?ssl=1\"><\/p>\n<p>    <img data-recalc-dims=\"1\" decoding=\"async\" srcset=\"https:\/\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/git-hooks-executing.png 400w,\n\t\t\t        https:\/\/res.cloudinary.com\/indysigner\/image\/fetch\/f_auto,q_auto\/w_800\/https:\/\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png 800w,\n\t\t\t        https:\/\/res.cloudinary.com\/indysigner\/image\/fetch\/f_auto,q_auto\/w_1200\/https:\/\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png 1200w,\n\t\t\t        https:\/\/res.cloudinary.com\/indysigner\/image\/fetch\/f_auto,q_auto\/w_1600\/https:\/\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png 1600w,\n\t\t\t        https:\/\/res.cloudinary.com\/indysigner\/image\/fetch\/f_auto,q_auto\/w_2000\/https:\/\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png 2000w\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/git-hooks-executing.png?w=900&#038;ssl=1\" sizes=\"100vw\" alt=\"Hooks executing during the commit creation process\"><\/a><figcaption>\n      Hooks executing during the commit creation process (Image credits: <a href=\"https:\/\/www.atlassian.com\/git\/tutorials\/git-hooks\">Atlassian Bitbucket<\/a>) (<a href=\"https:\/\/cloud.netlifyusercontent.com\/assets\/344dbf88-fdf9-42bb-adb4-46f01eedd629\/a75c6d4a-6566-4d9c-bd91-a86e69e27416\/git-hooks-executing.png\">Large preview<\/a>)<br \/>\n    <\/figcaption><\/figure>\n<p>In the above repository, let\u2019s now try and add some custom pre- and post-commit scripts in order to further visualize how git hooks actually work.<\/p>\n<pre><code>nano .git\/hooks\/pre-commit\n<\/code><\/pre>\n<p>Add the following snippet:<\/p>\n<pre><code>#!\/bin\/sh\necho Changes are about to be committed\n<\/code><\/pre>\n<p>Make sure our scripts are executable:<\/p>\n<pre><code>chmod +x .git\/hooks\/pre-commit\n<\/code><\/pre>\n<p>Repeat the above process for the <code>post-commit<\/code> script:<\/p>\n<pre><code>nano .git\/hooks\/post-commit\n<\/code><\/pre>\n<pre><code>#!\/bin\/sh\necho Changes have been committed\n<\/code><\/pre>\n<pre><code>chmod +x .git\/hooks\/post-commit\n<\/code><\/pre>\n<p>Now we can add a new file <code>nano index.html<\/code> with a small HTML snippet just for demonstration purposes (no need to let HTML validators know about this).<\/p>\n<pre><code><h1>Hello world from our new repository!<\/h1>\n<\/code><\/pre>\n<p>We\u2019ll be adding the changes in our codebase through staging and then committing this:<\/p>\n<pre><code>git add .\ngit commit\n<\/code><\/pre>\n<p>After committing has been successfully processed, we can see the following output of the two above-added scripts:<\/p>\n<pre><code>Changes are about to be committed\nChanges have been committed\n<\/code><\/pre>\n<p>As expected, git triggered hooks in the committing flow. The <code>pre-commit<\/code> and <code>post-commit<\/code> scripts that have been added are running and will get executed in the correct sequence (based on the order we mentioned earlier).<\/p>\n<p>This was a simple demonstration in order to understand how the committing workflow scripts work and how they are executed. For more details on this workflow, you can <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Customizing-Git-Git-Hooks\">read more in the documentation<\/a>.<\/p>\n<div><\/div>\n<p>In the above example, we chose to write these two scripts in bash but the truth is that git supports hooks that can be written in any scripting language we want. Ruby, Python or JavaScript are great alternatives, as long as we set the correct shebang at the first line of our executable script.<\/p>\n<p>For example, we can rewrite the <code>pre-commit<\/code> hook as a Node.js script like below:<\/p>\n<pre><code>#!\/usr\/bin\/env node\nconsole.log(\"Changes are about to be commited\")\n<\/code><\/pre>\n<h3>Local And Remote Hooks<\/h3>\n<p>Hooks are separated between local and remote (or client and server). While local hooks run before or after specific actions on the local repository, remote hooks run before or after pushes to the server. Local ones cannot be used for enforcing policies since their nature lets developers easily alter them. They are mostly used for sticking to some specific guidelines that we want to apply within a team. In case we want to get stricter and enforce some policies for our repository, we reside in remote hooks.<\/p>\n<h4>Local Hooks<\/h4>\n<ul>\n<li><code>pre-commit<\/code><\/li>\n<li><code>prepare-commit-msg<\/code><\/li>\n<li><code>commit-msg<\/code><\/li>\n<li><code>post-commit<\/code><\/li>\n<li><code>applypatch-msg<\/code><\/li>\n<li><code>pre-applypatch<\/code><\/li>\n<li><code>post-applypatch<\/code><\/li>\n<li><code>pre-rebase<\/code><\/li>\n<li><code>post-rewrite<\/code><\/li>\n<li><code>post-checkout<\/code><\/li>\n<li><code>post-merge<\/code><\/li>\n<li><code>pre-push<\/code><\/li>\n<\/ul>\n<h4>Remote Hooks<\/h4>\n<ul>\n<li><code>pre-receive<\/code><\/li>\n<li><code>update<\/code><\/li>\n<li><code>post-receive<\/code><\/li>\n<\/ul>\n<h3>Sharing Hooks<\/h3>\n<p>Git hooks are all about sharing them within the team. This is the main reason they exist: promoting better team collaboration, automating detrimental processes, and letting us focus only on the important parts of the codebase.<\/p>\n<p>As stated before, <code>.git\/hooks<\/code> is the folder that hosts our customized hooks, but this is not really helpful when we need to share these scripts within the team since this folder is not tracked by git.<\/p>\n<p>A good approach for solving this is adding all of our custom hooks on a separate folder inside our repository. For example, we can add a <code>.githooks<\/code> folder and save the executable scripts over there. Then, on project initialization, we can either explicitly copy or symlink these scripts to the original folder for keeping our hooks <code>.git\/hooks<\/code>.<\/p>\n<pre><code>find .git\/hooks -type l -exec rm {} \\;\nfind .githooks -type f -exec ln -sf ..\/..\/{} .git\/hooks\/ \\;\n<\/code><\/pre>\n<p>Alternatively, if you\u2019re using the latest git version (speaking of <code>2.9<\/code> and above) we are able to directly configure the git hooks path to our custom folder:<\/p>\n<pre><code>git config core.hooksPath .githooks\n<\/code><\/pre>\n<div><\/div>\n<h3>Git Hooks Made Easy (A JavaScript Codebase Use Case)<\/h3>\n<p>There are tools that help us further integrate git hooks to the needs of our codebase. Specifically for JavaScript codebases, there is <a href=\"https:\/\/github.com\/typicode\/husky\">Husky<\/a> with which we can easily customize actions on git events through configuration.<\/p>\n<p>For example, we can easily lint our code or run some tests in the <code>pre-commit<\/code> event and proceed to commit based on whether the linting, testing or both are successful or not.<\/p>\n<p>This can be accomplished by extending the <code>package.json<\/code> configuration simply as:<\/p>\n<pre><code>{\n    \"scripts\": {\n        \"test\": \"echo Running tests\"\n    },\n    \"devDependencies\": {\n        \"eslint\": \"5.16.0\",\n    },\n    \"husky\": {\n        \"hooks\": {\n            \"pre-commit\": \"eslint . && npm test\",\n        }\n    }\n}\n<\/code><\/pre>\n<h3>Conclusion<\/h3>\n<p>In this article, we\u2019ve found out that different actions taken on a git repository can optionally trigger custom scripts to run. Those scripts can be under the control of the developer locally or managed more centrally for a team or project on a remote. We\u2019ve also learned that scripts are often written in a shell script like bash, but can actually use almost any scripting language, even JavaScript.<\/p>\n<p>Git hooks can be a really powerful part of a well-designed workflow, and I\u2019d encourage you to give them a try and see what you can do for your own projects.<\/p>\n<div>\n  <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/logo-red.png?w=900&#038;ssl=1\" alt=\"Smashing Editorial\"><span>(dm, il)<\/span>\n<\/div>\n<\/article>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener noreferrer\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How To Ease Your Team\u2019s Development Workflow With Git Hooks How To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00 One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking&#8230;<a class=\"moretag\" href=\"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/\"> Read the full article&#8230;<\/a><\/p>\n","protected":false},"author":4,"featured_media":73628,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[371],"tags":[],"class_list":["post-73627","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-user-experience"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Guest Contribution\"\/>\n\t<meta name=\"keywords\" content=\"user experience\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Design for Immersive Technologies | User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies\" \/>\n\t\t<meta property=\"og:description\" content=\"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-02T11:17:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-12-02T11:17:48+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#article\",\"name\":\"How To Ease Your Team\\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies\",\"headline\":\"How To Ease Your Team\\u2019s Development Workflow With Git Hooks\",\"author\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/guestcontribution\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.taterboy.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/git-hooks-executing.png?fit=400%2C207&ssl=1\",\"width\":400,\"height\":207},\"datePublished\":\"2019-12-02T04:17:48-07:00\",\"dateModified\":\"2019-12-02T04:17:48-07:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#webpage\"},\"articleSection\":\"User Experience\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.taterboy.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/user-experience\\\/#listItem\",\"name\":\"User Experience\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/user-experience\\\/#listItem\",\"position\":2,\"name\":\"User Experience\",\"item\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/user-experience\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#listItem\",\"name\":\"How To Ease Your Team\\u2019s Development Workflow With Git Hooks\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#listItem\",\"position\":3,\"name\":\"How To Ease Your Team\\u2019s Development Workflow With Git Hooks\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/category\\\/user-experience\\\/#listItem\",\"name\":\"User Experience\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\",\"name\":\"Design for Immersive Technologies\",\"description\":\"User Experience for Games, Virtual Reality (VR) and Augmented\\\/Mixed Reality (AR\\\/MR)\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/guestcontribution\\\/#author\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/guestcontribution\\\/\",\"name\":\"Guest Contribution\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d2aad73eb0f48c67b141e9fc978a0e498969791ed623346e361d02d19775b0bb?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Guest Contribution\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#webpage\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/\",\"name\":\"How To Ease Your Team\\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies\",\"description\":\"How To Ease Your Team\\u2019s Development Workflow With Git HooksHow To Ease Your Team\\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/guestcontribution\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/author\\\/guestcontribution\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.taterboy.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/git-hooks-executing.png?fit=400%2C207&ssl=1\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#mainImage\",\"width\":400,\"height\":207},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/2019\\\/12\\\/how-to-ease-your-teams-development-workflow-with-git-hooks\\\/#mainImage\"},\"datePublished\":\"2019-12-02T04:17:48-07:00\",\"dateModified\":\"2019-12-02T04:17:48-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/\",\"name\":\"Design for Immersive Technologies\",\"description\":\"User Experience for Games, Virtual Reality (VR) and Augmented\\\/Mixed Reality (AR\\\/MR)\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.taterboy.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies","description":"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code","canonical_url":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/","robots":"max-image-preview:large","keywords":"user experience","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#article","name":"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies","headline":"How To Ease Your Team\u2019s Development Workflow With Git Hooks","author":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/guestcontribution\/#author"},"publisher":{"@id":"https:\/\/www.taterboy.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/git-hooks-executing.png?fit=400%2C207&ssl=1","width":400,"height":207},"datePublished":"2019-12-02T04:17:48-07:00","dateModified":"2019-12-02T04:17:48-07:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#webpage"},"isPartOf":{"@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#webpage"},"articleSection":"User Experience"},{"@type":"BreadcrumbList","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.taterboy.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/#listItem","name":"User Experience"}},{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/#listItem","position":2,"name":"User Experience","item":"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#listItem","name":"How To Ease Your Team\u2019s Development Workflow With Git Hooks"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#listItem","position":3,"name":"How To Ease Your Team\u2019s Development Workflow With Git Hooks","previousItem":{"@type":"ListItem","@id":"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/#listItem","name":"User Experience"}}]},{"@type":"Organization","@id":"https:\/\/www.taterboy.com\/blog\/#organization","name":"Design for Immersive Technologies","description":"User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","url":"https:\/\/www.taterboy.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.taterboy.com\/blog\/author\/guestcontribution\/#author","url":"https:\/\/www.taterboy.com\/blog\/author\/guestcontribution\/","name":"Guest Contribution","image":{"@type":"ImageObject","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d2aad73eb0f48c67b141e9fc978a0e498969791ed623346e361d02d19775b0bb?s=96&d=mm&r=g","width":96,"height":96,"caption":"Guest Contribution"}},{"@type":"WebPage","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#webpage","url":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/","name":"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies","description":"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.taterboy.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#breadcrumblist"},"author":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/guestcontribution\/#author"},"creator":{"@id":"https:\/\/www.taterboy.com\/blog\/author\/guestcontribution\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/git-hooks-executing.png?fit=400%2C207&ssl=1","@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#mainImage","width":400,"height":207},"primaryImageOfPage":{"@id":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/#mainImage"},"datePublished":"2019-12-02T04:17:48-07:00","dateModified":"2019-12-02T04:17:48-07:00"},{"@type":"WebSite","@id":"https:\/\/www.taterboy.com\/blog\/#website","url":"https:\/\/www.taterboy.com\/blog\/","name":"Design for Immersive Technologies","description":"User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.taterboy.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Design for Immersive Technologies | User Experience for Games, Virtual Reality (VR) and Augmented\/Mixed Reality (AR\/MR)","og:type":"article","og:title":"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies","og:description":"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code","og:url":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/","article:published_time":"2019-12-02T11:17:48+00:00","article:modified_time":"2019-12-02T11:17:48+00:00","twitter:card":"summary","twitter:title":"How To Ease Your Team\u2019s Development Workflow With Git Hooks | Design for Immersive Technologies","twitter:description":"How To Ease Your Team\u2019s Development Workflow With Git HooksHow To Ease Your Team\u2019s Development Workflow With Git Hooks Konstantinos Leimonis 2019-12-02T11:00:00+00:002019-12-02T11:06:24+00:00One of the major requirements working for a team or an open-source project is using a version control system (VCS). Git is a free and open-source distributed version control system for tracking source code"},"aioseo_meta_data":{"post_id":"73627","title":null,"description":null,"keywords":null,"keyphrases":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_custom_image_width":null,"og_custom_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"created":"2021-02-07 16:30:02","updated":"2026-09-02 14:58:05","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"primary_term":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"twitter_image_url":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.taterboy.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/\" title=\"User Experience\">User Experience<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow To Ease Your Team\u2019s Development Workflow With Git Hooks\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.taterboy.com\/blog"},{"label":"User Experience","link":"https:\/\/www.taterboy.com\/blog\/category\/user-experience\/"},{"label":"How To Ease Your Team\u2019s Development Workflow With Git Hooks","link":"https:\/\/www.taterboy.com\/blog\/2019\/12\/how-to-ease-your-teams-development-workflow-with-git-hooks\/"}],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8wzr5-j9x","jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.taterboy.com\/blog\/wp-content\/uploads\/2019\/12\/git-hooks-executing.png?fit=400%2C207&ssl=1","_links":{"self":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts\/73627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/comments?post=73627"}],"version-history":[{"count":0,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/posts\/73627\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/media\/73628"}],"wp:attachment":[{"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/media?parent=73627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/categories?post=73627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.taterboy.com\/blog\/wp-json\/wp\/v2\/tags?post=73627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}