https://github.com/stufield/gitr
A light-weight, dependency-free, API to access system-level git commands from within R
https://github.com/stufield/gitr
git r r-package zsh
Last synced: about 1 month ago
JSON representation
A light-weight, dependency-free, API to access system-level git commands from within R
- Host: GitHub
- URL: https://github.com/stufield/gitr
- Owner: stufield
- License: other
- Created: 2021-11-23T18:12:48.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-04-22T15:03:09.000Z (about 1 year ago)
- Last Synced: 2025-12-09T04:19:27.197Z (6 months ago)
- Topics: git, r, r-package, zsh
- Language: R
- Homepage: https://stufield.github.io/gitr/
- Size: 1.75 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- License: LICENSE
- Security: SECURITY.md
- Support: .github/SUPPORT.md
Awesome Lists containing this project
README
---
output: github_document
---
```{r setup, include = FALSE}
options(width = 100)
Sys.setlocale("LC_COLLATE", "en_US.UTF-8") # ensure common sorting envir
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
ver <- desc::desc_get_version(".")
ver <- paste0("https://img.shields.io/badge/Version-", ver,
"-success.svg?style=flat&logo=github")
```
# gitr

[](https://cran.r-project.org/package=gitr)
[](https://github.com/stufield/gitr/actions)
[](https://cran.r-project.org/package=gitr)
[](https://app.codecov.io/gh/stufield/gitr?branch=main)
[](https://lifecycle.r-lib.org/articles/stages.html#stable)
[](https://choosealicense.com/licenses/mit/)
A light-weight, dependency-free, application programming interface
(API) to access system-level [Git](https://git-scm.com/downloads) commands from within `R`.
Contains wrappers and defaults for common data science workflows as well as
[Zsh](https://github.com/ohmyzsh/ohmyzsh) plugin aliases (see below).
A generalized API syntax is also available.
A system installation of [Git](https://git-scm.com/downloads) is required.
If you run into any issues/problems with `gitr` full documentation
of the most recent
[release](https://github.com/stufield/gitr/releases)
can be found at the
[pkgdown website](https://stufield.github.io/gitr/).
If the issue persists I encourage you to consult the
[issues](https://github.com/stufield/gitr/issues/)
page and, if appropriate, submit an issue and/or feature request.
## Disclaimer
Use at own risk :smiley_cat:, however, PRs are encouraged for ideas that I've missed.
The functionality contained in `gitr` are _heavily_ influenced by __my__
personal data science workflows and may not suit all users.
However, if you have an idea that would make the package better,
more widely usable, and/or efficient, please submit an
[issue](https://github.com/stufield/gitr/issues/)
or
[pull request](https://github.com/stufield/gitr/pulls/).
## Installing
The easiest way to install `gitr` is to install directly from
[CRAN](https://CRAN.R-project.org/package=gitr)
```{r install-cran, eval = FALSE}
install.packages("gitr")
```
Alternatively install the development version from GitHub:
```{r install-gh, eval = FALSE}
remotes::install_github("stufield/gitr")
```
To install a *specific* tagged release, use:
```{r install-version, eval = FALSE}
remotes::install_github("stufield/gitr@v0.0.2")
```
-----------
## Loading
```{r load}
library(gitr)
```
## Examples
Here are some basic examples of the functionality grouped by common
actions:
#### Basics
```{r ver}
git_version()
```
```{r current}
gitr_current_br()
```
```{r default}
gitr_default_br()
```
```{r local}
gitr_local_br()
```
#### The Core Engine
```{r git-core}
(git("branch foo"))
git("branch -av")$stdout |>
cat(sep = "\n")
git("branch -D foo")$stdout
```
#### Committing
```{r commit-msgs}
gitr_commit_msgs(n = 3L)
```
```{r glog}
glog(5L)
```
```{r commit-diff, eval = FALSE}
git_diffcommits()
```
```{r reset-hard, eval = FALSE}
git_reset_hard()
```
```{r reset-soft, eval = FALSE}
git_reset_soft()
```
```{r uncommit, eval = FALSE}
git_uncommit()
```
```{r unstage, eval = FALSE}
git_unstage("DESCRIPTION")
```
#### Secure Hash Algorithm (SHA-1)
```{r sha}
is_sha("d670c93733f3e1d7c95df7f61ebf6ca0476f14e3")
is_sha(c("foo", "d670c93")) # vectorized
gitr_trim_sha("d670c93733f3e1d7c95df7f61ebf6ca0476f14e3")
gitr_trim_sha(c("foo", "d670c93")) # vectorized
gitr_current_sha()
```
#### Tags
```{r tag-recent}
gitr_recent_tag()
```
```{r tag-info}
gitr_tag_info()
```
#### Situation Report
```{r sitrep}
gitr_sitrep()
```
--------
## ZSH-aliases available in `gitr`
| alias | git command |
| :-------------------- | :---------------------------------------- |
| `ga()` | `git add` |
| `gst()` | `git status` |
| `gss()` | `git status -s` |
| `gau()` | `git add -u` |
| `gaa()` | `git add --all` |
| `gb()` | `git branch` |
| `gba()` | `git branch -a` |
| `gbd()` | `git branch -d/-D` |
| `gdf()` | `git diff ` |
| `gbnm()` | `git branch --no-merged` |
| `gbmm()` | `git branch --merged` |
| `gbr()` | `git branch --remote` |
| `gac()`, `gcn` | `git commit --no-verify --no-edit --amend`|
| `gcc()` | `git commit` |
| `gco()` | `git checkout` |
| `gcb()` | `git checkout -b` |
| `gcm()` | `git checkout git_default_br()` |
| `gcf()` | `git config --list` |
| `gnuke()` | `git reset --hard && git clean -dfx` |
| `gcmsg()` | `git commit -m` |
| `gp()` | `git push` |
| `gpu()` | `git push -u` |
| `gpd()` | `git push --dry-run` |
| `gpf()` | `git push --force-with-lease` |
| `gpr()` | `git pull --rebase --autostash -v` |
| `glog()` | `git log --oneline --decorate --graph` |
| `gwip()` | `git add -u && commit --no-verify -m "wip"` |
| `gclean()` | `git clean -f -d` |
| `grm()` | `git rm` |
| `grmc()` | `git rm --cached` |
| `gsta()` | `git stash` |
| `gstl()` | `git stash list` |
| `gpop()`,`gstp()` | `git stash pop` |
| `gstaa()` | `git stash apply` |
| `gstd()` | `git stash drop` |
| `gstc()` | `git stash clear` |
| `gsts()` | `git stash show --text` |
| `gtn()` | `git tag -n` |
| `grba()` | `git rebase --abort` |
| `grbc()` | `git rebase --continue` |
| `grbs()` | `git rebase --skip` |
| `grbm()` | `git rebase git_default_br()` |
| `grv()` | `git remote -v` |
-------------
## Full list of ZSH-aliases
For general reference, here is a list of the available aliases via the
`git-plugin` from [Oh-My-Zsh](https://github.com/ohmyzsh/ohmyzsh).
See also [Oh-My-Zsh](https://ohmyz.sh) for general installation.
#### Aliases
| alias | git command |
| :--------------- | :----------------------------------------------- |
| `gapa` | `git add --patch` |
| `gav` | `git add --verbose` |
| `gloga` | `git log --oneline --decorate --graph --all` |
| `gup` | `git pull --rebase` |
| `gupv` | `git pull --rebase -v` |
| `gupa` | `git pull --rebase --autostash` |
| `gupav` | `git pull --rebase --autostash -v` |
| `gap` | `git apply` |
| `gapt` | `git apply --3way` |
| `gbda` | `git branch --no-color --merged \| command grep -vE ^([+*] \| \s*($(git_main_branch) \| $(git_develop_branch))\s*$) \| command xargs git branch -d 2>/dev/null` |
| `gbl` | `git blame -b -w` |
| `gbs` | `git bisect` |
| `gbsb` | `git bisect bad` |
| `gbsg` | `git bisect good` |
| `gbsr` | `git bisect reset` |
| `gbss` | `git bisect start` |
| `gca` | `git commit -v -a` |
| `gca!` | `git commit -v -a --amend` |
| `gcan!` | `git commit -v -a --no-edit --amend` |
| `gcans!` | `git commit -v -a -s --no-edit --amend` |
| `gcam` | `git commit -a -m` |
| `gcsm` | `git commit -s -m` |
| `gcas` | `git commit -a -s` |
| `gcasm` | `git commit -a -s -m` |
| `gcl` | `git clone --recurse-submodules` |
| `gcor` | `git checkout --recurse-submodules` |
| `gcd` | `git checkout $(git_develop_branch)` |
| `gcount` | `git shortlog -sn` |
| `gcp` | `git cherry-pick` |
| `gcpa` | `git cherry-pick --abort` |
| `gcpc` | `git cherry-pick --continue` |
| `gcs` | `git commit -S` |
| `gcss` | `git commit -S -s` |
| `gcssm` | `git commit -S -s -m` |
| `gdca` | `git diff --cached` |
| `gdcw` | `git diff --cached --word-diff` |
| `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` |
| `gds` | `git diff --staged` |
| `gdt` | `git diff-tree --no-commit-id --name-only -r` |
| `gdup` | `git diff @{upstream}` |
| `gdw` | `git diff --word-diff` |
| `gf` | `git fetch` |
| `gfo` | `git fetch origin` |
| `gfg` | `git ls-files \| grep` |
| `gg` | `git gui citool` |
| `gga` | `git gui citool --amend` |
| `ggpur` | `ggu` |
| `ggpull` | `git pull origin $(git_current_branch)` |
| `ggpush` | `git push origin $(git_current_branch)` |
| `ggsup` | `git branch --set-upstream-to=origin/$(git_current_branch)`|
| `gpsup` | `git push --set-upstream origin $(git_current_branch)` |
| `ghh` | `git help` |
| `gignore` | `git update-index --assume-unchanged` |
| `gignored` | `git ls-files -v \| grep "^[[:lower:]]"` |
| `git-svn-dcommit-push` | `git svn dcommit && git push github $(git_main_branch):svntrunk` |
| `gl` | `git pull` |
| `glg` | `git log --stat` |
| `glgp` | `git log --stat -p` |
| `glgg` | `git log --graph` |
| `glgga` | `git log --graph --decorate --all` |
| `glgm` | `git log --graph --max-count=10` |
| `glo` | `git log --oneline --decorate` |
| `glol` | `git log --graph --pretty` |
| `glols="git log --graph --pretty` | `%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat"`
| `glod="git log --graph --pretty` | `%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'"`
| `glods="git log --graph --pretty` | `%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short"`
| `glola="git log --graph --pretty` | `%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all"`
| `gm` | `git merge` |
| `gmom` | `git merge origin/$(git_main_branch)` |
| `gmtl` | `git mergetool --no-prompt` |
| `gmtlvim` | `git mergetool --no-prompt --tool=vimdiff` |
| `gmum` | `git merge upstream/$(git_main_branch)` |
| `gma` | `git merge --abort` |
| `gpf!` | `git push --force` |
| `gpoat` | `git push origin --all && git push origin --tags` |
| `gpv` | `git push -v` |
| `gr` | `git remote` |
| `gra` | `git remote add` |
| `grb` | `git rebase` |
| `grbd` | `git rebase $(git_develop_branch)` |
| `grbi` | `git rebase -i` |
| `grbo` | `git rebase --onto` |
| `grev` | `git revert` |
| `grh` | `git reset` |
| `grhh` | `git reset --hard` |
| `groh` | `git reset origin/$(git_current_branch) --hard` |
| `grmv` | `git remote rename` |
| `grrm` | `git remote remove` |
| `grs` | `git restore` |
| `grset` | `git remote set-url` |
| `grss` | `git restore --source` |
| `grst` | `git restore --staged` |
| `grt` | `cd $(git rev-parse --show-toplevel \|\| echo .)` |
| `gru` | `git reset --` |
| `grup` | `git remote update` |
| `gsb` | `git status -sb` |
| `gsd` | `git svn dcommit` |
| `gsh` | `git show` |
| `gsi` | `git submodule init` |
| `gsps` | `git show --pretty=short --show-signature` |
| `gsr` | `git svn rebase` |
| `gstu` | `gsta --include-untracked` |
| `gstall` | `git stash --all` |
| `gsu` | `git submodule update` |
| `gsw` | `git switch` |
| `gswc` | `git switch -c` |
| `gswm` | `git switch $(git_main_branch)` |
| `gswd` | `git switch $(git_develop_branch)` |
| `gts` | `git tag -s` |
| `gtv` | `git tag \| sort -V` |
| `gtl` | `gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl` |
| `gunignore` | `git update-index --no-assume-unchanged` |
| `gunwip` | `git log -n 1 \| grep -q -c "\-\-wip\-\-" && git reset HEAD~1` |
| `glum` | `git pull upstream $(git_main_branch)` |
| `gwch` | `git whatchanged -p --abbrev-commit --pretty=medium` |
| `gam` | `git am` |
| `gamc` | `git am --continue` |
| `gams` | `git am --skip` |
| `gama` | `git am --abort` |
| `gamscp` | `git am --show-current-patch` |
#### LICENSE
Please note that this package is released with
a [LICENSE](https://github.com/stufield/gitr/blob/main/LICENSE.md).
By using in this package you agree to abide by its terms.