---
title: Project management 0. Git setup
marp: true
paginate: true
theme: buutti
---
<!-- headingDivider: 3 -->
<!-- class: invert -->

# Project management 0. Git setup

## Contents

- [Contents](#contents)
- [What is Git?](#what-is-git)
- [GitHub and other developer platforms](#github-and-other-developer-platforms)
- [Setup](#setup)
- [Git setup: Settings for Windows](#git-setup-settings-for-windows)
- [Command line](#command-line)
- [Extra: Help, this is horrible!](#extra-help-this-is-horrible)
- [Btw: Config](#btw-config)



## What is Git?

* Git is a version control tool originally created by Linus Torvalds in 2005
* Keeps track of code changes
* Can be used to backup code in the cloud
* Enables cooperation with other team members
* Ubiquitous in software development

### Git vs cloud storage

* Git is different from cloud storage services like Dropbox, Google Drive or OneDrive
  * Instead of automatic syncing, you deliberately *push to* and *pull from* the cloud
  * Cloud services are easier for starters
  * ...but in projects of more than one person, tracking changes would be a pain
* Git has a steep learning curve
	* To ease things, there are some visual tools like **Sourcetree** or **Sublime Merge**
	* To use them effectively, you still need to understand how Git works, though

## GitHub and other developer platforms

* Git *could* be used locally, but its usage is almost always combined with a developer platform — a remote storage service like [GitHub](https://github.com/), [GitLab](https://gitlab.com/) or [BitBucket](https://bitbucket.com/)
  * These services can also double as a programming portfolio
  * Commonly used in both open source and commercial projects
* In Buutti's trainings, GitLab is most commonly used

## Setup

* Install Git
  * Windows/Mac: [git-scm.com](https://git-scm.com)
    * Installation instructions are included in the following slides.
    * If a setting is not mentioned in the instructions, you can leave it as the default option.
  * Linux: `sudo apt-get install git`

## Git setup: Settings for Windows

<div class="columns" markdown="1">
<div markdown="1">

![](imgs/git1.png)

</div>
<div markdown="1">

![](imgs/git3.png)

Set manually after setup with:
```
git config --global core.editor "code --wait"
```

</div>
</div>

---

<div class="columns" markdown="1">
<div markdown="1">

![](imgs/git2.png)

Set manually after setup with:
  ```
  git config --global init.defaultBranch main
  ```

</div>
<div markdown="1">

![](imgs/git4.png)

</div>
</div>

---

<div class="columns" markdown="1">
<div markdown="1">

![](imgs/git5.png)

</div>
<div markdown="1">

![](imgs/git6.png)

</div>
</div>

---

<div class="columns" markdown="1">
<div markdown="1">

![](imgs/git7.png)

Set manually after setup with:

```
git config --global credential.helper wincred
```

</div>
<div markdown="1">

![](imgs/git8.png)

</div>
</div>

## Command line

* Git is operated via the ***command line***, a.k.a, the ***terminal***
* There are many kinds of command line syntaxes out there. Some examples:
  * Windows: ***PowerShell*** (new), ***cmd*** (old)
  * Linux, (also included in the Windows Git install): ***bash***
* We're using PowerShell, which can be accessed inside VS Code
* In VS Code, open/close terminal by pressing ***CTRL+Ö*** (in the Fin/Swe layout)

### Basic commands and the working directory

* To do actions in Git, you don't press buttons, you write commands
* Most commands act on the currently open folder, a.k.a. the ***working directory***
  * ***Path*** to the directory is shown next to the terminal cursor:
    `PS E:\borb\code\unity-basics-course>`
* `ls` tells the contents of the working directory
* `cd` is used to move to another directory
  * Use `cd programming` to move to the `programming` subfolder
    `PS E:\borb\code\unity-basics-course\programming>`
  * Use `cd ..` to move one step up in the hierarchy (to the parent directory)
    `PS E:\borb\code\unity-basics-course>`
* ***Note***: `..` is a shorthand for to the parent directory, `.` for the current directory

## Extra: Help, this is horrible!
<!-- _class: "extra invert" -->

* Do you feel more at home in graphical UIs?
  * There are also graphical user interfaces for Git like [GitKraken](https://www.gitkraken.com/), [Sublime Merge](https://www.sublimemerge.com/) or [GitHub Desktop](https://desktop.github.com/) (GitHub only)
  * VS Code also has very useful graphical tools for Git (more about them later!)
* However, the GUIs make ***a lot*** more sense after you've understood the Git commands that those GUIs still execute under the hood
  * There is no free lunch here

## Btw: Config

* To configure your Git username for every project:
  * Use `git config --global user.name "myUserName"`
  * and `git config --global user.email "my.email.address@domain.com"`
* If you do not do this, Git will ask to do it anyway at some point