---
title: Git and GitLab
date: Tue Feb 19 19:19:03 2019
---
**This document is particularly important if you follow the RStudio or
the Org-Mode path.** **If you follow the Jupyter path, it can be ignored
at first** **as we have closely integrated Jupyter and GitLab in the
context of this MOOC.**
So far, you only used git via the web interface from the GitLab we
deployed for the MOOC:
If you access this link from the FUN platform, you do not have to
authenticate and you can readily read and modify all your files. This is
very convenient but in most cases, you will want to have your own local
copy of the repository and you will have to synchronize your local copy
with the remote GitLab one. To propagate your modifications, you will
obviously have to authenticate yourself on GitLab.
This document describes the software you need to have installed on your
machine and how to handle authentication. The "Configuring Git" section
is illustrated in a [video
tutorial](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85)
(in French).
Please read all these instructions carefully, in particular the one on
"Configuring your password on
GitLab".
# Table of Contents TOC
- [Installing Git](#installing-git)
- [Linux (Debian, Ubuntu)](#linux-debian-ubuntu)
- [Mac OSX and Windows](#mac-osx-and-windows)
- [Configuring Git](#configuring-git)
- [Telling Git who you are: Name and
Email](#telling-git-who-you-are-name-and-email)
- [Dealing with proxies](#dealing-with-proxies)
- [Getting your default password on GitLab (and possibly changing
it)](#getting-your-default-password-on-gitlab-and-possibly-changing-it)
- [Remembering your password
locally](#remembering-your-password-locally)
- [Optional: authenticating through
SSH](#optional-authenticating-through-ssh)
- [Using Git through the command line to synchronize your local files
with
Gitlab](#using-git-through-the-command-line-to-synchronize-your-local-files-with-gitlab)
# Installing Git
## Linux (Debian, Ubuntu)
We provide here only instructions for Debian-based distributions. Feel
free to contribute to this document to provide up-to-date information
for other distributions (e.g., RedHat, Fedora).
Run (as root):
``` bash
apt-get update ; apt-get install git
```
## Mac OSX and Windows
- Download and install Git from the [Git
website](https://git-scm.com/downloads).
- Optional Git clients (should not be needed if you work within
RStudio):
- [SourceTree](https://www.sourcetreeapp.com/)
- [GitHub Desktop](https://desktop.github.com/)
> [Apparently](https://github.com/desktop/desktop/issues/852),
> this works with GitLab and https.
# Configuring Git
## Telling Git who you are: Name and Email
1. Open terminal.
2. Set a Git username and email:
``` shell
git config --global user.name "Mona Lisa"
git config --global user.email "email@example.com"
```
3. Confirm that you have set the Git username correctly:
``` shell
git config --global user.name
git config --global user.email
```
``` example
Mona Lisa
email@example.com
```
## Dealing with proxies
You may be behind a proxy, in which case you may have trouble cloning or
fetching from a remote repository or you may get an error like `unable
to access ... Couldn't resolve host ...`
In such case, consider something like
this:
``` shell
git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
```
The `proxyPassword` will be stored in plain text (unencrypted) in your
`.gitconfig` file, which you may not want. In that case, remove it from
the URL and you will be prompted for it every time it is needed.
## Getting your default password on GitLab (and possibly changing it)
**Warning (Jupyter users) :** changing your default Gitlab password will
prevent you from committing in Jupyter. You will have to do the extra
step of changing your `~/.git-credentials` in the Jupyter environment
(possibly several times).
1. Get your default password using the [Gitlab credentials retrieval
tool](https://app-learninglab.inria.fr/jupyterhub/services/password)
as described on the [corresponding
resource](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85).

The first long and ugly character sequence is your GitLab login/id.
It is easy to find once you are logged on gitlab. The second one
however is your password and this webpage is the only place where
you can find it. We used the FUN authentification mechanism to
propagate your credentials so only you can have access to it. You'll
need to use this password when trying to propagate some
modifications from your computer to GitLab.
*Note: You have to access this webpage from the FUN platform
otherwise you may get a 405 error* *when trying to direcly open
.*

2. Access
[GitLab](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/5571950188c946e790f06d4bc90fb5f6)
from the FUN plateform (click on "Accédez à Gitlab / Access to
Gitlab" Button).
*Note: Again, you have to access Gitlab from the FUN platform
otherwise you may get a 405 error* /when trying to direcly open
.
3. Click on the first `Sign in` button (alternatively, you can the
login/password you just retrieved and use the second `Sign in`
button).

4. If you wish to modify your password, you should go to `Account >
Settings > Password` and define your password using the default
password you just retrieved. Again, if you use the Jupyter notebooks
we have deployed for the MOOC, remember that changing your default
Gitlab password will prevent you from committing in Jupyter. You
will have to do the extra step of changing your Jupyter
`~/.git-credentials` through a Jupyter console (see next section).

## Remembering your password locally
If you clone your repository by simply pasting the GitLab URL, you will
be prompted for your login and your password every time you want to
propagate your local modifications, which is tedious. This is why you
should ask git to remember your login and password as
follows
``` shell
git config --global credential.helper cache # remember my password
git config --global credential.helper "cache --timeout=3600" # for one hour at most
```
With this setup, you will be prompted for your password but it will be
cached in memory and they will not be asked again before an hour. You
may want to read [these
instructions](https://stackoverflow.com/questions/5343068/is-there-a-way-to-skip-password-typing-when-using-https-on-github)
to better understand how all this works.
If you want your password to be permanently remembered, you should use
this command
``` shell
git config credential.helper store
```
Your password will be then stored in a `.git-credentials` file in plain
text. On a perfectly secured machine, it may be fine… or not… ;) Use it
at your own risk.
## Optional: authenticating through SSH
There are two ways of authenticating and synchronizing your local
repository with GitLab: through HTTPS or through SSH. The first one is
what was just described and does not require any particular software
installation on your machine so this is what I recommend for this MOOC.
Yet, I like the second one better (although is may seem a bit more
technical), which is why I describe it here. It consists in installing
SSH, creating a pair or private/public keys, and uploading your SSH
public key on GitLab. This section provides with information on how to
do this.
### Installing SSH
1. Linux (Debian, Ubuntu)
We provide here only instructions for debian-based distributions.
Feel free to contribute to this document to provide up-to-date
information for other distributions (e.g., RedHat, Fedora).
Run (as root):
``` bash
apt-get update ; apt-get install openssh-client
```
2. macOS
You do not have anything to do as it is installed by default.
3. Windows
You should install the
[Putty](https://www.ssh.com/ssh/putty/windows/) client. Once it is
installed, look for the section on [generating an SSH
key](https://www.ssh.com/ssh/putty/windows/puttygen).
### Setting up SSH on GitLab
Here are [all the official explanations on how to set up your SSH key on
GitLab](https://docs.gitlab.com/ee/ssh/). Alternatively, you may also
want to have a look at this
video:
# Using Git through the command line to synchronize your local files with Gitlab
This section describes a generic (through the command line) way to
synchronize your local files with Gitlab. You will not need this if you
follow the Jupyter path. If you follow the RStudio path, all these
operations can be done through RStudio and you may want to read [the
corresponding
instructions](file:///jump_to_id/1a4f58a1efed437c93a9f5c5f15df428). If
you follow the Org-Mode path, all these operations can be done through
Magit and you may want to read [the corresponding
instructions](file:///jump_to_id/508299f7373449a3939faa5b11462bc4).
Here are other ways to learn Git through the command line:
- The [Software Carpentry git
tutorial](http://swcarpentry.github.io/git-novice/)
- The (freely available) Pro Git book ([in
English](https://git-scm.com/book/en/v2) or [in
French](https://git-scm.com/book/fr/v2)). Reading the first two
chapters is enough to get a good start.
- [Learn Git Branching](https://learngitbranching.js.org/) will allow
to interactively learn Git and to understand with branches.
Now, let's start\!
1. Obtain the repository URL

2. Cloning the repository
``` shell
cd /the/directory/where/you/want/to/clone/your/repository
git clone https://app-learninglab.inria.fr/gitlab/xxx/mooc-rr.git
```
Alternatively, you may want to indicate now your login although I
rather suggest you follow the *Remembering your password locally*
instructions:
``` shell
git clone https://xxx@app-learninglab.inria.fr/gitlab/xxx/mooc-rr.git
```
Now a directory `mooc-rr` has been created on your computer.
3. Inspect the repository
``` shell
cd mooc-rr
ls # (Unix)
dir # (Windows)
```
4. Synchronizing to GitLab
You should indicate which files to track (`git add`) and commit them
locally (`git commit`) before they can be transfered (`git push`) to
GitLab. The `git status` will indicate you whether files are
tracked/modified/committed/…
Let's assume you just created a `fichier.txt` file on the top of the
`mooc-rr` directory.
``` shell
git status
```

``` shell
git add fichier.txt
git status
```

``` shell
git commit -m "message commit"
```

``` shell
git status
```

The file can then be transfered to GitLab:
``` shell
git push
```
At this point, git will ask you about your login/password unless you
followed the previous *Remembering your password locally*
instructions.
N.B.: you will not be allowed to propagate your modifications to
GitLab if other modifications (e.g., from someone else) have been
propagated in between

5. Synchronizing from Gitlab: to avoid the previous problem, you need
to fetch the remote GitLab modifications first and apply them
locally.
``` shell
git pull
```
Only then will you be able to `git push`.