Pre-commit hooks are tests that run each time you attempt to commit. If the tests pass, the commit will be made, otherwise not. A very basic test is to check if the code is parsable, making sure you have not forgotten a comma, brace or quote.
The goal of this package is to twofold:
Provide a set of hooks that are useful when your git repo contains R
code. You can find them under
Provide usethis-like functionality for common tasks such as installation and set-up and config file modification.
You can install the package from CRAN:
To access pre-commit functionality from R, you also need to install the pre-commit framework. The following command line methods are tested to work with this R package:
$ pip3 install pre-commit --user (macOS, Linux and Windows)
outside a conda or virtual environment.
$ brew install pre-commit (macOS).
Alternatively, you can handle the installation from R using miniconda:
install miniconda if you don’t have it already:
reticulate::install_miniconda(). This needs reticulate >= 1.14.
install the pre-commit framework with
precommit::install_precommit() into the conda environment
Then, in a fresh R session:
# once in every git repo either # * after cloning a repo that already uses pre-commit or # * if you want introduce pre-commit to this repo precommit::use_precommit()
The last command initializes pre-commit in your repo and performs some
set-up tasks like creating the config file
where the hooks that will be run on
git commit are specified. See
?precommit::use_precommit() to see how you can use a custom
.pre-commit-config.yaml instead of the default at initialization. You
can (obviously) change edit the file manually at any time.
The next time you run
git commit, the hooks listed in your
.pre-commit-config.yaml will get executed before the commit. The
precommit::open_config() let’s you open and edit the
.pre-commit-config.yaml conveniently from the RStudio console. When
any file is changed due to running a hook or the hook script errors, the
commit will fail. You can inspect the changes introduced by the hook and
if satisfied, you can add the changes made by the hook to the index with
git add path/to/file and attempt to commit again. Some hooks change
files, like the styler hook, so all you need to do to make the hook pass
git add the changes introduced by the hook. Other hooks, like the
parsable-R hook, will need your action, e.g. add a missing closing brace
to a call like
library(styler, before they pass at the next attempt.
If all hooks pass, the commit is made. You can also temporarily disable
hooks. If you
succeed, it should look like this:
See the hooks provided by this repo under
You can also add other hooks from other repos, by extending the
.pre-commit-config.yaml file, e.g. like this:
- repo: https://github.com/pre-commit/precommit rev: v1.2.3 hooks: - id: check-added-large-files
To update the hook revisions, run
Do not abort while hooks are running in RStudio git tab.
Non-staged changes are stashed to a temp directory and when you
abort in RStudio, these changes are not brought back to you repo.
Upvote this issue
to change this. We hope that in the future, the changes will be
recovered in RStudio too. Note that this is only an issue with
RStudio. Stashes are restored when you abort a
git commit with
INT (e.g. Ctrl+C) on the command line. To restore stashes,
manually after hitting abort in the RStudio git tab, you can
apply /path/to/patch_with_id whereas you find the patch under your
pre-commit cache, which is usually under
Because R is not officially supported as a language in the pre-commit framework (yet), there is no R package dependency management for the R hooks provided in this repo. If an R package that is needed by a hook is not yet installed, you might get this error:
# > Error in loadNamespace(name) : there is no package called ‘__name_of_package__’
In that case, just install the package with
and try to commit again. All R dependencies of the pre-commit hooks
provided in this repo are suggested dependencies of this R package, so
if you want to install them all, just
dependencies = c("Imports", "Suggests")).
The online documentation of this package only covers the functionality added on top of pre-commit by this package. Everything else is covered in the extensive online documentation of the pre-commit framework itself, including how to:
create pre-push hooks
create local hooks
uninstall_precommit("repo") # just for the repo you are in. uninstall_precommit("user") # remove the pre-commit conda executable.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.