Getting started with Git development

This section and the next describe in detail how to set up git for working with the NumPy source code. If you have git already set up, skip to Development workflow.

Basic Git setup

  • Install git.

  • Introduce yourself to Git:

    git config --global
    git config --global "Your Name Comes Here"

Making your own copy (fork) of NumPy

You need to do this only once. The instructions here are very similar to the instructions at - please see that page for more detail. We’re repeating some of it here just to give the specifics for the NumPy project, and to suggest some default names.

Set up and configure a github account

If you don’t have a github account, go to the github page, and make one.

You then need to configure your account to allow write access - see the Generating SSH keys help on github help.

Create your own forked copy of NumPy

  1. Log into your github account.

  2. Go to the NumPy github home at NumPy github.

  3. Click on the fork button:


    After a short pause, you should find yourself at the home page for your own forked copy of NumPy.

Set up your fork

First you follow the instructions for Making your own copy (fork) of NumPy.


git clone
cd numpy
git remote add upstream

In detail

Clone your fork

  1. Clone your fork to the local computer with git clone

  2. Investigate. Change directory to your new repo: cd numpy. Then git branch -a to show you all branches. You’ll get something like:

    * master

    This tells you that you are currently on the master branch, and that you also have a remote connection to origin/master. What remote repository is remote/origin? Try git remote -v to see the URLs for the remote. They will point to your github fork.

    Now you want to connect to the upstream NumPy github repository, so you can merge in changes from trunk.

Linking your repository to the upstream repo

cd numpy
git remote add upstream

upstream here is just the arbitrary name we’re using to refer to the main NumPy repository at NumPy github.

Just for your own satisfaction, show yourself that you now have a new ‘remote’, with git remote -v show, giving you something like:

upstream (fetch)
upstream (push)
origin (fetch)
origin (push)

To keep in sync with changes in NumPy, you want to set up your repository so it pulls from upstream by default. This can be done with:

git config branch.master.remote upstream
git config branch.master.merge refs/heads/master

You may also want to have easy access to all pull requests sent to the NumPy repository:

git config --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*'

Your config file should now look something like (from $ cat .git/config):

        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url =
        fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
        url =
        fetch = +refs/heads/*:refs/remotes/upstream/*
        fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*
[branch "master"]
        remote = upstream
        merge = refs/heads/master