Automate the boring git stuff with python
## Motivation
Whenever I wanted to see the status of all my git repos I have to fire up the
`git-cmd.exe` shell on windows, navigate to each folder and then do a `git status`.
I have to do this both at home and at work.
But I got quickly tired of it. So I decided to make this tool to give me a quick
report so I can see what is ahead and what's behind and what's ahead at a glance.
In short, what needs attention so as to avoid those troubling merge conflicts.
## Requirements
Other thing you need is a computer with `git` either accessible from the command line (which means its in your system path) or as a standalone file somewhere in your system.
If you're working without installation rights, you can use a portable `git` and `python-git` will work just fine.
You can get a portable git version from [here](https://git-scm.com/download/win)
Just unzip it and place it somewhere on your disk. Later (during initialization), you'll need to tell `python-git` where this file is located.
## Installation
pip install python-git
## Setup
After installation, an initial setup is required to tell `pygit` the folders it needs to work with. Open a terminal and `python -m pygit` the below line with appropriate command line arguments.
The output of `python -m pygit --help` is shown below.
```cmd
usage: Pygit. Initialize working directories for python-git
[-h] [-v {0,1}] [-r RULES [RULES ...]] [-g GITPATH]
[-m MASTERDIRECTORY] [-s SIMPLEDIRECTORY [SIMPLEDIRECTORY ...]]
optional arguments:
-h, --help show this help message and exit
-v {0,1}, --verbosity {0,1}
turn verbosity ON/OFF
-r RULES [RULES ...], --rules RULES [RULES ...]
Set a list of string patterns for folders to skip
during setup
-g GITPATH, --gitPath GITPATH
Full pathname to git executable. cmd or bash.
-m MASTERDIRECTORY, --masterDirectory MASTERDIRECTORY
Full pathname to directory holding any number of git
repos.
-s SIMPLEDIRECTORY [SIMPLEDIRECTORY ...], --simpleDirectory SIMPLEDIRECTORY [SIMPLEDIRECTORY ...]
A list of full pathnames to any number of individual
git repos.
```
As an example you I have a folder in my `D:` drive that holds all my git repos, so I will setup `pygit` with the following command
python -m pygit --m D:\git -v 1
If it happens that you clone more repos into your master directory, you may update the index by issuing the `update()`command inside a `python` shell.
pygit.update()
## Usage
Activate python environment on command line.
import pygit
In case things change (perhaps you moved folders around or you add a new git repo) and you want to reset your folders just redo the initialization step
pygit.repos()
show all git repos in the format shown immediately below
pygit.load(repo_id_or_name) # load a repo
where `repo_id` is a string-valued id assigned to that particular repo. The first value in the `repos` command's output.
The `load(input_string)` command returns a `Commands` object for that repo, which provides a gateway for issuing git commands on the repository
Operations that can be performed on `Commands` object are shown below.
```python
r = pygit.load_repo(repo_id_or_name)
r.fetch() # perform fetch
r.status() # see status
r.add_all() # stage all changes for commit
r.commit(message='chore: minor changes') # commit changes. Press enter to accept default message
r.push() # perform push action
r.pull() # perform pull request
r.add_commit() # add and commit at once
```
### Batch Operations
The following batch operations on indexed repos are available.
pygit.load_multiple(*args) # load a set of repos
pygit.load_multiple("2", "5") # load only repo 2 and 5
returns a `generator` of `Commands` objects for repositories 2 and 5. Afterwards you can iterate over the repos like below
```python
for each in pygit.load_multiple("2", "5"):
each.add_commit()
```
pygit.all_status()
performs a `status` command on all indexed repos. The result is written to a markdown file.
Carries a timestamp of the time the command was issued. Call it a snapshot of your repo status if you will. Items which are out of sync with their remote counterpart are also highlighted as needing attention.
pygit.pull_all()
perform a `pull` request on all indexed repos at once. It returns `None`.
pygit.push_all()
performs a `push` action on all indexed repos at once. It returns `None`.
pygit.load_all()
returns a `generator` of `Commands` object for each indexed repo.
## To do
1. Add `git-bash.exe`
1. Implement `Commands.branch()`
1. Refactor tests
1. Auto-run test after importation to make sure every other thing works fine.
Metadata
Release files for python-git 2018.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| python-git-2018.2.1.tar.gz | 11.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_git-2018.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.2 kB
Release files / python-git-2018.2.1.tar.gz
| Download URL | python-git-2018.2.1.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2da0a75b562bc966d8a3bc1d6a2f8fd9f0fb3a3d3f2eff2239213bcc400bde82
|
|
BLAKE2b-256 checksum How to use checksums |
a5c6645f405c8dd3094b85b0f01916517ba025ab8855b252e2a73fec51947f09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
|
Release files / python_git-2018.2.1-py3-none-any.whl
| Download URL | python_git-2018.2.1-py3-none-any.whl |
|---|---|
| Size | 10.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87ef4aef32a65f44e301cff42e5d5f660a2ba8d6b9d7c021faedbb9028a57ba9
|
|
BLAKE2b-256 checksum How to use checksums |
f06f664d1dce126168f4fb91e74e8f7bd26db72f0b2a49b0fa1c9f9742daf1ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
|
Security for python-git 2018.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.