Githooks | 🦎 Githooks : per-repo and shared Git hooks | Frontend Utils library

 by   gabyx Go Version: v2.2.5 License: MIT

kandi X-RAY | Githooks Summary

kandi X-RAY | Githooks Summary

Githooks is a Go library typically used in User Interface, Frontend Utils applications. 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 platform-independend hooks manager written in Go to support shared hook repositories and per-repository Git hooks, checked into the working repository. This implementation is the Go port and successor of the original impementation (see Migration). To make this work, the installer creates run-wrappers for Githooks that are installed into the .git/hooks folders automatically on git init and git clone. There's more to the story though. When one of the Githooks run-wrappers executes, Githooks starts up and tries to find matching hooks in the .githooks directory under the project root, and invoke them one-by-one. Also it searches for hooks in configured shared hook repositories.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              Githooks has a low active ecosystem.
              It has 68 star(s) with 1 fork(s). There are 1 watchers for this library.
              OutlinedDot
              It had no major release in the last 12 months.
              There are 8 open issues and 9 have been closed. On average issues are closed in 43 days. There are 5 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of Githooks is v2.2.5

            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 available to install and integrate.
              Installation instructions, examples and code snippets are available.

            Top functions reviewed by kandi - BETA

            kandi has reviewed Githooks and discovered the below as its top functions. This is intended to give you an instant insight into Githooks implemented functionality, and help decide if they suit your requirements.
            • pickFolders selects a folder based on the current selection .
            • FetchUpdates fetches latest updates from a remote repo
            • GetAllHooksIn returns all the hooks in a given directory
            • ShowOptionsZenity shows zenity
            • getHooksIn returns a list of hooks in the given directory
            • ShowMessageZenity shows a message .
            • setGithooksDirectory sets the git hooks directory to use core hooks .
            • ShowEntryZenity shows zenity
            • PromptExistingRepos asks the user to list existing repositories .
            • checkSharedHook returns true if the provided hook exists in all of the hooks .
            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

            Download the latest release, exctract it and execute the installer command by the below instructions.
            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.
            Write all chosen Githooks run-wrappers into the choosen directory: either init.templateDir or core.hooksPath depending on the install mode --use-core-hooks-path.
            Offer to enable automatic update checks.
            Offer to find existing Git repositories on the filesystem (disable with --skip-install-into-existing) Install run-wrappers into them (.git/hooks). Offer to add an intro README in their .githooks folder.
            Install/update run-wrappers into all registered repositories: Repositories using Githooks get registered in the install folders registered.yaml file on their first hook invocation.
            Offer to set up shared hook repositories.
            To install Githooks on your system, simply execute cli installer. It will guide you through the installation process. Check the cli installer --help for available options. Some of them are described below:. Its adviced to only install Githooks for a selection of the supported hooks by using --maintained-hooks as. This will only support the mentioned hooks in the template directory (e.g. for new clones). You can still overwrite selectively for a repository by installing another set of hooks. Missing Git LFS hooks will always be placed if necessary.
            Lastly, you have the option to install the templates to a centralized location (core.hooksPath). You can read more about the difference between this option and the default one below. For this, run the command below.
            If you want to install from another Git repository (e.g. from your own or your companies fork), you can specify the repository clone url as well as the branch name (default: main) when installing with:. The installer always maintains a Githooks clone inside <installDir>/release for its automatic update logic. The specified custom clone URL and branch will then be used for further updates in the above example (see update machanics). Because the installer always downloads the latest release (here from another URL/branch), it needs deploy settings to know where to get the binaries from. Either your fork has setup these settings in their Githooks release (you hopefully downloaded) already or you can specify them by using --deploy-api <type> or the full settings file --deploy-settings <file>. The <type> can either be gitea ( or github which is not needed since it can be auto-detected from the URL) and it will automatically download and verify the binaries over the implemented API. Credentials will be collected over git credential to access the API. [@todo].
            You can use this hook manager also without a global installation. For that you can clone this repository anywhere (e.g. <repoPath>) and build the executables with Go by running githooks/scripts/build.sh --prod. You can then use the hooks by setting core.hooksPath (in any suitable Git config) to the checked in run-wrappers in <repoPath>/hooks like so:.
            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.
            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:.
            pre-push
            pre-receive
            update
            post-receive
            post-update
            reference-transaction
            push-to-checkout
            pre-auto-gc

            Support

            The supported hooks are listed below. Refer to the Git documentation for information on what they do and what parameters they receive. It is receommended to use --maintained-hooks options during install (1, 2) to only select the hooks which are really needed, since executing the Githooks manager for all hooks might slow down Git operations (especially for reference-transaction). The hook fsmonitor-watchman 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/gabyx/Githooks.git

          • CLI

            gh repo clone gabyx/Githooks

          • sshUrl

            git@github.com:gabyx/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

            Explore Related Topics

            Consider Popular Frontend Utils Libraries

            styled-components

            by styled-components

            formik

            by formium

            particles.js

            by VincentGarreau

            react-redux

            by reduxjs

            docz

            by pedronauck

            Try Top Libraries by gabyx

            ApproxMVBB

            by gabyxC++

            ExecutionGraph

            by gabyxC++

            WormAnalysis

            by gabyxJupyter Notebook

            Woodpecker

            by gabyxHTML

            githooks

            by gabyxGo