Metadata-Version: 2.4
Name: githelp
Version: 0.1.3
Summary: githelp - a tiny git helper (gg/ggi/ggc): commit without quotes, add .gitignore templates from github/gitignore, and re-home a clone under your own GitHub account/org
Project-URL: Homepage, https://github.com/rosaboyle/githelp
Project-URL: Repository, https://github.com/rosaboyle/githelp
Project-URL: Issues, https://github.com/rosaboyle/githelp/issues
Author-email: Dheeraj Pai <dheeraj.pai@leanmcp.com>
License: MIT
License-File: LICENSE
Keywords: cli,commit,git,gitignore
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Version Control :: Git
Requires-Python: >=3.9
Requires-Dist: httpx==0.28.1
Requires-Dist: questionary==2.1.1
Requires-Dist: rich==15.0.0
Description-Content-Type: text/markdown

# githelp

A tiny git helper published as [`githelp`](https://pypi.org/project/githelp/). It
installs three commands: **`gg`**, **`ggi`**, and **`ggc`**.

```
pip install githelp
```

- Repository: <https://github.com/rosaboyle/githelp>
- PyPI: <https://pypi.org/project/githelp/>

---

## `gg` — commit without quotes

Type your message straight after `gg`, no quotes:

```
gg fix the login bug and update the readme
```

That runs, in order:

```
git add .
git commit -m "fix the login bug and update the readme"
git push
```

It **warns you and asks "are you sure?"** before committing when:

- more than **100 files** are staged, or
- more than **100,000 changed lines** are staged.

If you decline, it aborts (your files stay staged). If neither threshold is
crossed, it just commits and pushes. If the current branch has no upstream, it
pushes with `--set-upstream origin <branch>` automatically.

```
gg --help     # usage
```

## `ggi` — add a .gitignore template

Templates are fetched **live** from
[`github/gitignore`](https://github.com/github/gitignore) through the GitHub API,
so they are always the current upstream versions (nothing is bundled or stale).

```
ggi            # interactive: type to fuzzy-search the full list, then pick one
ggi Python     # add a named template directly
ggi --help     # usage
```

The selected template is appended to your repository's `.gitignore` inside a
clearly marked block, so it is easy to find and is never added twice.

> Tip: set `GITHUB_TOKEN` (or `GH_TOKEN`) in your environment to avoid GitHub's
> unauthenticated API rate limit.

## `ggc` — clone a repo and re-home it under your account/org

Mirror a public repo into your own GitHub account or org in one shot — clone,
drop the old remote, create the new repo, wire up the `https` origin, and push.

```
ggc <github-url> <owner/repo>     # create under an org (or another user)
ggc <github-url> <repo>           # create under your own GitHub account
```

```
ggc https://github.com/someone/cool-lib leanmcp/cool-lib
ggc https://github.com/someone/cool-lib my-fork
```

That runs, in order:

```
git clone <github-url> <repo>
git -C <repo> remote remove origin
# rm -rf .github/workflows && commit the removal (if present)
gh repo create <owner/repo> --private          # --public to make it public
git -C <repo> remote add origin https://github.com/<owner>/<repo>.git
git -C <repo> push --set-upstream origin <branch>
```

If the cloned repo has a `.github/workflows/` folder, `ggc` deletes it and
commits the removal, so the new repo has no GitHub Actions workflows. Because
the upstream commit that *added* those workflows is still in the history being
pushed, GitHub needs your `gh` token to carry the `workflow` scope — grant it
once with:

```
gh auth refresh -h github.com -s workflow
```

New repos are **private** by default; pass `--public` to make them public. When
you give just `<repo>` (no owner), it creates it under your own account using
your authenticated GitHub username. The origin is always wired with the `https`
URL, never `ssh`.

```
ggc --help     # usage
```

Requires the [GitHub CLI](https://cli.github.com/) (`gh`), authenticated via
`gh auth login`.

---

## Install from source / develop

```bash
git clone https://github.com/rosaboyle/githelp
cd githelp
pip install -e .
```

## Dependencies

Pinned to the latest releases:

| Package      | Version |
|--------------|---------|
| httpx        | 0.28.1  |
| questionary  | 2.1.1   |
| rich         | 15.0.0  |

Requires Python 3.9+.

---

## Publishing

A helper script is provided: [`publish.sh`](./publish.sh).

```bash
./publish.sh            # build + upload to PyPI
./publish.sh --test     # upload to TestPyPI instead
./publish.sh --check    # build only, validate with twine, do not upload
```

Manual equivalent:

```bash
python -m pip install --upgrade build twine
python -m build
twine check dist/*
twine upload dist/*
```

Authenticate to PyPI with an API token: create one at
<https://pypi.org/manage/account/token/> and either set `TWINE_USERNAME=__token__`
and `TWINE_PASSWORD=<your-token>`, or let twine prompt you.

## License

MIT — see [LICENSE](./LICENSE).
