# `Tinfoil.Homebrew.Git`
[🔗](https://github.com/joshrotenberg/tinfoil/blob/v0.2.22/lib/tinfoil/homebrew/git.ex#L1)

Thin wrapper around the subset of `git` commands `Tinfoil.Homebrew`
needs. Kept behind a behaviour so tests can swap in a stub module
without touching the real filesystem or network.

# `add`

```elixir
@callback add(dir :: Path.t(), relative_path :: String.t()) :: :ok
```

# `clone`

```elixir
@callback clone(url :: String.t(), dir :: Path.t()) :: :ok | {:error, term()}
```

# `commit`

```elixir
@callback commit(dir :: Path.t(), message :: String.t()) ::
  {:ok, String.t()} | {:error, term()}
```

# `config_identity`

```elixir
@callback config_identity(dir :: Path.t(), name :: String.t(), email :: String.t()) :: :ok
```

# `push`

```elixir
@callback push(dir :: Path.t()) :: :ok | {:error, term()}
```

# `staged_changes?`

```elixir
@callback staged_changes?(dir :: Path.t()) :: boolean()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
