# GitHub-koulutus 03.08.2023
> @MatiasJJ / Matias Jääskeläinen, CSC & CodeRefinery
> https://github.com/MatiasJJ
## Tämän dokumentin sisältö
[toc]
## Mikä homma?
Tutustumme GitHubiin [CodeRefineryn](https://coderefinery.org) materiaalien avulla.
- CodeRefinery kouluttaa hyviä koodauskäytäntöjä sekä niihin liittyviä menetelmiä ja työkaluja. Seuraava CodeRefinery workshop alkaa 19.9.23 ([Katso lisätietoja ja rekisteröidy tästä](https://coderefinery.github.io/2023-09-19-workshop/))
Suositus mitä pitää näkyvissä koulutuksen ajan:
- Laita näytölle vierekkäin Zoom/näytönjako, sekä verkkoselain, jossa auki github.com
- Voit avata tämän dokumentin ja CodeRefineryn materiaalit selaimen välilehtiin tai toiselle näytölle
## Mikä GitHub ja miksi?
:::info
- [Tämä sarjis kertoo miksi git](https://phdcomics.com/comics/archive.php?comicid=1531)
- Siirrymme hetkeksi tänne: https://coderefinery.github.io/github-without-command-line/basics/
:::
---
## Harjoitus 1: Repositoryn luominen GitHubissa
:::info
- Harjoituksen ohjeet löytyvät täältä: https://coderefinery.github.io/github-without-command-line/creating-using-web/
- Teemme kohdat 1.-5. ja voimme vilkaista kohtia 6. ja 7.
- Tehdään yhdessä kaikki yhtäaikaa
:::
---
## Harjoitus 2: Repositoryn käyttö tiimityössä
:::info
- Tehdään tiimityönä 3 hlö tiimeissä
- Tiimissä on seuraavat roolit
- **Admin**: jakaa repositoryn oikeudet, muokkaa reseptiä
- **Cuacamole**: muokkaa reseptiä
- **Majoneesi**: muokkaa reseptiä
:::
::: spoiler Klikkaa tästä auki ohjeet
- Valitkaa roolinne
- Edetkää vaiheeseen 1.
:::
### Vaihe 1: Lisää kollaboraattorit
::: spoiler Klikkaa tästä auki ohjeet
- **Admin**: Lisää tiimiläiset repositorioon "as collaborators"
- **Cuacamole** & **Majoneesi**:: Kerro Adminille Github-tunnuksesi

> Nyt muilla tiimiläisillä on oikeus tehdä muutoksia repositorioon.
- **Cuacamole** & **Majoneesi**: Hyväksy kutsu

- **Admin**: Jaa muille repositoriosi linkki
- **Cuacamole** & **Majoneesi**: Avaa repositorio
- Edetkää vaiheeseen 2.
:::success
💬 Keskustelu jos jää aikaa
- Mitä hyviä puolia tässä työskentelytavassa?
- Mitä huonoja puolia tässä työskentelytavassa?
:::
### Vaihe 2: Tee muutos reseptiin repositoriossa
::: spoiler Klikkaa tästä auki ohjeet ADMIN 1.
1. Odota muiden muokkauksia, voit avustaa tarvittaessa
:::
::: spoiler Klikkaa tästä auki ohjeet MAJONEESI
1. Avaa resepti-tiedosto joka löytyy repositoriosta
2. Sano Cuacamolelle että hän voi alkaa tehdä omaa juttuaan 😉
3. Avaa tiedoston muokkaus 
4. Lisää haluamasi määrä majoneesia
5. Klikkaa "Commit changes"
6. Kirjoita "Commit message" esim. "Added some mayo"
7. Valitse "Create a new branch for this commit and start a pull request"
8. Anna uuden branchin nimi esim "add-mayo"
9. Anna kuvaava teksti pull requestille esim "added mayo"
10. Tee pull request klikkaamalla "Create pull request"
11. Kerro adminille, että hän voi käydä hyväksymässä pull requestisi
:::
::: spoiler Klikkaa tästä auki ohjeet CUACAMOLE
1. Tee uusi branch:
- 
2. Anna uuden branchin nimi esim "add-cuacamole"
3. Avaa resepti-tiedosto joka löytyy repositoriosta
4. Avaa tiedoston muokkaus 
5. Lisää haluamasi määrä cuacamolea
6. Klikkaa "Commit changes"
7. Kirjoita "Commit message" esim. "Added some cuacamole"
8. Valitse "Commit directly to the add-cuacamole branch"
9. Palaa takaisin repositorion pääsivulle ja tee uusi pull request
- 
10. Anna kuvaava teksti pull requestille esim "added cuacamole"
11. Tee pull request klikkaamalla "Create pull request"
12. Kerro adminille, että hän voi käydä hyväksymässä pull requestisi
:::
::: spoiler Klikkaa tästä auki ohjeet ADMIN 2.
1. Kun saat tiedon pull requestista niin käy hyväksymässä se

2. Merge pull request
3. Confirm merge
4. Delete branch
:::
### Vaihe 3: Konflikti ja miten se hoidetaan
::: spoiler Klikkaa tästä auki ohjeet ADMIN 1
1. Sano mulle tiimiläisille että he voivat alkaa tehdä omaa juttuaan 😉
2. Odota että he ovat tehneet oman branchin
3. Avaa resepti-tiedosto joka löytyy repositoriosta
4. Avaa tiedoston muokkaus 
5. Laita suolaa kymmenkertainen määrä
6. Klikkaa "Commit changes"
7. Kirjoita "Commit message" esim. "A lot of salt"
8. Valitse "Commit directly to the main branch."
9. Seuraa muiden etenemistä. Voit pyytää jakamaan ruutua.
:::
::: spoiler Klikkaa tästä auki ohjeet MAJONEESI
1. Tee uusi branch:
- 
2. Anna uuden branchin nimi esim "more-salt"
3. Avaa resepti-tiedosto joka löytyy repositoriosta
4. Avaa tiedoston muokkaus 
5. Muuta suolan määrää suuremmaksi
6. Klikkaa "Commit changes"
7. Kirjoita "Commit message" esim. "Put more salt"
8. Valitse "Commit directly to the more salt branch"
9. Palaa takaisin repositorion pääsivulle ja tee uusi pull request
- 
10. Anna kuvaava teksti pull requestille esim "I want more salt"
11. Tee pull request klikkaamalla "Create pull request"
12. Kerro adminille, että hän voi käydä hyväksymässä pull requestisi
:::
::: spoiler Klikkaa tästä auki ohjeet CUACAMOLE
1. Tee uusi branch:
- 
2. Anna uuden branchin nimi esim "less-salt"
3. Avaa resepti-tiedosto joka löytyy repositoriosta
4. Avaa tiedoston muokkaus 
5. Muuta suolan määrää pienemmäksi
6. Klikkaa "Commit changes"
7. Kirjoita "Commit message" esim. "Put less salt"
8. Valitse "Commit directly to the more salt branch"
9. Palaa takaisin repositorion pääsivulle ja tee uusi pull request
- 
10. Anna kuvaava teksti pull requestille esim "I want less salt"
11. Tee pull request klikkaamalla "Create pull request"
12. Kerro adminille, että hän voi käydä hyväksymässä pull requestisi
:::
::: spoiler Klikkaa tästä auki ohjeet ADMIN 2.
10. Kun saat tiedon pull requestista niin käy hyväksymässä se

11. Ohhoh konflikti!
12. Klikkaa "Resolve conflicts"
- 
13. Muokkaa teksti niin että suolaa on haluamasi määrä
- 
14. Klikkaa "Mark as resolved" ja "Commit changes"
15. Merge pull request
16. Confirm merge. Delete branch.
17. Toista toiselle pull requestille jos jää aikaa
:::
---
## Review
### Mitä jäi mainitsematta
- Kuinka pyytää ja tehdä **review** pull requestille
- Pull Requestia tehdessä voi asettaa reviewerin
- Eri tavat **"ladata"** repositorio
- ZIP-tiedosto
- Hyvä jos et halua historiatietoja, tai lähettää muutoksiasi online-versioon
- **Repositorion kloonaus**
- Voit jakaa muutoksesti online-repositorioon
- Saat myös täyden historiatiedon ja kaikki branchit
- **Branch protection**
- To make sure that *all* changes of the `master` branch are reviewed and nobody can push commits to it directly, it can be useful to "protect" branches.
- "Settings", then "Branches", then "Add rule":
- Protecting the `master` branch "forces" all changes to it to be reviewed first.
- **We recommend this for group repositories**.
- **Forking**
- Kun sinulla ei ole muokkausoikeuksia repositorioon mutta haluat kokeilla ja tehdä muutoksia
- Miten muuttaa repositorio **yksityiseksi tai julkiseksi**
- [https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility](Ohjeet GitHubin Docsissa)
- Miten saadaan koko repositorio vedettyä takaisin aiempaan pisteeseen?
- [https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reverting-a-commit-in-github-desktop](Ohjeet GitHub Desktopille)
- Microsoft Office -tiedostot GitHubissa
- Ei suoraan suositella, mutta aina joku on kehittänyt jonkin ratkaisun, esim [tämä koodiesimerkki](https://gist.github.com/mbrehin/634f46aeacb0a9a6da5e)
:::success
## Mainos: CodeRefinery
CodeRefinery on projekti ja avoin yhteisö, jonka tavoitteena on tarjota koulutusta mm. tänään esillä olleista aiheista. Meillä on Zulip-chat (vrt. Slack) johon saa liittyä vapaasti. https://coderefinery.org/join/
Ja workshopissa lisää tietoa näistä aiheista. https://coderefinery.github.io/2023-09-19-workshop/
- Voit ihan valita mihin oppitunteihin osallistuu ja ei ole pakko tehdä mukana tehtäviä, voi vain seurata striimiä (Twitchissä).
:::
## Extra material
- [Itse keräämiäni komentoja Git:in käyttöön](https://github.com/MatiasJJ/GitHub/tree/master)
- [Ome esimerkki recipe repo](https://github.com/MatiasJJ/cr-git-training-recipe/tree/main)
- Good material about citation.cff in https://cicero.xyz/v3/remark/0.14.0/github.com/coderefinery/research-software-engineering/main/presentation.md/#46 up to 48
- And more links to quick reference
https://cicero.xyz/v3/remark/0.14.0/github.com/coderefinery/research-software-engineering/main/presentation.md/#49
- Zenodo: https://coderefinery.github.io/github-without-command-line/doi/
- [The turing way](https://the-turing-way.netlify.app/index.html): A great general resource on reproducible, ethical and collaborative data science
- [All CR lessons](https://coderefinery.org/lessons/from-coderefinery/)
- [CR videos from last workshop](https://www.youtube.com/playlist?list=PLpLblYHCzJADyLxv8GRyxFiRJBhQ-G0NQ)
- [CR material on READMEs](https://coderefinery.github.io/documentation/writing-readme-files/)
- [a good readme info](https://www.makeareadme.com)
- [Markdown guide](https://www.markdownguide.org/cheat-sheet/)
- Markdown on käytössä monessa paikassa
- GitHub renderöi nätisti. README.md on vakiona markdownia
- [JupyterLab](https://jupyter.org) käyttää tekstisoluissa markdownia
- RMarkdown esim RStudiossa
- HackMD ja HedgeDoc käyttävät markdownia