mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-12 01:27:53 +08:00
96 lines
4.7 KiB
Markdown
Vendored
96 lines
4.7 KiB
Markdown
Vendored
# 👣 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.
|