PyGitUp
is a Python implementation of the great
aanand/git-up/. It not only
fully covers the abilities of git-up and should be a drop-in replacement,
but also extends it slightly.
git pull has two problems:
- It merges upstream changes by default, when it's really more polite to rebase over them, unless your collaborators enjoy a commit graph that looks like bedhead.
- It only updates the branch you're currently on, which means git push will shout at you for being behind on branches you don't particularly care about right now.
I wasn't able to use the original git-up
, because I didn't want to install
a whole Ruby suite just for git-up and even with Ruby installed, there were
some problems running on my Windows machine. So, my reasons for writing
and using this port are:
- Windows support.
- Written in Python ;)
- Run
$ pip install git-up
cd
to your project's directory.- Run
git up
and enjoy!
You need pip
installed and working. Check out
SO#4750806 for more
information. And don't forget to either:
- make your
Python/Scripts
andPython/Lib/site-packages
writable for you, - run
pip
with admin privileges - or use
pip install --user git-up
and add%APPDATA%/Python/Scripts
to%PATH%
.
Otherwise pip
won't install due to Access denied
errors.
PyGitUp
is not compatible with Python 3 because some essential 3rd party
libs don't support it. Sorry.
git up -h
shows a help message.git up --quiet
suppresses all output except for error messages.git up --version
shows the current version and optionally checks for updates (see below).
To configure PyGitUp
, you can set options in your git config. Run
git config [--global] git-up.[name] [value]
to set one of these
options:
git-up.bundler.check [true|*false*]
: If set totrue
,PyGitUp
will check your app for any new bundled gems and suggest abundle install
if necessary.git-up.bundler.autoinstall [true|*false*]
: If set totrue
,PyGitUp
will runbundle install
automatically. Requiresgit-up.bundler.check
to be true.git-up.bundler.local [true|*false*]
: If you'vebundle package
-ed your project gems, you can tellPyGitUp
to runbundle install --local
for you if it finds missing gems. Much faster than just a plain oldbundle install
. Don't worry if you're missing gems, it will backtrack tobundle install
if anything goes wrong. Make suregit-up.bundler.autoinstall
is also set totrue
or it won't do anything.git-up.bundler.rbenv [true|*false*]
: If you have rbenv installed, you can tellPyGitUp
to runrbenv rehash
for you after it installs your gems so any binaries will be available right away. Make suregit-up .bundler.autoinstall
is also set totrue
or it won't do anything.git-up.fetch.prune [*true*|false]
: If set totrue
,PyGitUp
will append the--prune
option togit fetch
and thus remove any remote tracking branches which no longer exist on the remote (see git fetch --help).git-up.fetch.all [true|*false*]
: If set tofalse
,PyGitUp
will only fetch remotes for which there is at least one local tracking branch. Setting this option will makegit up
always fetch from all remotes, which is useful if e.g. you use a remote to push to your CI system but never check those branches out.git-up.rebase.arguments [string]
: If set,PyGitUp
will use this string as additional arguments when callinggit rebase
. Example:--preserve-merges
to recreate merge commits in the rebased branch.git-up.rebase.auto [*true*|false]
: If set tofalse
,PyGitUp
won't rebase your branches for you but notify you that they diverged. This can be useful if you have a lot of in-progress work that you don't want to deal with at once, but still want to update other branches.git-up.rebase.log-hook [cmd]
: Runscmd
every time a branch is rebased or fast-forwarded, with the old head as$1
and the new head as$2
. This can be used to view logs or diffs of incoming changes. Example: 'echo "changes on $1:"; git log --oneline --decorate $1..$2
'
git-up.updates.check [*true*|false]
: When runninggit up --version
, it shows the version number and checks for updates. If you feel uncomfortable with it, just set it tofalse
to turn off the checks.
The original git-up
has been written by aanand:
aanand/git-up/.
- 3rd party dependencies have been updated to fix a problem with a 3rd party library (#18)
- Fixed some typos in README and
PyGitUp
output. - 3rd party dependencies have been updated.
ahead of upstream
messages are now cyan (see aanand/git-up#60)- Fixed problem when using % in the log hook (#11)
- Fixed problems with the dependency declaration.
- Fix for #7 (AttributeError: 'GitUp' object has no attribute 'git') introduced by v1.1.0.
Prior to v1.1.0,
PyGitUp
tried to guess the upstream branch for a local branch by looking for a branch on any remote with the same name. With v1.1.0,PyGitUp
stops guessing and uses the upstream branch config instead.This by the way fixes issue #6 (
git up
doesn't work with local only branches).Note: This change may break setups, where a local branch accidently has the same name as a remote branch without any tracking information set. Prior to v1.1.0,
git up
would still fetch and rebase from the remote branch. If you run into troubles with such a setup, setting tracking information usinggit branch -u <remote>/<remote branch> <local branch>
should help.3rd party dependencies have been updated.
Allows to run
git up --version
from non-git dirs, too.
Finally PyGitUp
reaches 1.0.0. You can consider it stable now :)
- Added a comprehensive test suite, now with a coverage of about 90%.
- Lots of code cleanup.
- Added option
-h
to display a help screen (--help
won't work, becausegit
catches this option and handles it beforePyGitUp
can do). - Added option
--version
to show, what version ofPyGitUp
is running. Also checks for updates (can be disabled, see configuration). - Added option
--quiet
to be quiet and only display error messages.
- Fixed issue #4 (ugly exception if remote branch has been deleted).
- Fixed issue #3 (didn't return to previous branch).
- Fixed problem: check-bundler.rb has not been installed when installing via PyPI (problems with setup.py).
- Incorporated aanand/git-up#41: Support for
bundle install --local
andrbenv rehash
. - Fixed issue #1 (strange output buffering when having multiple remotes to fetch from).
- Some under-the-hood improvements.
- Initial Release