# 👣 gina.vim     [](https://github.com/vim-jp/vital.vim) [](LICENSE) [](doc/gina.txt) [](doc/gina-develop.txt) [](https://github.com/lambdalisue/gina.vim/actions?query=workflow%3Areviewdog) [](https://github.com/lambdalisue/gina.vim/actions?query=workflow%3Avim) [](https://github.com/lambdalisue/gina.vim/actions?query=workflow%3Aneovim) gina.vim (gina) is a plugin to asynchronously control git repositories. ## Presentation [](https://www.youtube.com/watch?v=zkANQ9l7YDM) I've talked about what the gina.vim is in [VimConf2017](http://vimconf.vim-jp.org/2017/) ([Slide](https://lambdalisue.github.io/vimconf2017/assets/player/KeynoteDHTMLPlayer.html)). Check it out if you would like to feel what the gina.vim is. ## Usage The following is a schematic image of general working-flow with gina. ``` ┌─────┬──────────┐ │ │ │ #DIRTY# │ ▼ ▲ │ :Gina status │ << : stage │ │ │ │ >> : unstage │ │ │ │ -- : toggle :write │ #STAGED# │ == : discard ▲ │ │ │ pp : patch │ ├──────────┤ │ dd : diff │ │ ▼ #CLEAN# │ :Gina commit │ ! : switch --amend │ │ │ │ :w : save cache │ ▼ │ │ :q : commit changes (confirm) └────────────────┘ │ :wq : commit changes (immediate) ``` So basically user would 1. Edit contents in a git repository 2. Stage changes with `:Gina status` 3. Commit changes with `:Gina commit` See `:h gina-usage` for advance usage. Gina provides a lot more features. ## Pros. - A git detection is fast and accurate - It does not require `git` process so incredibly fast - Used in [lambdalisue/vim-gita][], for several years - Commands are asynchronously performed - Users don't have to wait `:Gina push` (`git push`) - Asynchronous feature in Neovim is great. `:Gina log` (`git log`) on **Linux** repository won't freeze Neovim - Single command. Users do not need to remember tons of commands - `:Gina {command}` will execute a gina command or a git raw command asynchronously - `:Gina! {command}` will execute a git raw command asynchronously - `:Gina!! {command}` will execute a git raw command in a shell (mainly for `:Gina!! add -p` or `:Gina!! rebase -i`) - Action based. Users do not need to remember tons of mappings - `?` to see the help - `a` to select an action to perform (complete with `<Tab>`) - `.` to repeat previous action - All action can map to an actual keymap - Author tried to follow Vim's flavor - No mapping for `ee` or whatever which conflicts with Vim's native mappings (like vim-gita does...) - Customizable - Users can define action aliases and mappings - Users can define default options and aliases of command - More - Tested on all major platforms - Powered by [vim-jp/vital.vim][], mean that the things are unit tested - Gina add some behaviour test as well [lambdalisue/vim-gita]: https://github.com/lambdalisue/vim-gita [vim-jp/vital.vim]: https://github.com/vim-jp/vital.vim ## Contribution Any contribution including documentations are welcome. Contributers should install [thinca/vim-themis][] to run tests before sending a PR if they applied some modification to the code. PRs which does not pass tests won't be accepted. [thinca/vim-themis]: https://github.com/thinca/vim-themis ## License The code in gina.vim follows MIT license texted in [LICENSE](./LICENSE). Contributors need to agree that any modifications sent in this repository follow the license.