Merge remote-tracking branch 'upstream/master'
This commit is contained in:
350
README.markdown
350
README.markdown
@@ -2,77 +2,82 @@
|
|||||||
|
|
||||||
## Please post an issue if you would like to help out.
|
## Please post an issue if you would like to help out.
|
||||||
|
|
||||||
# SCM Breeze [](http://travis-ci.org/ndbroadbent/scm_breeze)
|
---
|
||||||
|
|
||||||
|
# SCM Breeze [](http://travis-ci.org/scmbreeze/scm_breeze)
|
||||||
|
|
||||||
> Streamline your SCM workflow.
|
> Streamline your SCM workflow.
|
||||||
|
|
||||||
**SCM Breeze** is a set of shell scripts (for `bash` and `zsh`) that enhance your interaction with git. It integrates with your shell to give you numbered file shortcuts,
|
**SCM Breeze** is a set of shell scripts (for `bash` and `zsh`) that enhance
|
||||||
a repository index with tab completion, and many other useful features.
|
your interaction with git. It integrates with your shell to give you numbered
|
||||||
|
file shortcuts, a repository index with tab completion, and many other useful
|
||||||
|
features.
|
||||||
|
|
||||||
<hr/>
|

|
||||||
|
|
||||||
- [SCM Breeze](#scm-breeze-)
|
|
||||||
- [Demos](#demos)
|
- [Installation](#installation)
|
||||||
|
- [Usage](#usage)
|
||||||
- [File Shortcuts](#file-shortcuts)
|
- [File Shortcuts](#file-shortcuts)
|
||||||
- [Git Status Shortcuts:](#git-status-shortcuts)
|
|
||||||
- ['ls' shortcuts:](#ls-shortcuts)
|
|
||||||
- [Other shortcuts](#other-shortcuts)
|
|
||||||
- [Keyboard bindings](#keyboard-bindings)
|
- [Keyboard bindings](#keyboard-bindings)
|
||||||
- [Repository Index](#repository-index)
|
- [Repository Index](#repository-index)
|
||||||
- [Linking External Project Design Directories](#linking-external-project-design-directories)
|
- [Linking External Project Design Directories](#linking-external-project-design-directories)
|
||||||
- [1) Create and configure a root design directory](#1-create-and-configure-a-root-design-directory)
|
|
||||||
- [2) Initialize design directories for your projects](#2-initialize-design-directories-for-your-projects)
|
|
||||||
- [3) Link existing design directories into your projects](#3-link-existing-design-directories-into-your-projects)
|
|
||||||
- [Contributing tools / scripts](#contributing-tools--scripts)
|
|
||||||
- [Installation](#installation)
|
|
||||||
- [Updating](#updating)
|
|
||||||
- [Uninstall](#uninstall)
|
|
||||||
- [Configuration](#configuration)
|
- [Configuration](#configuration)
|
||||||
- [1) Configure and use the provided SCM Breeze aliases](#1-configure-and-use-the-provided-scm-breeze-aliases)
|
- [Updating](#updating)
|
||||||
- [2) Use your own aliases](#2-use-your-own-aliases)
|
- [Uninstalling](#uninstalling)
|
||||||
- [Notes about Tab Completion for Aliases](#notes-about-tab-completion-for-aliases)
|
- [Notes about Tab Completion for Aliases](#notes-about-tab-completion-for-aliases)
|
||||||
- [Bash](#bash)
|
|
||||||
- [Zsh](#zsh)
|
|
||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
|
|
||||||
<hr/>
|
|
||||||
|
|
||||||
## Demos
|
## Installation
|
||||||
|
|
||||||
Adding a range of files, and pressing `Ctrl+X, C` to commit:
|
```bash
|
||||||
|
git clone git://github.com/scmbreeze/scm_breeze.git ~/.scm_breeze
|
||||||
|
~/.scm_breeze/install.sh
|
||||||
|
source ~/.bashrc # or source ~/.zshrc
|
||||||
|
```
|
||||||
|
|
||||||
<center><img src="http://i.imgur.com/3fD8cpo.gif" title="SCM Breeze Example Gif" /></center>
|
The install script creates required default configs and adds the following line
|
||||||
|
to your `.bashrc` or `.zshrc`:
|
||||||
|
|
||||||
<br/>
|
`[ -s "$HOME/.scm_breeze/scm_breeze.sh" ] && source "$HOME/.scm_breeze/scm_breeze.sh"`
|
||||||
|
|
||||||
<center><a href="http://www.youtube.com/watch?v=iKdp6uBfrvc" target="_blank"><img src="http://i.imgur.com/l7aGG.png"></a></center>
|
**Note:** SCM Breeze performs much faster if you have ruby installed.
|
||||||
|
|
||||||
<hr/>
|
|
||||||
|
|
||||||
## File Shortcuts
|
|
||||||
|
|
||||||
SCM Breeze makes it really easy to work with changed files, and groups of changed files.
|
|
||||||
Whenever you view your SCM status, each modified path is stored in a numbered environment variable.
|
|
||||||
You can configure the variable prefix, which is 'e' by default.
|
|
||||||
|
|
||||||
|
|
||||||
### Git Status Shortcuts:
|
## Usage
|
||||||
|
|
||||||
|
<center><a href="http://www.youtube.com/watch?v=iKdp6uBfrvc"
|
||||||
|
target="_blank"><img src="http://i.imgur.com/l7aGG.png"></a></center>
|
||||||
|
|
||||||
|
### File Shortcuts
|
||||||
|
|
||||||
|
SCM Breeze makes it really easy to work with changed files, and groups of
|
||||||
|
changed files. Whenever you view your SCM status, each modified path is stored
|
||||||
|
in a numbered environment variable. You can configure the variable prefix,
|
||||||
|
which is 'e' by default.
|
||||||
|
|
||||||
|
|
||||||
|
#### Git Status Shortcuts:
|
||||||
|
|
||||||
<div class="centered">
|
<div class="centered">
|
||||||
<img src="http://madebynathan.com/images/posts/2011/10/status_with_shortcuts-resized-post.png" width="590" alt="Git Status With Shortcuts" />
|
<img src="http://madebynathan.com/images/posts/2011/10/status_with_shortcuts-resized-post.png" width="590" alt="Git Status With Shortcuts" />
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 'ls' shortcuts:
|
|
||||||
|
#### 'ls' shortcuts:
|
||||||
|
|
||||||
<div class="centered">
|
<div class="centered">
|
||||||
<img src="http://i.imgur.com/72GE1.png" alt="Ls With Shortcuts" />
|
<img src="http://i.imgur.com/72GE1.png" alt="Ls With Shortcuts" />
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
These numbers (or ranges of numbers) can be used with any SCM or system command.
|
These numbers (or ranges of numbers) can be used with any SCM or system
|
||||||
|
command.
|
||||||
|
|
||||||
For example, if `ga` was your alias for `git add`, instead of typing something like:
|
For example, if `ga` was your alias for `git add`, instead of typing something
|
||||||
|
like:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ga assets/git_breeze/config* assets/git_breeze/install.sh
|
$ ga assets/git_breeze/config* assets/git_breeze/install.sh
|
||||||
@@ -84,8 +89,8 @@ You can type this instead:
|
|||||||
$ ga $e2 $e3 $e11
|
$ ga $e2 $e3 $e11
|
||||||
```
|
```
|
||||||
|
|
||||||
But SCM Breeze aliases `ga` to the `git_add_shortcuts` function,
|
But SCM Breeze aliases `ga` to the `git_add_shortcuts` function, which is smart
|
||||||
which is smart enough to expand integers and ranges, so all you need to type is:
|
enough to expand integers and ranges, so all you need to type is:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ga 2 3 11
|
$ ga 2 3 11
|
||||||
@@ -97,8 +102,8 @@ And if you want to add all unstaged changes (files 1 to 10):
|
|||||||
$ ga 1-10
|
$ ga 1-10
|
||||||
```
|
```
|
||||||
|
|
||||||
(Note that `ga` will also remove deleted files, unlike the standard `git add` command.
|
(Note that `ga` will also remove deleted files, unlike the standard `git add`
|
||||||
This behaviour can be turned off if you don't like it.)
|
command. This behaviour can be turned off if you don't like it.)
|
||||||
|
|
||||||
|
|
||||||
You can also diff, reset or checkout a file by typing:
|
You can also diff, reset or checkout a file by typing:
|
||||||
@@ -110,8 +115,8 @@ $ gco 5
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
You can use these shortcuts with system commands by passing your command through `exec_scmb_expand_args`
|
You can use these shortcuts with system commands by passing your command
|
||||||
(default alias is 'ge'):
|
through `exec_scmb_expand_args` (default alias is 'ge'):
|
||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -125,19 +130,21 @@ $ ge echo 1-3
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Other shortcuts
|
#### Other shortcuts
|
||||||
|
|
||||||
SCM Breeze adds a number of aliases to your shell. Use `list_aliases` to view all the aliases and their corresponding commands.
|
SCM Breeze adds a number of aliases to your shell. Use `list_aliases` to view
|
||||||
You can filter aliases by adding a search string: `list_aliases git log`
|
all the aliases and their corresponding commands. You can filter aliases by
|
||||||
|
adding a search string: `list_aliases git log`
|
||||||
|
|
||||||
There's also a `git_aliases` command, which just shows aliases for `git` commands. You can also pass in additional filters, e.g. `git_aliases log`.
|
There's also a `git_aliases` command, which just shows aliases for `git`
|
||||||
|
commands. You can also pass in additional filters, e.g. `git_aliases log`.
|
||||||
|
|
||||||
|
|
||||||
## Keyboard bindings
|
### Keyboard bindings
|
||||||
|
|
||||||
Some of my most common git commands are `git add` and `git commit`, so I wanted these
|
Some of my most common git commands are `git add` and `git commit`, so I wanted
|
||||||
to be as streamlined as possible. One way of speeding up commonly used commands is by binding them to
|
these to be as streamlined as possible. One way of speeding up commonly used
|
||||||
keyboard shortcuts.
|
commands is by binding them to keyboard shortcuts.
|
||||||
|
|
||||||
Here are the default key bindings:
|
Here are the default key bindings:
|
||||||
|
|
||||||
@@ -145,14 +152,13 @@ Here are the default key bindings:
|
|||||||
* `CTRL`+`x` `SPACE` => `git_commit_all` - commit everything
|
* `CTRL`+`x` `SPACE` => `git_commit_all` - commit everything
|
||||||
|
|
||||||
|
|
||||||
The commit shortcuts use the `git_commit_prompt` function, which gives a simple prompt like this:
|
The commit shortcuts use the `git_commit_prompt` function, which gives a simple
|
||||||
|
prompt like this:
|
||||||
|
|
||||||
<div class="centered">
|
<div class="centered"> <img
|
||||||
<img src="http://madebynathan.com/images/posts/2011/10/git_commit_all-resized-post.png" alt="Git Commit All" />
|
src="http://madebynathan.com/images/posts/2011/10/git_commit_all-resized-post.png"
|
||||||
</div>
|
alt="Git Commit All" /> </div> <br/> (When using bash, this commit prompt gives
|
||||||
<br/>
|
you access to your bash history via the arrow keys.) <br/>
|
||||||
(When using bash, this commit prompt gives you access to your bash history via the arrow keys.)
|
|
||||||
<br/>
|
|
||||||
|
|
||||||
And if you really want to speed up your workflow, you can type this:
|
And if you really want to speed up your workflow, you can type this:
|
||||||
|
|
||||||
@@ -168,23 +174,26 @@ This sends the `HOME` key, followed by `git_add_and_commit`:
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
## Repository Index
|
### Repository Index
|
||||||
|
|
||||||
The second feature is a repository index for all of your projects and submodules.
|
The second feature is a repository index for all of your projects and
|
||||||
This gives you super-fast switching between your project directories, with tab completion,
|
submodules. This gives you super-fast switching between your project
|
||||||
and it can even tab-complete down to project subdirectories.
|
directories, with tab completion, and it can even tab-complete down to project
|
||||||
This means that you can keep your projects organized in subfolders,
|
subdirectories. This means that you can keep your projects organized in
|
||||||
but switch between them as easily as if they were all in one folder.
|
subfolders, but switch between them as easily as if they were all in one
|
||||||
|
folder.
|
||||||
|
|
||||||
It's similar to [autojump](https://github.com/joelthelion/autojump), but it doesn't need to 'learn' anything,
|
It's similar to [autojump](https://github.com/joelthelion/autojump), but it
|
||||||
and it can do SCM-specific stuff like:
|
doesn't need to 'learn' anything, and it can do SCM-specific stuff like:
|
||||||
|
|
||||||
* Running a command for all of your repos (useful if you ever need to update a lot of remote URLs)
|
* Running a command for all of your repos (useful if you ever need to update a
|
||||||
|
lot of remote URLs)
|
||||||
* Update all of your repositories via a cron task
|
* Update all of your repositories via a cron task
|
||||||
|
|
||||||
The default alias for `git_index` is 'c', which might stand for 'code'
|
The default alias for `git_index` is 'c', which might stand for 'code'
|
||||||
|
|
||||||
You will first need to configure your repository directory, and then build the index:
|
You will first need to configure your repository directory, and then build the
|
||||||
|
index:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ c --rebuild
|
$ c --rebuild
|
||||||
@@ -192,10 +201,12 @@ $ c --rebuild
|
|||||||
# => ===== Indexed 64 repos in /home/ndbroadbent/code/.git_index
|
# => ===== Indexed 64 repos in /home/ndbroadbent/code/.git_index
|
||||||
```
|
```
|
||||||
|
|
||||||
Then you'll be able to switch between your projects, or show the list of indexed repos.
|
Then you'll be able to switch between your projects, or show the list of
|
||||||
|
indexed repos.
|
||||||
|
|
||||||
To switch to a project directory, you don't need to type the full project name. For example,
|
To switch to a project directory, you don't need to type the full project name.
|
||||||
to switch to the `capistrano` project, you could type any of the following:
|
For example, to switch to the `capistrano` project, you could type any of the
|
||||||
|
following:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ c capistrano
|
$ c capistrano
|
||||||
@@ -214,19 +225,20 @@ $ c capistrano/lib/
|
|||||||
# => cd ~/code/gems/capistrano/lib
|
# => cd ~/code/gems/capistrano/lib
|
||||||
```
|
```
|
||||||
|
|
||||||
Or if you want to go to a subdirectory within the `~/code` directory, prefix the first argument with a `/`:
|
Or if you want to go to a subdirectory within the `~/code` directory, prefix
|
||||||
|
the first argument with a `/`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~ $ c /gems
|
~ $ c /gems
|
||||||
~/code/gems $
|
~/code/gems $
|
||||||
```
|
```
|
||||||
|
|
||||||
## Linking External Project Design Directories
|
### Linking External Project Design Directories
|
||||||
|
|
||||||
When you're creating logos or icons for a project that uses `git`,
|
When you're creating logos or icons for a project that uses `git`, have you
|
||||||
have you ever wondered where you should store those `.psd` or `.xcf` files?
|
ever wondered where you should store those `.psd` or `.xcf` files? Do you
|
||||||
Do you commit all of your raw design files, or does it put you off that any changes to those files
|
commit all of your raw design files, or does it put you off that any changes to
|
||||||
will bloat your repository?
|
those files will bloat your repository?
|
||||||
|
|
||||||
Here were my goals when I set out to find a solution:
|
Here were my goals when I set out to find a solution:
|
||||||
|
|
||||||
@@ -235,166 +247,164 @@ Here were my goals when I set out to find a solution:
|
|||||||
* The design directory needed to be synchronized across all of my machines
|
* The design directory needed to be synchronized across all of my machines
|
||||||
|
|
||||||
The simplest way for me to synchronize files was via my Dropbox account.
|
The simplest way for me to synchronize files was via my Dropbox account.
|
||||||
However, if you work with a larger team, you could set up a shared design directory on one
|
However, if you work with a larger team, you could set up a shared design
|
||||||
of your servers and synchronize it with `rsync`.
|
directory on one of your servers and synchronize it with `rsync`.
|
||||||
|
|
||||||
|
|
||||||
### 1) Create and configure a root design directory
|
#### 1) Create and configure a root design directory
|
||||||
|
|
||||||
I created my root design directory at `~/Dropbox/Design`.
|
I created my root design directory at `~/Dropbox/Design`.
|
||||||
|
|
||||||
After you've created your root design directory, edit `~/.scmbrc` and set `root_design_dir`
|
After you've created your root design directory, edit `~/.scmbrc` and set
|
||||||
to the directory you just created.
|
`root_design_dir` to the directory you just created. You can also configure
|
||||||
You can also configure the design directory that's created in each of your projects
|
the design directory that's created in each of your projects (default:
|
||||||
(default: `design_assets`), as well as the subdirectories you would like to use.
|
`design_assets`), as well as the subdirectories you would like to use. The
|
||||||
The default base subdirectories are: Images, Backgrounds, Logos, Icons, Mockups, and Screenshots.
|
default base subdirectories are: Images, Backgrounds, Logos, Icons, Mockups,
|
||||||
|
and Screenshots.
|
||||||
|
|
||||||
After you have changed these settings, remember to run `source ~/.bashrc` or `source ~/.zshrc`.
|
After you have changed these settings, remember to run `source ~/.bashrc` or
|
||||||
|
`source ~/.zshrc`.
|
||||||
|
|
||||||
|
|
||||||
### 2) Initialize design directories for your projects
|
#### 2) Initialize design directories for your projects
|
||||||
|
|
||||||
To set up the design directories and symlinks, go to a project's directory and run:
|
To set up the design directories and symlinks, go to a project's directory and
|
||||||
|
run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
design init
|
design init
|
||||||
```
|
```
|
||||||
|
|
||||||
If your root directory is `~/Dropbox/Design`, directories will be created at
|
If your root directory is `~/Dropbox/Design`, directories will be created at
|
||||||
`~/Dropbox/Design/projects/my_project/Backgrounds`, `~/Dropbox/Design/projects/my_project/Icons`, etc.
|
`~/Dropbox/Design/projects/my_project/Backgrounds`,
|
||||||
|
`~/Dropbox/Design/projects/my_project/Icons`, etc.
|
||||||
|
|
||||||
It will then symlink the project from your root design directory into your project's design directory,
|
It will then symlink the project from your root design directory into your
|
||||||
so you end up with:
|
project's design directory, so you end up with:
|
||||||
|
|
||||||
* `my_project/design_assets` -> `~/Dropbox/Design/projects/my_project`
|
* `my_project/design_assets` -> `~/Dropbox/Design/projects/my_project`
|
||||||
|
|
||||||
It also adds this directory to `.git/info/exclude` so that git ignores it.
|
It also adds this directory to `.git/info/exclude` so that git ignores it.
|
||||||
|
|
||||||
|
|
||||||
If you use the git repository index,
|
If you use the git repository index, you can run the following batch command to
|
||||||
you can run the following batch command to set up these directories for all of your git repos at once:
|
set up these directories for all of your git repos at once:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git_index --batch-cmd design init
|
git_index --batch-cmd design init
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
If you want to remove any empty design directories, run:
|
If you want to remove any empty design directories, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
design trim
|
design trim
|
||||||
```
|
```
|
||||||
|
|
||||||
And if you want to remove all of a project's design directories, even if they contain files:
|
And if you want to remove all of a project's design directories, even if they
|
||||||
|
contain files:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
design rm
|
design rm
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### 3) Link existing design directories into your projects
|
#### 3) Link existing design directories into your projects
|
||||||
|
|
||||||
If you've set up your design directories on one machine, you'll want them
|
If you've set up your design directories on one machine, you'll want them to be
|
||||||
to be synchronized across all of your other development machines.
|
synchronized across all of your other development machines.
|
||||||
|
|
||||||
Just run the following command on your other machines after you've configured the root design directory:
|
Just run the following command on your other machines after you've configured
|
||||||
|
the root design directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
design link
|
design link
|
||||||
```
|
```
|
||||||
|
|
||||||
This uses your git index to figure out where to create the symlinks.
|
This uses your git index to figure out where to create the symlinks. If you
|
||||||
If you don't use the git index, the same outcome could be achieved by running 'design init'
|
don't use the git index, the same outcome could be achieved by running 'design
|
||||||
for each of the projects.
|
init' for each of the projects.
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
## Contributing tools / scripts
|
SCM Breeze is configured via automatically installed `~/.*.scmbrc` files. To
|
||||||
|
change git configuration, edit `~/.git.scmbrc`.
|
||||||
|
|
||||||
If you have any awesome SCM scripts lurking in your `.bashrc` or `.zshrc`,
|
Each feature is modular, so you are free to ignore the parts you don't want to
|
||||||
please feel free to send me a pull request.
|
use. Just comment out the relevant line in `~/.scm_breeze/scm_breeze.sh`.
|
||||||
It would be cool to make this project into an [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) for SCMs.
|
|
||||||
|
**Note:** After changing any settings, you will need to run `source ~/.bashrc`
|
||||||
|
(or `source ~/.zshrc`)
|
||||||
|
|
||||||
|
I know we grow attached to the aliases we use every day, so I've made the alias
|
||||||
|
system completely customizable. You have two options when it comes to aliases:
|
||||||
|
|
||||||
|
|
||||||
# Installation
|
### 1) Configure and use the provided SCM Breeze aliases
|
||||||
|
|
||||||
```bash
|
Just tweak the aliases in `~/.git.scmbrc`. You can also change or remove any
|
||||||
git clone git://github.com/ndbroadbent/scm_breeze.git ~/.scm_breeze
|
keyboard shortcuts. These aliases also come with tab completion. For example,
|
||||||
~/.scm_breeze/install.sh
|
you can type `gco <tab>` to tab complete your list of branches.
|
||||||
source ~/.bashrc # or source ~/.zshrc
|
|
||||||
```
|
|
||||||
|
|
||||||
The install script creates required default configs and adds the following line to your `.bashrc` or `.zshrc`:
|
|
||||||
|
|
||||||
`[ -s "$HOME/.scm_breeze/scm_breeze.sh" ] && source "$HOME/.scm_breeze/scm_breeze.sh"`
|
|
||||||
|
|
||||||
**Note:** SCM Breeze performs much faster if you have ruby installed.
|
|
||||||
|
|
||||||
|
|
||||||
# Updating
|
### 2) Use your own aliases
|
||||||
|
|
||||||
Please run `update_scm_breeze` to fetch the latest code. This will update SCM Breeze from Github,
|
In your `git.scmbrc` config file, just set the `git_setup_aliases` option to
|
||||||
and will create or patch your `~/.*.scmbrc` config files if any new settings are added.
|
`no`. Your existing git aliases will then be used, and you will still be able
|
||||||
|
to use the numeric shortcuts feature. SCM Breeze creates a function to wrap
|
||||||
|
the 'git' command, which expands numeric arguments, and uses `hub` if
|
||||||
|
available.
|
||||||
|
|
||||||
# Uninstall
|
A few aliases will still be defined for the central SCM Breeze features, such
|
||||||
|
as `gs` for the extended `git status`, and `ga` for the `git add` function.
|
||||||
|
|
||||||
|
If you already have an alias like `alias gco="git checkout"`, you can now type
|
||||||
|
`gco 1` to checkout the first file in the output of SCM Breeze's `git status`.
|
||||||
|
|
||||||
|
|
||||||
|
## Notes about Tab Completion for Aliases
|
||||||
|
|
||||||
|
### Bash
|
||||||
|
|
||||||
|
If you use your own aliases, SCM Breeze will **not** set up bash tab completion
|
||||||
|
for your aliases. You will need to set that up yourself.
|
||||||
|
|
||||||
|
|
||||||
|
### Zsh
|
||||||
|
|
||||||
|
You just need to set the option: `setopt no_complete_aliases` (oh-my-zsh sets
|
||||||
|
this by default). Zsh will then expand aliases like `gb` to `git branch`, and
|
||||||
|
use the completion for that.
|
||||||
|
|
||||||
|
|
||||||
|
## Updating
|
||||||
|
|
||||||
|
Please run `update_scm_breeze` to fetch the latest code. This will update SCM
|
||||||
|
Breeze from Github, and will create or patch your `~/.*.scmbrc` config files if
|
||||||
|
any new settings are added.
|
||||||
|
|
||||||
|
|
||||||
|
## Uninstalling
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~/.scm_breeze/uninstall.sh
|
~/.scm_breeze/uninstall.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
The uninstall script removes the following line from your `.bashrc` or `.zshrc`:
|
The uninstall script removes the following line from your `.bashrc` or
|
||||||
|
`.zshrc`:
|
||||||
|
|
||||||
`[ -s "$HOME/.scm_breeze/scm_breeze.sh" ] && source "$HOME/.scm_breeze/scm_breeze.sh"`
|
`[ -s "$HOME/.scm_breeze/scm_breeze.sh" ] && source "$HOME/.scm_breeze/scm_breeze.sh"`
|
||||||
|
|
||||||
# Configuration
|
|
||||||
|
|
||||||
SCM Breeze is configured via automatically installed `~/.*.scmbrc` files.
|
## Contributing
|
||||||
To change git configuration, edit `~/.git.scmbrc`.
|
|
||||||
|
|
||||||
Each feature is modular, so you are free to ignore the parts you don't want to use.
|
SCM Breeze lives on Github at
|
||||||
Just comment out the relevant line in `~/.scm_breeze/scm_breeze.sh`.
|
[`scmbreeze/scm_breeze`](https://github.com/scmbreeze/scm_breeze)
|
||||||
|
|
||||||
**Note:** After changing any settings, you will need to run `source ~/.bashrc` (or `source ~/.zshrc`)
|
|
||||||
|
|
||||||
I know we grow attached to the aliases we use every day, so I've made the alias system completely customizable.
|
|
||||||
You have two options when it comes to aliases:
|
|
||||||
|
|
||||||
### 1) Configure and use the provided SCM Breeze aliases
|
|
||||||
|
|
||||||
Just tweak the aliases in `~/.git.scmbrc`. You can also change or remove any keyboard shortcuts.
|
|
||||||
These aliases also come with tab completion. For example, you can type `gco <tab>` to tab complete your list of branches.
|
|
||||||
|
|
||||||
### 2) Use your own aliases
|
|
||||||
|
|
||||||
In your `git.scmbrc` config file, just set the `git_setup_aliases` option to `no`.
|
|
||||||
Your existing git aliases will then be used, and you will still be able to use the numeric shortcuts feature.
|
|
||||||
SCM Breeze creates a function to wrap the 'git' command, which expands numeric arguments, and uses `hub` if available.
|
|
||||||
|
|
||||||
A few aliases will still be defined for the central SCM Breeze features, such as `gs` for the extended `git status`,
|
|
||||||
and `ga` for the `git add` function.
|
|
||||||
|
|
||||||
If you already have an alias like `alias gco="git checkout"`,
|
|
||||||
you can now type `gco 1` to checkout the first file in the output of SCM Breeze's `git status`.
|
|
||||||
|
|
||||||
# Notes about Tab Completion for Aliases
|
|
||||||
|
|
||||||
### Bash
|
|
||||||
|
|
||||||
If you use your own aliases, SCM Breeze will **not** set up bash tab completion for your aliases.
|
|
||||||
You will need to set that up yourself.
|
|
||||||
|
|
||||||
### Zsh
|
|
||||||
|
|
||||||
You just need to set the option: `setopt no_complete_aliases` (oh-my-zsh sets this by default).
|
|
||||||
Zsh will then expand aliases like `gb` to `git branch`, and use the completion for that.
|
|
||||||
|
|
||||||
# Contributing
|
|
||||||
|
|
||||||
SCM Breeze lives on Github at [https://github.com/ndbroadbent/scm_breeze](https://github.com/ndbroadbent/scm_breeze)
|
|
||||||
|
|
||||||
Please feel free to fork and send pull requests, especially if you would like to build these features
|
|
||||||
for Mercurial, SVN, etc.
|
|
||||||
|
|
||||||
|
If you have any awesome SCM scripts lurking in your `.bashrc` or `.zshrc`,
|
||||||
|
please feel free to send me a pull request. It would be cool to make this
|
||||||
|
project into an [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) for
|
||||||
|
SCMs.
|
||||||
|
|
||||||
***Enjoy!***
|
***Enjoy!***
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,15 @@
|
|||||||
|
|
||||||
@project_root = File.exist?(".git") ? Dir.pwd : `\git rev-parse --show-toplevel 2> /dev/null`.strip
|
@project_root = File.exist?(".git") ? Dir.pwd : `\git rev-parse --show-toplevel 2> /dev/null`.strip
|
||||||
|
|
||||||
@git_status = `\git status --porcelain 2> /dev/null`
|
@git_status = `\git status --porcelain -b 2> /dev/null`
|
||||||
|
|
||||||
git_branch = `\git branch -v 2> /dev/null`
|
git_status_lines = @git_status.split("\n")
|
||||||
@branch = git_branch[/^\* (\(no branch\)|[^ ]*)/, 1]
|
git_branch = git_status_lines[0]
|
||||||
@ahead = git_branch[/^\* [^ ]* *[^ ]* *\[ahead ?(\d+).*\]/, 1]
|
@branch = git_branch[/^## (?:Initial commit on )?([^ \.]+)/, 1]
|
||||||
@behind = git_branch[/^\* [^ ]* *[^ ]* *\[.*behind ?(\d+)\]/, 1]
|
@ahead = git_branch[/\[ahead ?(\d+).*\]/, 1]
|
||||||
|
@behind = git_branch[/\[.*behind ?(\d+)\]/, 1]
|
||||||
|
|
||||||
@changes = @git_status.split("\n")
|
@changes = git_status_lines[1..-1]
|
||||||
# Exit if too many changes
|
# Exit if too many changes
|
||||||
exit if @changes.size > ENV["gs_max_changes"].to_i
|
exit if @changes.size > ENV["gs_max_changes"].to_i
|
||||||
|
|
||||||
|
|||||||
@@ -166,7 +166,12 @@ git_clear_vars() {
|
|||||||
local i
|
local i
|
||||||
for (( i=1; i<=$gs_max_changes; i++ )); do
|
for (( i=1; i<=$gs_max_changes; i++ )); do
|
||||||
# Stop clearing after first empty var
|
# Stop clearing after first empty var
|
||||||
if [[ -z "$(eval echo "\${$git_env_char$i:-}")" ]]; then break; fi
|
local env_var_i=${git_env_char}${i}
|
||||||
|
if [[ -z "$(eval echo "\${$env_var_i:-}")" ]]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
unset $env_var_i
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
# Remove line from bashrc and zshrc if present.
|
# Remove line from bashrc and zshrc if present.
|
||||||
for rc in bashrc zshrc; do
|
for rc in bashrc zshrc; do
|
||||||
sed -i '/scm_breeze/d' "$HOME/.$rc"
|
sed -i '/scm_breeze/d' "$HOME/.$rc"
|
||||||
printf "== Removed SCM Breeze from '$HOME/.$rc'\n"
|
printf "Removed SCM Breeze from %s\n" "$HOME/.$rc"
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user