DEV Community

Kenichiro Nakamura
Kenichiro Nakamura

Posted on

C# git tips: Use git hook to test your code

I use Visual Studio to develop C# app, but I usually use git cli to run git command instead of Visual Studio git tools.

I don't have much issue doing this, but I sometimes encounter issues. For example:

  • Visual Studio don't save csproj file automatically, and I forget to save it before git commit
  • I usually run dotnet build and dotnet test, but I sometimes forget to confirm it

In both cases, I see CI error happens in the cloud which is embarrassing.

git hook

In such case, I can use git hook to make sure I run build and test right before I do git commit.

1. Go to .git/hooks folder and copy pre-commit.sample file.

2. Rename it to pre-commit.

3. Replace the code.


echo "dotnet build"

dotnet clean; dotnet build

if [[ $rc != 0 ]] ; then
    echo -e "build failed"
    exit $rc

dotnet "dotnet test"


if [[ $rc != 0 ]] ; then
    echo -e "test failed"
    exit $rc

exit 0
Enter fullscreen mode Exit fullscreen mode

4. Save the file.

Test the commit

Now we can add any change and do commit. Then the script runs to check if my code is fine or not.

Use case

There are many use-cases such as:

  • build
  • test
  • format
  • comment validation, etc.

Each project may have different requirements so we can simply modify the file to meet our requirements.


If you prefer PowerShell, then you can simply use it. One easy way to do it is to create ps1 file which contains your PowerShell script, and call it from pre-commit.

echo "# start some PS script"
exec powershell.exe -NoProfile -ExecutionPolicy Bypass -file "the.ps1"

Enter fullscreen mode Exit fullscreen mode

There is great article about this. Automation of your GIT repository via GIT hooks and PowerShell scripts

Top comments (2)

kryptobi profile image

Nice, what happened when u got a big Solution with 200 or more projects. Every commit will be a loooong waiting commit.
I use the hook to format the files.

kenakamu profile image
Kenichiro Nakamura

That's so true. In case of big working tree, we may use sparse check out and partial clone