Commit 148571ce authored by Laurent Heirendt's avatar Laurent Heirendt
Browse files

Merge branch 'git-training-june-2019' into 'develop'

Slides for git training

See merge request R3/outreach/presentations!7
parents 036a198d a0da52d1
# Generated on 2013-11-27 using generator-reveal 0.3.2
module.exports = (grunt) ->
grunt.loadNpmTasks 'grunt-gh-pages'
grunt.initConfig
"gh-pages":
"gh-pages":
options:
base: "dist"
src: [ '**' ]
watch:
livereload:
options:
livereload: true
files: [
'index.html'
'slides/*.md'
'slides/*.html'
'theme/js/*.js'
]
index:
files: [
'theme/templates/_index.html'
'theme/templates/_section.html'
'slides/list.json'
]
tasks: ['buildIndex']
coffeelint:
files: ['Gruntfile.coffee']
tasks: ['coffeelint']
jshint:
files: ['theme/js/*.js']
tasks: ['jshint']
connect:
livereload:
options:
port: 9000
# Change hostname to '0.0.0.0' to access
# the server from outside.
hostname: 'localhost'
base: '.'
open: true
livereload: true
coffeelint:
options:
indentation:
value: 4
all: ['Gruntfile.coffee']
jshint:
all: ['theme/js/*.js']
copy:
dist:
files: [{
expand: true
src: [
'slides/**'
'theme/**'
'theme/css/**'
'theme/js/**'
'slides/img/**'
]
dest: 'public/'
},{
expand: true
src: ['index.html']
dest: 'public/'
filter: 'isFile'
}]
# Load all grunt tasks.
require('load-grunt-tasks')(grunt)
grunt.registerTask 'buildIndex',
'Build theme/templates/_index.html and slides/list.json.',
->
indexTemplate = grunt.file.read 'theme/templates/_index.html'
sectionTemplate = grunt.file.read 'theme/templates/_section.html'
slides = grunt.file.readJSON 'slides/list.json'
html = grunt.template.process indexTemplate, data:
slides:
slides
section: (slide) ->
grunt.template.process sectionTemplate, data:
slide:
slide
grunt.file.write 'index.html', html
grunt.registerTask 'test',
'*Lint* javascript and coffee files.', [
'coffeelint'
'jshint'
]
grunt.registerTask 'server',
'Run presentation locally and start watch process (living document).', [
'buildIndex'
'connect:livereload'
'watch'
]
grunt.registerTask 'dist',
'Save presentation files to *public* directory.', [
'test'
'buildIndex'
'copy'
]
# Define default task.
grunt.registerTask 'default', [
'test'
'server'
]
{
"name": "template",
"version": "0.0.1",
"private": true,
"devDependencies": {
"grunt": "~0.4.1",
"grunt-coffeelint": "0.0.7",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.7.0",
"grunt-contrib-sass": "^1.0.0",
"grunt-contrib-watch": "~0.5.3",
"grunt-gh-pages": "~0.9.0",
"load-grunt-tasks": "~0.2.0"
},
"engines": {
"node": ">=0.8.0"
},
"scripts": {
"test": "grunt test"
}
}
## Best practices
* `pull` before `push`
* Work on your <font color="red">own</font> branch (in your own fork), and **not** on `master` and **not** on `develop`
* Do **not push** to `master`, but **submit a PR**
* Get your code **reviewed** by your peers (submit a PR!)
* Submit a PR **often**!
* `clone` a repository, do not download the `.zip` file.
* Do **not** combine `git` commands
```bash
$ git commit -am "myMessage" # do not do this
```
* Stage only 1 file at once using
```bash
$ git add myFile.md
```
* Commit **only a few files** at once (after multiple separate `git add` commands)
* `Push` often - avoid conflicts
<br><br>
Remember: **A `push` a day keeps conflicts away!**
## Development scheme
Generally, in a repository, there are guidelines for contributing.
<div class="fragment">
A common development scheme is dual with a:
- **development** version of the code on `develop`
- **stable** version of the code on `master`
A **version** of the code is referred to as a **branch**.
<div class="fragment">
<img src="slides/img/icon-live-demo.png" height="100px">
<font color="red">In the practice repository, the development branch is called `develop`!</font>
<div class="fragment">
![bulb](slides/img/bulb.png) Use this dual development scheme for your own repositories!
## Branches
A **version** of the code (i.e., a **branch**) is made up of a sequence of code changes.
<div class="fragment">
These individual code changes are called **commits**.
For instance, the `master` and `develop` branches can be represented as a timeline:
<img src="slides/img/branch-master.png" class="branch-master" height="500em"/>
## Switch between branches
List all branches of the repository with
```bash
$ git branch -a
```
Exit by typing `q`. The branch with the * is the current branch.
<div class="fragment">
Checkout another branch
```bash
$ git checkout branchName
```
<div class="fragment">
You can switch to the `develop` branch with
```bash
$ git checkout develop
```
<div class="fragment">
<img src="slides/img/icon-live-demo.png" height="100px">
## Create your own version
Assume that you want to work on a function for adding 2 numbers.
<div class="fragment">
<font color="red">Create a new **branch**!</font>
```bash
$ git checkout -b myBranch
```
The `-b` flag creates the branch. Locally, you have your own version now:
<img src="slides/img/branch-create.png" class="branch-create" height="500em"/>
Push your version to your fork:
```bash
$ git push origin myBranch
```
<div class="fragment">
<img src="slides/img/icon-live-demo.png" height="100px">
## How do I start working on a repository?
You have to `clone` it first:
```bash
$ git clone git@github.com:userName/myRepo.git myRepo
```
If you did not configure your SSH key, clone using HTTPS:
```bash
$ git clone https://github.com/userName/myRepo.git myRepo
```
You will be prompted to enter your credentials.
## How to configure `git`?
```bash
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "first.last@uni.lu"
```
Test whether your username and email have been registered
```bash
$ git config --list
```
This should list the configuration with `user.name` and `user.email`.
Exit by typing `q`.
## What is an SSH key?
An SSH key is a secure access credential.
**Principle**: <br><br>
Communicate **securely** with Github/Gitlab **without** entering the username/password.
## How do I get and set my SSH key?
Check if you already have an SSH key:
```bash
$ ls -al ~/.ssh
```
If there are 2 files named `id_rsa`, you have an SSH key.
If you don’t have yet an SSH key, you have to generate one:
```bash
$ ssh-keygen -t rsa # -b 4096
```
Then, add the SSH key to Github/Gitlab.
<img src="slides/img/icon-live-demo.png" height="100px">
\ No newline at end of file
## The 5 essential commands
**Yes**, you only need 5 commands!
`pull, status, add, commit, push`
or in other words (remember these!):
```bash
$ git pull <remote> <branch>
$ git status
$ git add myFile.md # example
$ git commit -m "myMessage" # example
$ git push <remote> <branch>
```
## Pull the latest version of an existing branch
Pull the latest revision on branch `myBranch`:
```bash
$ git pull origin myBranch
# Already up to date
```
<div class="fragment">
Verify its `status` with:
```bash
$ git status
```
## Modify a file
Copy the file `template.md` in the folder `_attendees` and rename it with your firstname:
```bash
$ cd _attendees
$ cp template.md myName.md
```
Then, make your changes with your favorite editor!
## Add your file to the stage
First, check the repository status
```bash
$ git status
# uncommitted changes (displayed in red)
```
<div class="fragment">
**ADVANCED**: see your changes in the terminal
```bash
$ git diff
```
exit with `q`
<div class="fragment">
Now, add the file (bring it on stage)
```bash
$ git add myName.md # replace myName
$ git status
# returns the same as before, generally in green (means staged)
```
## Add a commit message
```bash
$ git commit -m "Add the profile of <myName>"
$ git status
```
## Push your file to your fork
```bash
$ git push origin myBranch
```
<div class="fragment">
**ADVANCED**: see the log of all the commits (and your last one) in the terminal
```bash
$ git log
```
exit by typing `q`.
\ No newline at end of file
## What is a `fork`?
<img src="slides/img/fork.jpg" class="as-is" height="500em"/>
<!--http://www.cndajin.com/data/wls/246/22302193.jpg-->
## Not really ...
<img src="slides/img/fork-crossed.png" class="as-is" height="500em"/>
## What is a `fork`?
In general, when contributing to a repository, you only have **read** access.
In other words, you can only **pull** (unless it is your own repository or access has been granted).
In general, you **cannot write** changes. In other words, you do not have **push** access.
You have to work on your **own copy**.
In other words, you have to work on your own <font color="red">**fork**</font>.
## How to get a fork?
Browse to the original repository and click on the button `Fork`:
![Fork the repo](https://help.github.com/assets/images/help/repository/fork_button.jpg)
<img src="slides/img/icon-live-demo.png" height="100px">
## Time to practice!
Fork the practice repository: <br><br>
https://github.com/LCSB-BioCore/basic-git-practice
Then, clone your fork to your home directory!
<img src="slides/img/icon-live-demo.png" height="100px">
```bash
$ git clone git@github.com:<yourName>/basic-git-practice.git
```
Change to the practice directory with:
```bash
$ cd basic-git-practice
```
## A note on shortcuts ...
<font color="red">
Any other rudimentary method such as
*'I simply download the `.zip` and unzip it - works like a charm!'*
shall **be avoided**!
</font>
**Why?**
## How to update my fork?
As you have your own fork, it will not automatically update once the original repository is update.
![bulb](slides/img/bulb.png) You have to update it yourself!
**More on that later!**
## GitHub and GitLab
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub" style="width: 200px;"/>
<img src="https://gitlab.com/gitlab-com/gitlab-artwork/raw/master/logo/logo-extra-whitespace.png" alt="GitLab" style="width: 200px;"/>
GitHub and GitLab are VCS systems.
GitHub/Gitlab are both **publicly available**, but GitLab can be **on-premise**.
Positive point: GitHub and GitLab are (almost) the same.
<img src="slides/img/icon-live-demo.png" height="100px">
- **GitHub**: [https://github.com](https://github.com)
- Public GitLab: [https://gitlab.com](https://gitlab.com)
- LCSB specific: [https://git-r3lab.uni.lu](https://git-r3lab.uni.lu)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment