# Git setup

For me setting up git and ssh keys was really straight forward because I am currently studying IT.

## Generating ssh keys
To be able to push and pull from the git server you need to give your public key to the git server. First we need te generate a ssh key. That can be done using this command.
```bash
ssh-keygen
```
After you run this command it will prompt you for a passphrase and a location to store it you can leave these blank and press enter on them. It will automatically store them in  `<user>/.ssh`.

## Reading the ssh keys

To read the ssh keys from the file you can use the `cat` command. `cat` reads the contents of a file no matter what file type it is and prints it out console.

The command wil probably look like this.
```bash
cat .ssh/id_ed25519.pub 
```
Once you run that it outputs a key. That key is your public ssh key. You can share it with everyone and put it on server as a way to authenticate.

## Registering your key on the gitlab server

Now you can register the key that got output in the console on the gitlab server. First click your profile picture in gitlab and then go to edit profile. Now you have a menu bar on the left, there you can click the SSH Keys tab and register your ssh key. After you have done that you can push and pull from your gitlab repository.

## Cloning the repository
To clone a git repository you need a link to the repository. When you press code on your project home you will see multiple links pop up. You will need the link that starts with `git@` and copy the entire link

Now you can go back to your console and type `git clone <link>` and then press enter. It will prompt you to trust the fingerprint of the server. When you've accepted that you have the repository on your local machine!🎉

## Git commands
When you're working on your project you need to make commits and push to the server so your work is also stored over there. There are a few commands you need to use for that.

| Git command                    	| Description                                                	|
|--------------------------------	|------------------------------------------------------------	|
| git clone <link>               	| clones a remote repository from the server to your machine 	|
| git add <file>                 	| stages a file to be committed                              	|
| git commit -m "commit message" 	| commits all staged files with the commit message           	|
| git push                       	| sends all the committed files to the remote server         	|

Git workflow:
```mermaid
graph LR

A[Work on your project] --> B[Stage your project files]
B --> C[Commit the files with a message]
C --> D[Push]
```

## Extra notes
Write clear commit messages because when you wanna return to a older version it's nice to know what changed since that commit.