2013-05-27 22:30:00 +02:00
|
|
|
\input texinfo @c -*-texinfo-*-
|
|
|
|
@c %**start of header
|
|
|
|
@setfilename gitto.info
|
|
|
|
@settitle Gitto
|
|
|
|
@c %**end of header
|
|
|
|
@copying
|
|
|
|
Gitto User Manual.
|
|
|
|
|
|
|
|
Copyright @copyright{} 2013 Tom Willemse
|
|
|
|
|
|
|
|
@quotation
|
|
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
|
|
under the terms of the GNU Free Documentation License, Version 1.3
|
|
|
|
or any later version published by the Free Software Foundation;
|
|
|
|
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
|
|
|
A copy of the license is included in the section entitled ``GNU
|
|
|
|
Free Documentation License''.
|
|
|
|
|
|
|
|
A copy of the license is also available from the Free Software
|
|
|
|
Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
|
|
|
|
|
|
|
|
@end quotation
|
|
|
|
|
|
|
|
The document was typeset with
|
|
|
|
@uref{http://www.texinfo.org/, GNU Texinfo}.
|
|
|
|
|
|
|
|
@end copying
|
|
|
|
|
|
|
|
@titlepage
|
|
|
|
@title Gitto
|
|
|
|
@subtitle Gitto User Manual
|
|
|
|
@author Tom Willemse <tom@@ryuslash.org>
|
|
|
|
@page
|
|
|
|
@vskip 0pt plus 1filll
|
|
|
|
@insertcopying
|
|
|
|
@end titlepage
|
|
|
|
|
|
|
|
@dircategory Individual utilities
|
|
|
|
@direntry
|
|
|
|
* Gitto: (gitto). Keep track of your git repositories.
|
|
|
|
@end direntry
|
|
|
|
|
|
|
|
@c Output the table of the contents at the beginning.
|
|
|
|
@contents
|
|
|
|
|
|
|
|
@ifnottex
|
|
|
|
@node Top, Introduction, (dir), (dir)
|
|
|
|
@top Gitto
|
|
|
|
|
|
|
|
This is the manual for gitto. Gitto helps you keep track of the various
|
|
|
|
git repositories you have stored on your hard-drive(s).
|
|
|
|
|
|
|
|
@insertcopying
|
|
|
|
@end ifnottex
|
|
|
|
|
|
|
|
@c Generate the nodes for this menu with `C-c C-u C-m'.
|
|
|
|
@menu
|
|
|
|
* Introduction::
|
|
|
|
* Usage::
|
|
|
|
* Configuration::
|
|
|
|
* Copying This Manual::
|
|
|
|
* Index::
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@c Update all node entries with `C-c C-u C-n'.
|
|
|
|
@c Insert new nodes with `C-c C-c n'.
|
|
|
|
@node Introduction, Usage, Top, Top
|
|
|
|
@chapter Introduction
|
|
|
|
|
|
|
|
This chapter offers a few introductory sections that will explain why
|
|
|
|
you might want to use gitto and how to get it running.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Features::
|
|
|
|
* Installation::
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Features, Installation, Introduction, Introduction
|
|
|
|
@section Features
|
|
|
|
|
|
|
|
gitto was started as a way to view the status of the repositories that
|
|
|
|
were registered with it. It has since also gained somewhat of a
|
|
|
|
management function.
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
First, it allows you to see an overview of the status of your git
|
|
|
|
repositories. For each registered repository it will show you the
|
|
|
|
following information:
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
The name of the repository. This is the directory name in which the
|
|
|
|
repository is located.
|
|
|
|
|
|
|
|
@item
|
|
|
|
The state of the worktree, clean or dirty. Dirty meaning that there are
|
|
|
|
uncommitted changes in the worktree.
|
|
|
|
|
|
|
|
@item
|
|
|
|
It shows the following information for each branch:
|
|
|
|
|
|
|
|
@itemize
|
|
|
|
@item
|
|
|
|
The name of the branch.
|
|
|
|
|
|
|
|
@item
|
|
|
|
How many commits the local repository has that have not been pushed to
|
|
|
|
the branch's upstream remote.
|
|
|
|
|
|
|
|
@item
|
|
|
|
How many commits the branch's upstream remote has that have not been
|
|
|
|
merged into the local repository.
|
|
|
|
|
|
|
|
@item
|
|
|
|
How long ago the last known commit pushed to the branch's upstream
|
|
|
|
remote was. If the branch has no upstream remote this will always be
|
|
|
|
@dfn{Never}.
|
|
|
|
@end itemize
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
@item
|
|
|
|
It allows the user to specify a template of settings which can be merged
|
|
|
|
with the registered repository's setting. This makes it easy to
|
|
|
|
generalize your configuration.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Along with specifying a template for configuration settings the user can
|
|
|
|
also specify a list of repository names which should be excluded from
|
|
|
|
the merging of settings. This is useful when you have a few repositories
|
|
|
|
that you don't push to the same remotes or that have different needs for
|
|
|
|
configuration, perhaps because they are forks or clones of someone
|
|
|
|
else's project.
|
|
|
|
|
|
|
|
@item
|
|
|
|
It allows the user to specify a list of hooks which should be installed
|
|
|
|
in the repositories. This also looks at the exclude list and will not
|
|
|
|
install any hooks for projects in the exclude list. This is useful when
|
|
|
|
you have hooks that all your projects use, for example a
|
|
|
|
@file{commit-msg} hook that ensures correct style, or a
|
|
|
|
@file{pre-commit} hook that ensures there are no errors being committed.
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
|
|
|
|
@node Installation, , Features, Introduction
|
|
|
|
@section Installation
|
|
|
|
|
|
|
|
There is a package available for gitto in the
|
|
|
|
@uref{https://aur.archlinux.org,Archlinux User Repository}@footnote{At
|
|
|
|
https://aur.archlinux.org/packages/gitto-git/}.
|
|
|
|
|
|
|
|
If you don't use Archlinux or you prefer installing it manually you
|
|
|
|
should first grab the source from somewhere and then it is a matter of
|
|
|
|
using:
|
|
|
|
|
|
|
|
@example
|
|
|
|
make
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
and then, as root:
|
|
|
|
|
|
|
|
@example
|
|
|
|
make install
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
or if you wish to install it somewhere other than in the default
|
|
|
|
location:
|
|
|
|
|
|
|
|
@example
|
|
|
|
make install DESTDIR=/path/to/where/you/want/it
|
|
|
|
@end example
|
|
|
|
|
|
|
|
|
|
|
|
@node Usage, Configuration, Introduction, Top
|
|
|
|
@chapter Usage
|
|
|
|
|
|
|
|
In order to use gitto you should first register some repositories. To
|
|
|
|
register a repository you can use the @command{add} command.
|
|
|
|
|
|
|
|
@deffn Command add location
|
|
|
|
This command checks if @var{location} contains a @file{.git} directory,
|
|
|
|
which indicates it being a git repository, and registers @var{location}
|
|
|
|
if so. Example:
|
|
|
|
|
|
|
|
@example
|
|
|
|
gitto add /path/to/your/project
|
|
|
|
@end example
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
If ever you want to stop keeping track of the status of a repository,
|
|
|
|
for example if you have given up on a project, you can use the
|
|
|
|
@command{remove} command.
|
|
|
|
|
|
|
|
@deffn Command remove location
|
|
|
|
Remove @var{location} from the list of registered repositories. This
|
|
|
|
first checks to see whether or not this repository has even been
|
|
|
|
registered.
|
2014-03-03 23:59:19 +01:00
|
|
|
|
|
|
|
@var{location} may be either an absolute or relative path, or it may
|
|
|
|
also be the name of a repository as displayed by @command{list}.
|
|
|
|
|
|
|
|
In case a name is specified and there are multiple possibilities a
|
|
|
|
list will be presented to you and you may choose which of the
|
|
|
|
repositories to remove based on the locations of each repository. The
|
|
|
|
question will be repeated until a valid answer is given (a number
|
|
|
|
appearing in the printed list).
|
2013-05-27 22:30:00 +02:00
|
|
|
@end deffn
|
|
|
|
|
|
|
|
In the event you (re)move some of your repositories and don't have the
|
|
|
|
energy to remove them all, there is also the @command{purge} command.
|
|
|
|
|
|
|
|
@deffn Command purge
|
|
|
|
Goes through all registered repositories and checks if they still exist
|
|
|
|
in the given place. In the case that they don't they are removed from
|
|
|
|
the registered repository list. This is useful when you have moved or
|
|
|
|
deleted a number of repositories.
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
If you are ever unsure if you have registered a repository or not, you
|
|
|
|
can always use the @command{check} command.
|
|
|
|
|
|
|
|
@deffn Command check location
|
|
|
|
Checks if @var{location} has been registered. Prints the result.
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
If you merely wish to know the locations of the repositories that have
|
|
|
|
been registered you can use @command{list}'s @command{locations}
|
|
|
|
sub-command.
|
|
|
|
|
|
|
|
@deffn Command list
|
|
|
|
This is the default command, equivalent to calling gitto without any
|
|
|
|
commands specified. It has one sub-command: @command{locations}.
|
|
|
|
|
|
|
|
@deffn Sub-Command locations
|
|
|
|
This lists the absolute file names of the registered repositories.
|
|
|
|
@end deffn
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
If you wish to manage your git configurations in a global way you can
|
|
|
|
use the various @command{config} commands.
|
|
|
|
|
|
|
|
@deffn Command config
|
|
|
|
This command shows a list of all the configurations of all the
|
|
|
|
registered repositories. It has a number of sub-commands with which you
|
|
|
|
can manage your git configurations globally.
|
|
|
|
|
|
|
|
@deffn Sub-Command global
|
|
|
|
Shows the template configuration as it would look in a git configuration
|
|
|
|
file format. Since it does not operate on any repository no name
|
|
|
|
substitution is performed.
|
|
|
|
@end deffn
|
|
|
|
|
2013-11-11 00:09:45 +01:00
|
|
|
@deffn Sub-Command update [location]
|
|
|
|
If @var{location} is specified, operate on it, otherwise operate on
|
|
|
|
all registered repositories not in the exclusion list.
|
|
|
|
|
2013-05-27 22:30:00 +02:00
|
|
|
Merge the template configuration with each repository's existing
|
|
|
|
configuration. This adds settings and sections that weren't there before
|
|
|
|
and overwrites settings that were. This is a destructive operation, so
|
|
|
|
be sure your settings are correct.
|
|
|
|
@end deffn
|
|
|
|
|
2013-11-11 00:09:45 +01:00
|
|
|
@deffn Sub-Command hooks [location]
|
|
|
|
If @var{location} is specified, operate on it, otherwise operate on
|
|
|
|
all registered repositories not in the exclusion list.
|
|
|
|
|
2013-05-27 22:30:00 +02:00
|
|
|
Install the hooks specified in the configuration file into each
|
|
|
|
repository. Each hook is a symlink to the configured executable.
|
|
|
|
@end deffn
|
|
|
|
@end deffn
|
|
|
|
|
2014-03-04 21:41:30 +01:00
|
|
|
In case you can't be bothered to go to whichever location you need to
|
|
|
|
go to in order to push a repository, or have a bunch of repositories
|
|
|
|
which all need a push, you can use the @command{push} command.
|
|
|
|
|
|
|
|
@deffn Command push [repository]
|
|
|
|
Pushes all branches of all repositories to their default upstream by
|
|
|
|
using
|
|
|
|
|
|
|
|
@example
|
|
|
|
git push -all
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
on each registered repository. If @var{repository} has been specified,
|
|
|
|
call it only on that repository.
|
|
|
|
@end deffn
|
|
|
|
|
2013-05-27 22:30:00 +02:00
|
|
|
Lastly, if you're confused about gitto, you can use the @command{help}
|
|
|
|
command, and if you forgot which version of gitto you were using you can
|
|
|
|
use the @command{version} command.
|
|
|
|
|
|
|
|
@deffn Command help
|
|
|
|
Shows a help message with a quick summary of all the available commands.
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
@deffn Command version
|
|
|
|
Shows the version of gitto.
|
|
|
|
@end deffn
|
|
|
|
|
|
|
|
|
|
|
|
@node Configuration, Copying This Manual, Usage, Top
|
|
|
|
@chapter Configuration
|
|
|
|
|
|
|
|
gitto offers a few configuration options, mostly to do with git
|
|
|
|
configuration management. The configuration is located at either
|
|
|
|
@file{@env{XDG_CONFIG_HOME}/gitto/rc.scm} or
|
|
|
|
@file{@env{HOME}/.config/gitto/rc.scm} depending on the existence of the
|
|
|
|
@env{XDG_CONFIG_HOME} environment variable.
|
|
|
|
|
|
|
|
@defopt global-config
|
|
|
|
An alist of alists representing sections, variables and values which
|
|
|
|
will be placed in each git repository's configuration file. It looks
|
|
|
|
like this:
|
|
|
|
|
|
|
|
@lisp
|
|
|
|
((``@var{section}''
|
|
|
|
(``@var{variable}'' . ``@var{value}'')
|
|
|
|
(``@var{other-variable}'' ``@var{value1}'' ``@var{value2}'')))
|
|
|
|
@end lisp
|
|
|
|
|
|
|
|
A variable specification can have more than one value, but since gitto
|
|
|
|
doesn't know or care which variables can and cannot have more than one
|
|
|
|
value in git, it is up to the user to make sure they only use it with
|
|
|
|
supported variables.
|
|
|
|
|
|
|
|
Each value can have an @samp{~a} format specifier somewhere in their
|
|
|
|
value, when merging configurations this will be replaced with the name
|
|
|
|
of the repository for which the settings are being merged.
|
|
|
|
|
|
|
|
An example configuration could be:
|
|
|
|
|
|
|
|
@lisp
|
|
|
|
(set! global-config
|
|
|
|
'((``remote \''origin\''``
|
|
|
|
(``url'' . ``git@@example.com:%a.git'')
|
|
|
|
(``pushurl'' ``git@@example.com:%a.git''
|
|
|
|
``git@@somehost.com:user/%a.git''))
|
|
|
|
(``branch \''master\''``
|
|
|
|
(``remote'' . ``origin''))))
|
|
|
|
@end lisp
|
|
|
|
|
|
|
|
This example either modifies or creates the @samp{origin} remote in each
|
|
|
|
repository, setting the @samp{url} and @samp{pushurl} value and then
|
|
|
|
adding another @samp{pushurl} setting. It also creates or modifies the
|
|
|
|
@samp{master} branch, setting its @samp{remote} to the @samp{ryuslash}
|
|
|
|
remote.
|
|
|
|
@end defopt
|
|
|
|
|
|
|
|
@defopt hook-alist
|
|
|
|
An alist of @dfn{hook} and @dfn{executable} pairs. Each item in the list
|
|
|
|
specifies a hook's name and the executable it should be linked to. An
|
|
|
|
example configuration:
|
|
|
|
|
|
|
|
@lisp
|
|
|
|
(set! hook-alist
|
|
|
|
'((``commit-msg'' . ``/some/commit-msg/hook'')
|
|
|
|
(``pre-commit'' . ``/some/pre-commit/hook'')))
|
|
|
|
@end lisp
|
|
|
|
|
|
|
|
This will create symbolic links in the @file{.git/hooks} directories for
|
|
|
|
each registered repository when calling @command{config hooks}. gitto
|
|
|
|
doesn't know or care about which hooks exist, so it is up to the user to
|
|
|
|
provide the correct names and look for typos.
|
|
|
|
@end defopt
|
|
|
|
|
|
|
|
@defopt config-exclusion-list
|
|
|
|
A plain list of repository names to skip when merging configurations and
|
|
|
|
installing hooks.
|
|
|
|
@end defopt
|
|
|
|
|
2013-06-07 22:34:27 +02:00
|
|
|
@defopt show-unchanged-branches?
|
|
|
|
A boolean. If @code{#t} all branches will be shown no matter their
|
|
|
|
state, if @code{#f} (the default) only those branches that either have
|
|
|
|
commits to push or commits to pull will be shown in the output of the
|
|
|
|
@samp{list} command.
|
|
|
|
@end defopt
|
|
|
|
|
2013-05-27 22:30:00 +02:00
|
|
|
|
|
|
|
@node Copying This Manual, Index, Configuration, Top
|
|
|
|
@appendix Copying This Manual
|
|
|
|
|
|
|
|
@include fdl.texi
|
|
|
|
|
|
|
|
@node Index, , Copying This Manual, Top
|
|
|
|
@unnumbered Index
|
|
|
|
|
|
|
|
@printindex fn
|
|
|
|
@printindex vr
|
|
|
|
|
|
|
|
@bye
|
|
|
|
|
|
|
|
@c gitto.texi ends here
|