# git-local-prune

A git tool to clean the local branches that are deleted [gone] on remote

## Install

You can install `git-local-prune` using one of the options listed below

| Source   | Command                                                                                                                  |
| -------- | ------------------------------------------------------------------------------------------------------------------------ |
| curl     | `curl -L https://raw.githubusercontent.com/MathieuDoyon/git-local-prune/master/installer.sh \| sudo sh`                  |
| npm      | `npm install -g git-local-prune`                                                                                         |
| manual   | Clone and run `make install`                                                                                             |
| git-bash | For Windows : `curl -L https://raw.githubusercontent.com/MathieuDoyon/git-local-prune/master/windows-installer.sh \| sh` |

<!-- TODO add brew tap etc. -->
<!-- | brew | `brew update && brew install git-local-prune` | -->
<!-- | aur | `pacaur -S git-local-prune-git` | -->

## Usage

Simply run it in your project directory and it will give you the output from the branches prune locally

```shell
git local-prune
```

If you run it in a folder containing multiple git repositories, it will go through each of the projects and give you the local-prune report for each one of them.

## Options

You can pass several options to modify how git-local-prune behaves

```shell
git local-prune [-m <max-dir-depth>]
            [-f]
            [-F]
            [-r]
            [-L]
            [-h]
```

git local-prune [-m <max-dir-depth>] [-f] [-F] [-r] [-F] [-L] [-h]

Here is the detail for each of the options

| Option | Description                                                                                 |
| ------ | ------------------------------------------------------------------------------------------- |
| m      | Specify the depth of recursive directory search e.g. `-m 3` defaults to two                 |
| f      | Fetch the latest commits beforehand                                                         |
| F      | Force recursion up to specified depth even when git repository found earlier                |
| L      | Toggle inclusion of symbolic links in recursive directory search                            |
| h      | Display the help screen                                                                     |
| r      | Generates the local-prune report file `git-local-prune-report.txt` in the current directory |

For the basic usage, all you have to do is run `git local-prune` in a repository or a folder containing multiple repositories

## Single Repository Usage

To check all your local branches to prune from your last git fetch, head to the project repository and run

```shell
$ git local-prune
```

## Directory depth

By default the script searches only in the current directory or one
level deep. If you want to increase that, use the `-m` switch.
If the base directory is a git repository you can use the `-F` switch to force the recursion.

```shell
$ git local-prune -m 3
```

### Directory whitelisting

If you want to restrict the local-prune to some paths, you can whitelist them by adding them to a `.git-local-prune-whitelist` file. For example if you have the below directory structure

    ├── Workspace              # All your projects are here
    │   ├── project-a          # Some git repository called project-a
    │   ├── project-b          # Some git repository called project-b
    │   ├── sketch-files       # Some sketch files
    │   ├── mockups            # Some balsamiq mockups
    │   └── ...                # etc.
    └── ...

And you want the `git-local-prune` to show logs for only `project-a` and `project-b`, you can do that by creating a `.git-local-prune-whitelist` file under the `Workspace` directory with the below contents and it will only consider these directories for the local-prune

```
project-a
project-b
```

## Fetch gone branches before showing local-prune

If you have many repositories that you want to generate a local-prune for, it may be useful to automatically run `git fetch` before viewing the local-prune.

If you would like to automatically run `git fetch --all` before printing the local-prune, you can add the `-f` flag, as show below

```shell
$ git local-prune -f
```

## Mixing options

Of course you can mix the options together.

```shell
# Fetch branches before each local-prune command with a max depth of 5 directories
$ git local-prune -m 5 -r -f
```

## License

MIT © [Mathieu Doyon](https://github.com/MathieuDoyon)
