summaryrefslogblamecommitdiffstats
path: root/README
blob: 7c02ff3f6177fc9f9af434e565e5208d46b8e3e4 (plain) (tree)























































































                                                                      
# git-difme

\[[repo][]\] \[[releases][]\]

[repo]: https://git.ricketyspace.net/git-difme
[releases]: https://ricketyspace.net/git-difme/releases

```
git clone git://git.ricketyspace.net/git-difme.git
```

Stages files and makes commits on a list of git repositories based on
some rules.

It always does a `git push` on each repo that it visits.

## rules

The rules specify what type of files to stage and commit.

A rule can either be a regex that matches a file or a file mod type.

The following file mod types are recognized:

- `M`: modified file.
- `D`: deleted file.
- `?`: untracked file.
- `.`: all files.

The rules are defined per git repository in the config file.

If git-difme finds already staged files, it'll commit them first
before doing anything.

## config

The config file must be at `~/.config/git-difme/config`.

The config is simply a scheme file that defines the `difme-repos`
function:

    (define (difme-repos)
      (list '("/path/to/git/repo/foo" "M" "D" "?")
            '("/path/to/git/repo/bar" "M")
            '("/path/to/git/repo/baz" ".")
            '("/path/to/git/repo/frb" "\\.txt" "personal/log.org" "?")
            '("/path/to/git/repo/dot" ".config/")))

- For repo `foo`, git-difme will stage and commit modified (M),
  deleted (D) and untracked (?) files.
- For repo `bar`, git-difme will only stage and commit modified (M)
  files.
- For repo `baz`, git-difme will stage and commit all files (.).
- For repo `frb`, git-difme will stage and commit all files that have
  '`.txt`' extension, file(s) whose path matches '`personal/log.org`',
  and all untracked files (?).
- For repo `dot`, git-difme will stage and commit all files under the
  '`.config`' directory.

## installing

### the script

`git-difme` is written [guile][]. First [install guile][i], then do:

    # make git-difme

That will install the `git-difme` script git-difme at
`/usr/local/bin`.

[guile]: https://gnu.org/s/guile
[i]: https://ricketyspace.net/git-difme/install-guile

### the config file

    $ make config

That will install a sample config file at `~/.config/git-difme`.

## running

    $ git-difme

will do it.

## license

GNU GPL version 3 or higher.