---
# System prepended metadata

title: MPHY0021 - Day 1 (7th October 2021)
tags: [class, teaching, mphy0021]

---

# MPHY0021 - Day 1 (7th October 2021)

:::info
## :tada: Welcome to the first day!
MPHY0021
### Today
Today we will have a
- short introduction about the what's we will be covering in this course and how to use the tools we need, and
- an introduction to version control with Git.
:::

### :stopwatch: Time keeper
- [name=Thomas R] :raised_hand: 5' before the end of each block.
 - 10:00 - 10:50
 - 11:05 - 11:55
 - 12:05 - 12:55
### Course and tools

#### Tools
- [Introduction to Zoom](/g3UdAivaRg-qJjmf0E_StQ)
- [Introduction to HackMD](/LMK0i9QQTiuaWanyKcRBtQ)
- We will also use [GitHub][gh] - [create an account **now**][gh-account] if you've not done it already.
    - You will need to [set ssh keys](/FMnWK53aRz6BcFA3DOR7ZA) to be able to use it during the course.

#### Course

- [Introduction to MPHY0021](/1JQyi7gmQviK8DMNmqUdXg)


### Groups

We will be using the breaking rooms functionality of Zoom.
We have the following groups, and each group have its own document

Today, as we don't know which :e-mail: you used to connect, we will assign groups randomly.
Once in your breakout-room, find who is chairing that room and open the document linked to that group.

:::danger
Once you are in the breakout room and you know in which group you are in, click `rename` on your zoom name (in the participants list) and change it to:
`SGX - Your name` being `X` the number of the group you have been assigned to. 
:::

- [Group 1: David](/6AbGEpIuQ4OFbgHZj9GXpA)
- [Group 2: Anastasis](/ZZGMZE1tSAaPpB0_3fxCAw)
- [Group 3: Nisha](/uDIu727VSUuz_hGroxKGmQ)
- [Group 4: Stef](/oWoiQcvuQee6bcbnMk9aMQ)
- [Group 5: Matthew](/4RQMPMFVRdGkxzMoYF0jyQ)
- [Group 6: Alessandro](/znv7flyZT6qCSQX2u5qJaQ)
- [Group 7: Matt](/WY-Fc_PvQUS5d1K-UotLBQ)



### Git

#### Group Discussion 1: Why we need a version control system?

In your groups discuss this image and write your conclusions about why a VCS is useful.
![](http://swcarpentry.github.io/git-novice/fig/phd101212s.png)

#### Discussion comments

- group 1:
    - The student is using a version control system but not too efficent
    - This kind of scenario arises because of wishful thinking - not anticipating the complicated trajectory that the project will take, and just hoping/expecting it will all go smoothly. 
    - It is important for the VCS to track what the significance of the different versions is - not just to have arbitarily named versions, or timestamped versions - so that you can identify which previous version you are looking for. 
- group 2:
    - Collaboration
    - Keep track of changes made
    - To back up the work that has been done
    - Alternate versions
    - For small or large projects
- group 3:
    * Collaboration - Important to keep track of different changes people make when working within a group
    * The above shows how hard it is to keep track of which changes have been made with different file names
    * VCS is useful if you wanted to go back to a particular version in history
    * With VCS you can also backup/retrieve your files/project from github
- group 4:
    * Keeping track of collaborative document - see latest version!
    * Documenting changes, so we know who to blame :) or thank.
    * Previous strategies include: Storing docs in specific folders for certain contributors. Compare to "main" doc.
    * Benefits of git-style version control: Seeing contrasting suggestions to "improve" - everyone can see the same thing.

- group 5:
    * naming files adding more and more stuff, gets overwhelming.
    * consistent naming is an issue, not logical.
    * Click interface for git in class work
    * Undergraduate group project, add new version to git to always get new version.
    * A backup or two of previous two versions. Named it backup1... and backup2..., to make sure can access a previous version.
- group 6: 
     * ability to go back to previous version 
     * people can collaborate on the same document
     * safety of main version when trying to add new features
     * easy to have an overview of all versions and how they're connected
     * learn to be organised/practice being organised
     * enforces modularity and thinking in small updates
- group 7:
  * Can be used to backup files in a project to allow us to recover previous versions
  * Allows multiple people to collaborate on same project simultaneously or one person to work on various parts (mention of experience of using branches)
  * Tools like GitHub, Bitbucket allow us to work collaboratively and synchronize files across multiple computers

#### Introduce ourselves to git

Follow live coding using a git bash (windows) or a terminal (Mac/Linux).

:::warning
If you are unfamiliar with the bash shell, you can learn about it going through the [Software Carpentry's introduction to the Unix shell](https://swcarpentry.github.io/shell-novice/).
You have also got access to courses in:
- LinkedIn Learning: [Learning Linux Command Line](https://www.linkedin.com/learning/learning-linux-command-line-2/learning-linux-command-line?u=69919578) (check Chapters 2-4)
- O'reilly Learning: [Linux Command Line for Beginners](https://learning.oreilly.com/videos/linux-command-line/9781771374446/) (Chapters 1-4)


If you are unfamilliar with git:

- Go through our [course notes on git](http://github-pages.ucl.ac.uk/rsd-engineeringcourse/ch02git/) (also linked on moodle)
- You can learn learn more through the [Software Carpentry's Version Control with Git](https://swcarpentry.github.io/git-novice/)
:::

First try
`git config --list` Do you get an output?
No?

```bash
 git config --global user.name "Your Name"
 git config --global user.email "your_email@email.com"
 git config --global core.editor "nano -w"
 git config --global init.defaultBranch "main"
 ```
 #### Create a repository
 
 ```bash
 pwd # Note where we are standing-- MAKE SURE YOU INITIALISE THE RIGHT FOLDER
cd Desktop/
mkdir family_recipes
```

```
cd family_recipes
git init
```

#### Creating recipes



```bash
nano index.md
```

contents of `index.md`:
```
# Family secret recipes

Set of recipes as given by my grandma.


```


```bash
git add index.md
git commit -m "Setting up the title for the book"
```

running `git status` should say `...nothing to commit, working tree clean`

running `git log` will have the single commit

##### Visual studio code

adding and committing:

- File > Open Folder ... `family_recipes`
- Left hand side can see the index.md file, can open it and edit it :
    - contents of `index.md`:
    ```
    # Family secret recipes

    Set of recipes as given by my grandma.

    - pizzas (TODO)
    - sauces (TODO)
    - spreads (TODO)
    ```
- Source Control/branch icon shows that a single file is modified
- click on the Source Control icon
- files have 4 icons in this panel: open file / discard changes / stage changes (i.e. git add) / state of file
- click stage changes icon -> the file is now in the `staged changes` section
- Type in the commit message above the staged changes.
- `Ctrl + Enter` or click check mark to commit

git log (requires git graph extension, install it if you don't have it):

- click on graph icon to the right of where the git commit check mark is
- Can explore the commit information, click on the file to see side by side differences that were made to the file

##### making mistakes

- update index.md to have mistakes:

```markdown=
# Family secret recipes

Set of recipes as given by my grandma.

- pizas (TODO)
- sauses (TODO)
- reads (TODO)
```

- save file, stage and then commit the file, which has some typos
- Now make a change that is valid

```markdown=
# Perez's Family secret recipes

Set of recipes as given by my grandma.

- pizas (TODO)
- sauses (TODO)
- reads (TODO)
```

- save file, stage and then commit the file
- Go to git graph and view the commits
- revert the previous commit at the command line by doing one of the following, (edit the commit message if you'd like and exit the editor):
    - `git revert HEAD^`
    - `git revert HEAD~1`
    - `git revert <commit hash/barcode>`
- current state of `index.md`

```markdown=
# Perez's Family secret recipes

Set of recipes as given by my grandma.

- pizzas (TODO)
- sauces (TODO)
- spreads (TODO)
```

#### github

- log in to [github][gh]
- click create a [new repository][gh-new]
- make the repository name `family_recipes`
- don't tick any of the options boxes
- click the create repository button
- copy the github url (can be either the shh if you've set this up, or https if not)
- add the github url as the remote and push local changes to github

```
git remote add origin <github url>
git branch -M main
git push -u origin main
```

# Next week

We will learn:

- How to merge conflicts, 
- Git branching, and
- better strategies about collaborating with others.

# Questions

Here you can post any question you have while we are going through this document. A summary of the questions and the answers will be posted in moodle after each session. Please, use a new bullet point for each question and sub-bullet points for their answers.

For example writing like this:
```
- Example question
  - [name=student_a] Example answer
  - [name=TA_1] Example answer
```
produces the following result:
- Example question
  - [name=student_a] Example answer
  - [name=TA_1] Example answer

Write new questions below :point_down: 

  - [name=student_a] Example answer
  - [name=TA_1] Example answer


  - Q1.Where/how do we send person 1 the invitation link?
    - [name=Umit] I have paste my link next to my name in group breakour hackmd. That might be way to share I guess
    - [name=Anastasis] We'll go over that when the time comes :smiley: 
    
    
    



















###### tags: `mphy0021` `teaching` `class`
[gh]: https://github.com/
[gh-account]: https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F&source=header-home
[gh-new]: https://github.com/new
