Using the basic git protocol, as opposed to SSH or HTTPS is a reliable but undocumented way of getting read-only access to Github repositories.
Cloning a Github Repository
Github advertises two clone URLs for repositories: SSH and HTTPS. The usage, and
benefits of each is explained on the Github help pages. An undocumented
third option is to use the git
protocol directly. For the repository
goerz/mgplottools
, three equivalent possibilities are:
git clone [email protected]:goerz/mgplottools.git git clone https://github.com/goerz/mgplottools.git git clone git://github.com/goerz/mgplottools.git
Note that the .git
at the end of the url is optional. The SSH access is the
most convenient if you have SSH set up properly. HTTPS is the most flexible, and
the git protocol is for read-only access.
Pip Installation from Github
For installing a Python package from a github repository, pip
can be be
called with any of the three protocols:
pip install git+ssh://[email protected]/goerz/mgplottools.git@master#egg=mgplottools pip install git+https://github.com/goerz/mgplottools.git@master#egg=mgplottools pip install git+git://github.com/goerz/mgplottools.git@master#egg=mgplottools
Again, .git
can be omitted. Also the commit (@master
) and package
information (#egg=mgplottols
) can be omitted in certain circumstances, see the
pip documentation.
When simply installing a package in this way, read-only access is the only thing
required. In principle, HTTPS should do the right thing, but I have observed
pip to prompt for a Github username and password when trying to clone a
repository that happens to be under your own Github account (i.e. where you have
read and write access). This can create significant problems when pip install
is called from an installation script, where no user-interaction is
possible. The "smart" HTTPS access is trying to be too smart for its own good in
this case.
Therefore, firewall-rules permitting,
using pip
in combination with the plain git
protocol should be the
preferred method
in installation scripts (or IPython notebooks).