Nit

Improving your Git workflow since 2013.

Nit is a thin command-line wrapper for git. It gives you handy shortcuts for your everyday work with git, reduces your typing and is easily extendable with your own commands.

Installation

gem install nit

This will install the nit shell command.

Status

The blank nit command will be your best friend.

nit

It's a git status on LSD.

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   on_stage.rb  [a]
#   modified:   staged.rb  [b]
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   brandnew.rb  [c]
#   new.rb  [d]

First of all, it shows you the current branch in bold.

File Indexes

Secondly, the status screen renders a file index for each file which can be used on the command-line.

Indexes per default are characters on the right-hand side of the filename.

#   modified:   on_stage.rb  [a]

This can be configured, in case you prefer digits.

#   modified:   on_stage.rb  [0]

You can also have the indexes prepended to the filename.

#   modified:   [a] on_stage.rb

Learn more.

Commit

To commit files, you no longer use the filename but their indexes.

nit commit a c

Which will run

git add on_stage.rb
git add brandnew.rb
git commit

Note that nits adds and commits an already staged file and an untracked file in the same step.

This could also be run as

nit commit ac

Nit will extract the correct indexes.

Auto-Expansion Of Commands

You don't have to type nit commit everytime. Use a short-cut, nit figures out what command you want. This command will work, too.

nit co abc

Add

Adding with nit becomes obsolete. It is handled by the commit command.

Ignoring Files

When files on the status screen get in your way you can ignore them. Nit will simply not consider them anymore until you unignore them.

Ignoring files is roughly equivalent to git stash. However, instead of having to remember dozens of stashes, you simply tell nit to hide files from your status. That helps focusing on the files you are actually working on. Trust us.

nit ignore a d

This tells nit to ignore on_stage.rb and new.rb.

$ nit

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   staged.rb  [a]
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   brandnew.rb  [b]
#
# Ignored files: 2

The ignored files are now longer visible. However, the last line reminds you that there are files ignored.

To get a list of ignored files, run:

nit ignore
[a] on_stage.rb
[b] new.rb

If you want to commit to the ignored files, just unignore them, again.

nit unignore a

Push

To push your changes, run the following command.

nit push

Will figure out the current branch and run

git push origin <current branch>

Note that pull and push accept command-line options, so this will push your tags as well, if you're releasing.

nit push --tags

Pull

The same works for nit pull.

Arbitrary Commands

You can use nit's index interpolation for any git command.

nit diff ab

Manual Configuration

Some operations require nit to save application state. This is done in the .nit YAML file in your working directory. You can manually edit it.

Alternative Indexing

You can have number-based indexing.

modified:   on_stage.rb  [0]
modified:   staged.rb  [1]

In .nit, do

indexer = "IntegerIndexer"

Some people prefer the index prepending the file name.

modified:  [0] on_stage.rb
modified:  [1] staged.rb

Nap in the park.

index_renderer = "PrependIndexRenderer"

However, scientific studies with nit over the last 18 years have proven that characters instead of digits are faster to reach when typing. Also, indexes appended to the filename make them easier to read when deciding what to commit.

Extending Nit

Extending nit with your own commands can be done either with gems or by placing the extensions into your .nit directory. This will be implemented and documented soon.

More

There are plenty of more features planned for the upcoming versions.

License

Copyright (c) 2013, Nick Sutterer [email protected]

Released under the MIT License.