If you need to run operations before completing a Git Commit, you must rely on Git Hooks.
Install the tool
The tool must be installed in the root folder of the solution.
To install the tool globally, you have to run
dotnet new tool-manifest dotnet tool install Husky
and, to add it to an existing .NET application, you must run
dotnet husky install
Finally, you can add a new hook by running, for example,
dotnet husky add pre-commit -c "echo 'Husky.Net is awesome!'" git add .husky/pre-commit
This fill create a new file, pre-commit, in your project. The content, here, is pretty useless: you should customize that script.
Create custom scripts
To customize the script, open the file located at
.husky/pre-commit (the file has no extensions).
Here you can add whatever you want.
My personal file just compiles the code, formats the text (using
dotnet format with the rules defined in the .editorconfig file), and then runs all the tests.
#!/bin/sh . "$(dirname "$0")/_/husky.sh" echo 'Building code' dotnet build echo 'Formatting code' dotnet format git add . echo 'Running tests' dotnet test
Then, add it to Git, and you are ready to go.
Skip git hooks
To trigger the hook, just run
git commit -m "message". Before completing the commit, the hook will run all the commands. If one of them fails, the whole commit operation is aborted.
There are cases when you have to skip the validation. For example, if you have integration tests that rely on an external source that is currently offline. In that case, some tests will fail, and you won’t be able to commit your code until the external system comes back.
You can skip the commit validation by adding the
git commit -m "my message" --no-verify