githooks | Githooks : per-repo and global Git hooks with version control

 by   rycus86 Shell Version: Current License: MIT

kandi X-RAY | githooks Summary

kandi X-RAY | githooks Summary

githooks is a Shell library. githooks has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.

A simple Shell script to support per-repository Git hooks, checked into the actual repository that uses them. To make this work, it creates hook templates that are installed into the .git/hooks folders automatically on git init and git clone. When one of them executes, it will try to find matching files in the .githooks directory under the project root, and invoke them one-by-one. There's more to the story though, you can read about it under the Templates or global hooks section.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              githooks has a low active ecosystem.
              It has 287 star(s) with 14 fork(s). There are 10 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              There are 12 open issues and 45 have been closed. On average issues are closed in 29 days. There are no pull requests.
              It has a neutral sentiment in the developer community.
              The latest version of githooks is current.

            kandi-Quality Quality

              githooks has no bugs reported.

            kandi-Security Security

              githooks has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.

            kandi-License License

              githooks is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              githooks releases are not available. You will need to build from source code and install.
              Installation instructions, examples and code snippets are available.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of githooks
            Get all kandi verified functions for this library.

            githooks Key Features

            No Key Features are available at this moment for githooks.

            githooks Examples and Code Snippets

            No Code Snippets are available at this moment for githooks.

            Community Discussions

            QUESTION

            Git pre-merge-commit hook : How do I ignore a file during a merge?
            Asked 2021-May-24 at 08:51
            Context

            I'm working in a complex git flow where some specific branches get specific submodules and some specific config files that require to be committed, but must not be merged.

            These are few files but it is too dangerous to let anyone merge branches without being careful not to merge those.

            In order to make it automatic, I worked on pre-merge-commit hooks, both at server and local side.

            In case of conflict, I make use of .gitattributes and git/config files to resolve the conflict with a custom merge driver. It works like a charm.

            Problem

            However, I'm struggling to make it work when there is no conflict. In this case, the merge is carried out successfully and my pre-merge-hook is triggered. It does its magic and then exit successfully. Though, for some reason, git re-do some merging stuff after the hook which make it useless. Here is the behavior I'm witnessing :

            before the merge

            I got two branches, let's say A_current and B_incoming.

            Both got a file I don't want to be merged. This file is called do_not_merge_me. At some point, do_not_merge_me content changed in B_incoming. Let's say it went from contentA to contentB

            during the merge

            What I see when I'm merging B_incoming into A_current is :

            • The merge goes on, and adds files in the staged area, including do_not_merge_me.
            • The merge succeed, so it triggers my hook
            • my hook finds do_not_merge_me in the staging area and remove it from the staging area (at the end, it's a git reset do_not_merge_me followed by a git checkout do_not_merge_me)
            • my hook ends properly, do_not_merge_me is not in the staging area anymore
            • Git does some dark magic : it redo a merge and re-stage do_not_merge_me
            • Git validate the commit, I see this added in my console :
            ...

            ANSWER

            Answered 2021-May-19 at 01:08

            The short answer is that you can't.

            When git merge runs, it reads three commits into Git's index. These three commits are:

            • the merge base (in slot 1);
            • the --ours commit (in slot 2); and
            • the --theirs commit (in slot 3).

            These are stored in the usual index format: a path name including slashes, a mode (100644 or 100755 for regular files, 120000 for symbolic links, and 160000 for gitlinks), and a hash ID.

            The first part of the merge then compares the modes to make sure those are suitable (if not, this is a merge conflict). Assuming normal files and suitable modes here, it goes on to compare the hash IDs:

            • all three equal? file is successfully merged, drop to slot 0, erase slots 1-3
            • two equal? take the third one: drop to slot 0, erase slots 1-3
            • all three unequal? leave for later, for the real merge code.

            There are a few more special cases (e.g., file exists in merge base and theirs/ours, but deleted in ours/theirs) that are also handled directly in the index, I think, but your particular case—file modified in theirs, but identical in ours and base—hits the middle "two equal? take third" case: the file is the same in your commit and the merge base, so Git just assumes that their updated file is the correct result.

            When Git does this in the early pass, it never runs your merge driver at all. The file goes to staging slot zero—"ready to be committed"—rather than conflicted and you never get a chance to do anything. Your pre-merge-commit will get invoked, but the copy of the file in the index will be the one from the theirs commit.

            We now get into the seriously dark magic part: "the index" assumes that there's a single index (.git/index) that is always used. This isn't really the case: it's mostly true, but:

            • $GIT_INDEX_FILE overrides the name;
            • added work-trees (from git worktree add) have their own index; and
            • various Git commands read the index into memory and then work with that.

            In this case, it looks like git merge has the index in-memory and just uses it as is to make the new commit. Your git add replaces the stage-zero copy in the .git/index file, but git merge does not notice this, and goes on to produce the new merge commit using the incoming copy that was there before it even ran your pre-merge-commit hook.

            Assuming this is all true—and it may change from one Git version to another, depending on when and whether Git does any re-reading of the index—this would answer your question #1, and render the answer to #2 "no" and the answer to #3 be "you're trying to do something outside the range of what Git handles".

            What you want to do is not inherently unreasonable, but Git just doesn't support it.

            Source https://stackoverflow.com/questions/67590221

            QUESTION

            Why doesn't `git cherry-pick` (without `--no-commit`) run my post-commit hook?
            Asked 2021-May-18 at 20:21

            How can I trigger a post-commit hook with the command git cherry-pick ?

            What I've tried:

            • I tried the command git commit -m '...' . It triggered the post-commit hook normally.
            • In the githooks document, there are no hooks related to cherry-pick.
            • After viewing the source code of Git, I found it uses git merge in some cases, and git commit in others. But I'm not sure when to use which command.

            My questions are:

            1. Why don't post-commit hooks work when I use git cherry-pick?
            2. Is there a hook that cherry-pick will run?
            ...

            ANSWER

            Answered 2021-May-18 at 20:21

            Why don't post-commit hooks work when I use git cherry-pick?

            The post-commit hook is run after creating a commit.

            However, cherry-pick does not really create a new commit with new information (from the user perspective) but copies another commit.

            Is there a hook that cherry-pick will run?

            Yes, the prepare-commit-msg should be run before commit is cherry-picked, even though the commit-msg hook is not executed.

            Source https://stackoverflow.com/questions/67588350

            QUESTION

            Error: PostCSS plugin tailwindcss requires PostCSS 8
            Asked 2020-Dec-16 at 10:16

            I installed the new tailwindcss version 2.0 and I've got the following error. I tried to uninstall postcss and tailwindcss but it does not work. Need help.

            ...

            ANSWER

            Answered 2020-Nov-20 at 08:26

            You're integrating Tailwind with a tool that relies on an older version of PostCSS. You can use this doc https://tailwindcss.com/docs/installation#post-css-7-compatibility-build

            Source https://stackoverflow.com/questions/64925926

            QUESTION

            Git is committing node_modules despite being ignored
            Asked 2020-Sep-16 at 20:11

            One of the dependencies in my project uses chromium (which is over 100mb) and makes github throw an error when trying to push it.

            To solve this, I made sure to ignore my node_modules folder.

            However I still get the error when I try to push.

            Here is my .gitignore file:

            ...

            ANSWER

            Answered 2020-Sep-16 at 20:11

            I ended up solving it by removing all historic commits.

            For those also in the same position I followed this.

            Source https://stackoverflow.com/questions/63927098

            QUESTION

            Git Hooks. How to read variables from user input?
            Asked 2020-Aug-05 at 04:37

            I'm trying to create a pre-commit hook. And I want it to interract with user. So, I've found that I can use
            read -p "Enter info: " info
            Or just
            read info

            I created a file:
            pre-commit:

            ...

            ANSWER

            Answered 2020-Aug-05 at 04:37

            As in this gist, you might need to take into account stderr (used by Git commands, as for instance here)

            Source https://stackoverflow.com/questions/63258476

            QUESTION

            pytest githook on Windows with Anaconda
            Asked 2020-May-26 at 13:59

            I have the following setup:

            • Windows 10
            • python installed via Anaconda
            • Virtual environment setup via Anaconda for running and testing my project with pytest
            • git version control via MINGW

            Now I'd like to set a githook that runs all my tests before I push. I have the following problem: I can't activate my virtual environment within the githook.

            I tried to activate my anaconda env in the githook script but I can't get it to work. activate as command is not available and calling the whole path ../Anaconda3/Scripts/activate.bat does nothing.

            I also tried to use python-githooks to configure the hook for me, but this doesn't seem to work in Windows (it can't read PWD from the environment...)

            I'm gratefull for any suggestions.

            ...

            ANSWER

            Answered 2020-May-26 at 13:59

            The solution was to create a .bat-File at the root of the git repository, with:

            call C:\...\Anaconda3\Scripts\activate.bat call activate fs_env pytest

            and to call this file within the pre-push file in .git/hooks with:

            ./runtests.bat

            Source https://stackoverflow.com/questions/62016261

            QUESTION

            Git hook on Ubuntu broken
            Asked 2020-Mar-30 at 18:56

            I recently got a git hook from someone that aims to add the issue number, which is in a specific location of the branch name, to the beginning of all commits. The goal is to take the #number from feature/#number-issue. Here is some info:

            ...

            ANSWER

            Answered 2020-Mar-30 at 18:56

            The problem was that I was trying to make this work on a pre-existing project, with an existing .git directory. I thought changing the config with the --global flag would just work, but apparently the config inside the .git directory of the project did not change, and the old hookspath was still there. When I changed it, the script started working.

            Source https://stackoverflow.com/questions/60935991

            QUESTION

            Azure DevOps force core.hooksPath after clone a repository
            Asked 2020-Mar-30 at 08:40

            I try to implement client side git hooks to a azure devops git repository.

            I added a .githooks directory to the root and implement a pre-commit hook. I commit and push everything to the repository.

            But of curse the hook is only active if I execute

            git config core.hooksPath .githooks

            after cloning the repository.

            The question is here: is there a possiblity to set the git config core.hooksPath per default to .githooks otherwise it will be impossible to force a user to use a hook. :/

            ...

            ANSWER

            Answered 2020-Mar-30 at 08:40

            The question is here: is there a possiblity to set the git config core.hooksPath per default to .githooks otherwise it will be impossible to force a user to use a hook. :/

            Sorry but I'm afraid it's impossible for now, as I know Azure Devops doesn't support such behavior. I totally understand your needs but what you want is not available in either Azure Devops Git Repos or Github Repos.

            Currently you have to make your members run the git config core.hooksPath .githooks command manually to enable your custom hooks. We can't avoid a manual step here cause git hooks is designed to trigger actions at certain points per user instead of per team.

            Source https://stackoverflow.com/questions/60885967

            QUESTION

            webpack config missing in vuejs
            Asked 2020-Mar-26 at 09:24

            My vuejs app's package.json looks like

            package.json

            ...

            ANSWER

            Answered 2020-Mar-26 at 09:24

            In vue cli 3 the webpack config file is generated dynamically at runtime. It has been abstracted away. That is the reason you don't see a webpack config file.

            You can find the webpack config file here:

            Source https://stackoverflow.com/questions/50304066

            QUESTION

            git commit: pre-populate commit subject but still prompt for a commit message
            Asked 2020-Feb-28 at 00:26

            Let's say I'm working on a branch and I run git commit. I am then taken to the commit message prompt where I may enter a commit subject and message. What I'm looking for is a way to have the commit subject pre-populated while still being able to write the commit message manually.

            This question is distinct from this one in that I want the commit subject to be populated but still want to be prompted to enter a commit message, i.e. running git commit -a in git bash results in something like:

            Edit: improper usage of githooks was preventing the accepted answer from the linked question from working. So, the questions are not distinct and this can be marked as a duplicate.

            I'm currently trying to pre-populate the commit subject with a branch name, but in the future I may want that text to be something else. As such, a general solution (not specifically for branch names) would be preferred.

            ...

            ANSWER

            Answered 2018-Dec-16 at 17:52

            The .git/hooks/prepare-commit-msg hook allows you to prepare the commit message before entering the commit message prompt. Withing that hook, you receive the commit message as the first argument, and could, e.g., echo into it:

            Source https://stackoverflow.com/questions/53804764

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install githooks

            The commands below fetch and execute the install.sh script from this repository. It will:. To install the templates, just execute the command below, and follow the instructions in the terminal. If you want, you can try out what the script would do first, without changing anything. You can also run the installation in non-interactive mode with the command below. This will determine an appropriate template directory (detect and use the existing one, or use the one passed by --template-dir, or use a default one), install the hooks automatically into this directory, and enable periodic update checks. The global install prefix defaults to ${HOME} but can be changed by passing --prefix <install-prefix> to the install.sh script.
            Find out where the Git templates directory is From the $GIT_TEMPLATE_DIR environment variable With the git config --get init.templateDir command Checking the default /usr/share/git-core/templates folder Search on the filesystem for matching directories Offer to set up a new one, and make it init.templateDir
            Set up the hook templates for the supported hooks - the templates are basically a copy of the base-template.sh file content
            Offer to enable automatic update checks
            Offer to find existing Git repositories on the filesystem (disable with --skip-install-into-existing) Install the hooks into them Offer to add an intro README in their .githooks folder
            Offer to set up shared hook repositories
            On a server infrastructure where only bare repositories are maintained, it is best to maintain only server hooks. This can be achieved by installing with the additional flag --only-server-hooks by:.
            pre-push
            pre-receive
            update
            post-receive
            post-update
            push-to-checkout
            pre-auto-gc
            Because bare repositories mostly live on a server, you should setup the following:. Githooks updates in bare repositories will only update server hooks as described in the install section.

            Support

            The supported hooks are listed below. Refer to the Git documentation for information on what they do and what parameters they receive. The fsmonitor-watchman hook is currently not supported. If you have a use-case for it and want to use it with this tool, please open an issue.
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/rycus86/githooks.git

          • CLI

            gh repo clone rycus86/githooks

          • sshUrl

            git@github.com:rycus86/githooks.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link