owned this note
owned this note
Published
Linked with GitHub
<style>
@font-face {
font-family: Inter;
src: url("/fonts/Inter/Inter-Bold.woff2") format("woff2"), url("/fonts/Inter/Inter-Bold.woff") format("woff");
}
.reveal h1, .reveal h2 {
font-family: "Inter";
font-optical-sizing: auto;
font-weight: normal;
font-style: normal;
}
.mermaid svg {
width: 100%;
height: 30%;
}
</style>
# Introduction to Git
<!-- Put the link to this slide here so people can follow -->

https://hackmd.io/@f-fra/rJwURt9y1g
 
- Join the [GitLab team](https://teams.microsoft.com/l/team/19%3AiBEHvWyPK7Hq543OelkXb4jttoeo-x2bjUoexVEApAw1%40thread.tacv2/conversations?groupId=b0f6b139-5886-4175-a000-6ea1e7c8fef7&tenantId=5a9809cf-0bcb-413a-838a-09ecc40cc9e8)!
---
## The problem(s)...
- "Where did I save that script again..?"
- "Which version of that are you using?"
- "Did you end up solving that bug we found the other day?"
- "Good that you fixed that, can you send me the updated version?"
- "I added this feature, can you integrate it in the code?"
- "I SWEAR IT WAS WORKING YESTERDAY, I DON'T KNOW WHAT CHANGED"
---
## Manual backups can help, but...
<img src="https://phdcomics.com/comics/archive/phd101212s.gif" height=700/> <!-- Amazing!! -->
<small>
Source: https://phdcomics.com/comics/archive.php?comicid=1531
©️ Jorge Cham
</small>
---
## ... the real™ solution
- Version control systems (VCS)!
- Keep everything you need in a single "bucket" (*repository*)
- Make sure everyone has access to the latest developments
- Keep track of the history of a document/software
- Sustainable collaborative workflows
- Different flavours:
- Centralised: Concurrent versions system (CVS), Subversion (SVN), Perforce, ...
- Distributed: Git, Mercurial, Bazaar, ...
---
## Keep track of the history of the code
<img src="https://upload.wikimedia.org/wikipedia/commons/c/cb/Tig_v2.5.1_history_and_one_commit_details.png" />
---
## Centralised vs distributed VCSs
- Centralised:
- One main remote repo that stores every version of the code
- Client-server architecture
- Every developer has only a local snapshot of the latest version
- Pros: work really well with binary files, easier to learn
- Cons: single point of failure, client-server communication can slow down development, only one person can work on a piece of code at a time
---
## Centralised vs distributed VCSs
- Distributed:
- Every peer has the whole history tree cloned on their device
- Possible to work offline, servers only stores the difference between versions
- Possibility to implement strong workflows and code-checking procedures
- Pros: More resilient (everyone has a backup), flexible branching (tested locally), quick development cycles
- Cons: steeper learning curve, suboptimal for large binary files
---
## Git structure and workflow
<!--  -->
```mermaid
%%{init: {'theme': 'default', 'gitGraph': {'rotateCommitLabel': true, 'useMaxWidth': false, 'showCommitLabel': false, 'nodeLabel': {'width':100, 'height': 30, 'x': 0, 'y': -10} }, }}%%
---
title: Lesson development
---
gitGraph
commit
commit
branch julia_notebook
checkout julia_notebook
commit
commit
commit type: REVERSE
commit
checkout main
branch python_notebook
checkout python_notebook
commit
checkout main
commit
checkout python_notebook
commit
checkout main
merge python_notebook
commit
commit
```
- The history of a repo is a directed acyclic graph (DAG)
- Each arrow is a *branch*
- Branches can be used as sandboxes to modify/develop things without affecting the main version
- Each dot is a *commit*, i.e. a saved snapshot of your repo
- Each commit should include a message (e.g. "fixed this bug")
- Branches can then be *merged* back into the main path (blue)
---
## Git structure and workflow - Collaboration
- <font color='#f00'>Remember</font>: Git is decentralised!
- Every change you make is <font color='#f00'>local</font>!
- This means that changes have to be *pushed* to the remote repo (e.g. GitHub)
- It also means that the latest changes have to be *pulled*
- Very easy to keep up with people's work: you just *pull* from the remote origin :)
- During merges/pulls, code reviews and discussion, as well as tests, can be performed
---
## Logging in Git

---
## Project management features
- Couple of platforms based on git: GitHub, GitLab
- Both have features such as:
- access levels: for creating groups of maintainers / developers / reviewers + their code projects
- planning: organize issues, pull-requests, milestones in a Kanban board
- CI/CD: automatise workflows, deploy
- RISE runs their own GitLab!
- Join the [GitLab team](https://teams.microsoft.com/l/team/19%3AiBEHvWyPK7Hq543OelkXb4jttoeo-x2bjUoexVEApAw1%40thread.tacv2/conversations?groupId=b0f6b139-5886-4175-a000-6ea1e7c8fef7&tenantId=5a9809cf-0bcb-413a-838a-09ecc40cc9e8)
- After 15 minutes, login to https://git.ri.se
---
## Let's give a look to the RISE Gitlab!