Skip to content
Snippets Groups Projects
Commit 5e968981 authored by Laurent Heirendt's avatar Laurent Heirendt :airplane:
Browse files

Merge branch 'lh-changes-git-part-1' into 'develop'

Changes for git part 1

See merge request !126
parents 45b1345b a82aa466
No related branches found
No related tags found
2 merge requests!129[release] Regular merge of develop,!126Changes for git part 1
Pipeline #57259 passed
Showing
with 132 additions and 413 deletions
# Wrap-up
# Summary
* Git makes things separated but interlinked!
* separation of changes into commits - compare with standard "versioning" of dropbox/onedrive/owncloud or labeling v1.2 manually
* separation of work into branches - compare with standard work in parallel - making copy of file and renaming, then "putting it together"
* separation of work into forks - compare with "I will make my own copy of the whole folder"
GitLab creates a convenient and efficient working environment
- merge requests
- issues
- assignments
- much much more...
<div class="fragment">
* GitLab creates a convenient working environment
* merge requests
* issues
* assignements
* and much much more...
<div style="position:absolute;left:55%;top:55%">
<img src="slides/img/fox.png">
https://pixabay.com/images/id-5236832/
</div>
</div>
# Wrap-up
## Glossary
* git
* repository
* fork
* commit
* branch
* merge
* merge/pull request
## Best practices
# Best practices
* Work on your <font color="red">own</font> branch (in your own fork), and **not** on `master` and **not** on `develop`
* Do **not commit** to `master`/`develop`, but **submit a merge request (MR)**
......
# New term: <font color="color:red">branch</font>
* A sequence of commits (changes) is referred to as **branch**.
* A new branch can be created by __branching off__ from a commit.
* A **branch** can be understood as a named **version** of your repository.
* A sequence of commits (changes) is referred to as *branch*.
* A new branch can be created by *branching off* from a commit on another branch.
* A *branch* can be understood as a named *version* of your repository.
<div style="position:absolute;left:50%;top:1em">
<img src="slides/img/branch_branch-off_detail.png" class="as-is" height="800px"/>
......@@ -14,7 +14,7 @@
Generally, in a repository, there are guidelines for contributing.
<div class="fragment">
<br>
A common development scheme is dual with a:
......@@ -48,33 +48,39 @@ Best practice is to <font color="red">create a new **branch**!</font>
<img src="slides/img/branch_my-branch.png" height="800em"/>
</div>
<br>
<br>
Using branches ensures:
* your changes are made separately from other changes
* your version won't be affected by others
* all related changes are aggregated on one place
* your changes are made separately from other (unrelated) changes
* your version will not be affected by other contributors
* all related changes are aggregated in one place
* work can continue if the development of one feature gets stuck
<br>
Are you working on more features in parallel?
<font color="red">Create a new **branch**!</font> for each of them :)
<font color="red">Create a new **branch**!</font> for each of them!
# Quick recap
What is the difference between a *fork* and a *branch*?
# Time to practice!
<div class="fragment">
<br><br><br>
<div align="center">
<img src="slides/img/forking_detail-with-branches.png" height="500em"/>
</div>
1. What is the difference between **fork** and **branch**?
<div class="fragment fade-in-then-out">
<div style="position:absolute;left:10%;top:8em">
<img src="slides/img/forking_detail-with-branches.png" height="500em"/>
</div>
2. Why is best practice to branch off from `develop`?
3. Switch between branches
<div class="fragment fade-in-then-out">
<div style="position:absolute;left:10%;top:8em">
<img src="slides/img/branch_GUI_switch.png" height="500em"/>
</div>
# How to switch between branches?
<div style="position:absolute;left:10%;top:8em">
<img src="slides/img/branch_GUI_switch.png" height="500em"/>
</div>
Why is best practice to branch off from `develop`?
\ No newline at end of file
......@@ -4,17 +4,18 @@
* Every change moves the repository to a new state.
* Every change added to the sequence of changes is called **commit**.
* Every commit has:
* message - why
* author - who
* timestamp - when
* unique identifier
* content - what?
* a message - why?
* an author - who?
* a timestamp - when?
* unique identifier - tracking number
<div style="position:absolute;left:60%;top:1em">
<img src="slides/img/commit_history-diagram.png" class="as-is" height="800px"/>
</div>
<div class="fragment">
Gitlab UI:
Gitlab:
<div style="position:absolute">
<img src="slides/img/commit_GUI_1.png" class="as-is" height="350px"/>
</div>
......@@ -23,9 +24,10 @@ Gitlab UI:
# New term: <font color="color:red">commit</font>
## Time to practice!
1. Notice last commit on files
<img src="slides/img/icon-live-demo.png" height="100px">
1. Notice last commits that modified files/folders
<!-- .element: class="fragment" data-fragment-index="1" -->
1. Review history of your repository
<!-- .element: class="fragment" data-fragment-index="2" -->
......@@ -45,10 +47,5 @@ Gitlab UI:
<img src="slides/img/commit_GUI_click-on-commit.png" class="as-is" height="75px"/>
</div>
<div class="fragment fade-in-then-out" data-fragment-index="3">
<img src="slides/img/commit_changes.png" class="as-is" height="600px"/>
<img src="slides/img/commit_changes.png" class="as-is" width="90%"/>
</div>
What is this
Notes:
Congrats! Now you have reviewed recent changes in your repository!
\ No newline at end of file
......@@ -20,18 +20,15 @@
# New term: <font color="color:red">fork</font>
## What is a `fork`?
- In general, by default you can only **read** files in a repository.
- In general, by default you **cannot write** changes.
- In general, by default, you can only **read** files in a repository. You **cannot write**.
<div class="fragment">
<img src="slides/img/forking.png" height="400px">
- You have to work on your **own copy** of the repository
- You have to work on your **own copy** of the repository in order to make changes.
- In other words, you have to work on your own <font color="red">**fork**</font>.
<br>
## Why?
......@@ -39,7 +36,9 @@
Browse to the original repository and click on the button `Fork`:
<img src="https://docs.gitlab.com/ee/user/project/repository/img/forking_workflow_fork_button_v13_10.png" height="250px">
<div align="center">
<img src="https://docs.gitlab.com/ee/user/project/repository/img/forking_workflow_fork_button_v13_10.png" height="150">
</div>
<br>
......@@ -48,19 +47,19 @@ Browse to the original repository and click on the button `Fork`:
## Time to practice!
1. Fork the practice repository: <br><br>
TODO<br><br>
1. Fork the training repository [https://gitlab.lcsb.uni.lu/R3/school/git/basic-practice-pages](https://gitlab.lcsb.uni.lu/R3/school/git/basic-practice-pages)
Congrats! Now you have your own **fork**!
Congrats! Now you have your own **fork**!
# How to update my fork?
# How to update my fork? - TODO: move to the end or delete
\
As you have your own fork, it will not automatically be updated once the original repository is updated.
As you have your own copy (fork), it will not automatically be updated once the original repository is updated.
![bulb](slides/img/bulb.png) You have to update it yourself!
<br>
**More on that later!**
**More on that later - time permitting**
# Git repository hosting platforms
<div style="position:absolute; left:70%">
<img src="https://gitlab.com/gitlab-com/gitlab-artwork/raw/master/logo/logo-extra-whitespace.png" alt="GitLab" style="width: 500px;"/>
</div>
......@@ -22,22 +23,15 @@ Another popular platforms:
# Time to practice!
<img src="slides/img/icon-live-demo.png" height="100px">
# Login and report and issue
1. Login to [https://gitlab.lcsb.uni.lu](https://gitlab.lcsb.uni.lu)
* use your LUMS credentials
2. browse the existing repositories
* Explore ->
* navigate to the training repository
2. Browse the existing repositories
* Explore and Search
* Navigate to the training repository [https://gitlab.lcsb.uni.lu/R3/school/git/basic-practice-pages](https://gitlab.lcsb.uni.lu/R3/school/git/basic-practice-pages)
3. Inspect project/repository folder structure
4. Discover an issue (see README.md) and report it
4. Report an issue
<div class="fragment">
Congrats! You are a **reporter** :)
</div>
<img src="slides/img/icon-live-demo.png" height="100px">
notes:
- reporter is very important role
2022/2022-05-31_git-trilogy-part-1/slides/img/commit_GUI_main.png

330 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png

35.1 KiB | W: | H:

2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png

58.8 KiB | W: | H:

2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png
2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png
2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png
2022/2022-05-31_git-trilogy-part-1/slides/img/commit_changes.png
  • 2-up
  • Swipe
  • Onion skin
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="512"
height="404"
viewBox="0 0 512 404"
sodipodi:docname="forking.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path862"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.4) rotate(180) translate(10,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path874"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path856"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4636">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:14.70300007;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4638"
width="457.06781"
height="457.06781"
x="-855.93219"
y="191.72882" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4636-5">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:14.70300007;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4638-3"
width="457.06781"
height="457.06781"
x="-855.93219"
y="191.72882" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4636-6">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:14.70300007;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4638-0"
width="457.06781"
height="457.06781"
x="-855.93219"
y="191.72882" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1848"
inkscape:window-height="1016"
id="namedview4"
showgrid="false"
inkscape:zoom="0.41306238"
inkscape:cx="614.44988"
inkscape:cy="412.11085"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<g
id="g2264"
transform="matrix(0.66901186,0,0,0.66901186,-50.839779,-375.17846)">
<image
y="0"
x="0"
id="image10"
xlink:href="data:image/png;base64,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 kZJZ/9cg0gjgfru1AAAAAElFTkSuQmCC "
preserveAspectRatio="none"
height="404"
width="512" />
<image
transform="matrix(0.52247993,0,0,0.52247993,692.85628,25.386292)"
clip-path="url(#clipPath4636)"
width="910"
height="380"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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 "
id="image927"
x="-825.54236"
y="203.72882" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:7.43499994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:7.43499994, 14.86999989;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 398.45698,-229.21991 c 450.88829,-2.07771 512.89649,-2.07771 512.89649,-2.07771"
id="path851"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<flowRoot
xml:space="preserve"
id="flowRoot1891"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-52.106759,-505.88167)"><flowRegion
id="flowRegion1893"><rect
id="rect1895"
width="362.91519"
height="54.779633"
x="-8.5593224"
y="446.7966" /></flowRegion><flowPara
id="flowPara1897"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start">Original project</flowPara><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="flowPara2019" /></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1891-6"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(1053.0765,-501.84847)"><flowRegion
id="flowRegion1893-4"><rect
id="rect1895-5"
width="220.83046"
height="56.491547"
x="-8.5593224"
y="446.7966" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="flowPara2023">Your fork</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1891-9"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-241.12253,-896.22096)"><flowRegion
id="flowRegion1893-9"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"><rect
id="rect1895-4"
width="1294.1694"
height="102.71184"
x="-8.5593224"
y="446.7966"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="flowPara2019-1">https://gitlab.com/[someone's-name]/<flowSpan
style="fill:#008000"
id="flowSpan2082">[repository-name]</flowSpan>/</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot1891-9-8"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(824.56008,-896.22096)"><flowRegion
id="flowRegion1893-9-6"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"><rect
id="rect1895-4-0"
width="1294.1694"
height="102.71184"
x="-8.5593224"
y="446.7966"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.66666603px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="flowPara2019-1-4">https://gitlab.com/<flowSpan
style="fill:#ff0000"
id="flowSpan2080">[Your-name]</flowSpan>/<flowSpan
style="fill:#008000"
id="flowSpan2084">[repository-name]</flowSpan>/</flowPara></flowRoot> <g
id="g2264-9"
transform="matrix(0.66901186,0,0,0.66901186,973.83847,-375.17846)">
<image
y="0"
x="0"
id="image10-7"
xlink:href="data:image/png;base64,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 kZJZ/9cg0gjgfru1AAAAAElFTkSuQmCC "
preserveAspectRatio="none"
height="404"
width="512" />
<image
transform="matrix(0.52247993,0,0,0.52247993,692.85628,25.386292)"
clip-path="url(#clipPath4636-6)"
width="910"
height="380"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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 "
id="image927-5"
x="-825.54236"
y="203.72882" />
</g>
</svg>
2022/2022-05-31_git-trilogy-part-1/slides/img/fox.png

434 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/icon-fork.png

4.96 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/merge_GUI_detail.png

58.1 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/merge_branch-to-branch.png

7.86 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/merge_changes.png

152 KiB

2022/2022-05-31_git-trilogy-part-1/slides/img/remote-local_architecture.webp

68.1 KiB

# Trilogy of Git Part 1
# R3.school
## May 31st, 2022
......@@ -8,12 +8,13 @@
<div style="top: 5em; left: 60%; position: absolute;">
<img src="slides/img/r3-training-logo.png" height="200px">
<br><br><br>
<h1>Contribute using Gitlab</h1>
<br><br><br><br>
<h1>Trilogy of git - Part I</h1>
<h2>Contribute using Gitlab</h2>
<br><br><br>
<h4>
Laurent Heirendt<br><br>
laurent.heirendt@uni.lu<br><br>
Laurent Heirendt, Ph.D.<br>
R3 Team - <a href="mailto:lcsb-r3@uni.lu">lcsb-r3@uni.lu</a><br>
<i>Luxembourg Centre for Systems Biomedicine</i>
</h4>
</div>
</div>
\ No newline at end of file
# New term: <font color="color:red">merge</font>
* You have made changes on your branch
* Now you want your changes to be reflected on another branch </br>(most probably `develop` or `master`)
* Now you want your changes to be reflected on another branch </br>(most probably `develop`)
<div style="position:absolute;left:60%;top:1em">
<div style="position:absolute;left:70%;top:1em">
<img src="slides/img/branch_merge-detail.png" height="800px" >
</div>
You have to <font color="color:red">merge</font> the branches.
**Remarks**: merging is directional - *Merge branch A to branch B*
- Merging is directional - *Merge branch A to branch B*
- Merging of branches is a process that is initiated via a so called **merge request** (MR):
- Your peers can comment on your changes in a merge request **review**!
### The merge is initiated via so called **merge request**
* *Requesting* someone (from the original repository) to *merge* your changes.
* *merge request* is commonly abreviated as **MR**
Your peers can comment on your changes in a merge request **review**!
# What happened in the background?
# Our state at the moment?
<div style="position:absolute;top:2em" >
<div style="position:absolute;top:2em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/fork_branch-diagram-after-commit.png" height="600px" >
</div>
<div style="position:absolute;top:2em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/fork_branch-diagram-after-commit-with-back-arrow.png" height="600px" >
</div>
# Time to practice!
# Merge request (MR)
* After hitting the Commit button, you get redirected to the submission page for your merge request
* Please make sure that you see that you are proposing to merge your branch (version) into the develop branch. This is shown at the top of the page:
<!-- .element: class="fragment" data-fragment-index="1" -->
* Fill your merge request submission form and select an Assignee.
<!-- .element: class="fragment" data-fragment-index="3" -->
* Good practice is to select Delete source branch when merge request is accepted. (Why?)
<!-- .element: class="fragment" data-fragment-index="4" -->
* Under Changes tab, you can see your... changes :)
<!-- .element: class="fragment" data-fragment-index="5" -->
<img src="slides/img/icon-live-demo.png" height="100px">
After hitting the *Commit* button, you get redirected to the submission page for your *merge request (MR)*
<div style="position:absolute;left:30%;top:4em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/merge_GUI_detail.png" height="720px" >
</div>
<div style="position:absolute;left:30%;top:6em" class="fragment fade-in-then-out" data-fragment-index="2">
<img src="slides/img/merge_branch-to-branch.png" height="100px" >
</div>
* Propose to merge your branch into the *development branch*. This is shown at the top of the page.
* Fill your merge request submission form and select an *Assignee*.
* Under Changes tab, you can see your changes
<div style="position:absolute;left:5%;top:10em" class="fragment fade-in-then-out" data-fragment-index="5">
<img src="slides/img/merge_changes.png" height="400px" >
</div>
![bulb](slides/img/bulb.png) Good practice is to select *Delete source branch when merge request is accepted*. Why?
# Synchronize your fork
<!-- TODO: do we need this slide? -->
<!-- Should it contain steps for deleting a branch -->
\ No newline at end of file
As mentioned earlier, your fork has been created a certain moment in time.
How to keep it updated?
## Easy way
Delete your fork and re-create it!
- Go to `Settings > General`
- Scroll down to the `Advanced` section and expand it
- Click on `Delete this project` and follow the on-screen instructions
![bulb](slides/img/bulb.png) Before you do this, please make sure that all your merge requests have been accepted.
## Automatic way
Follow the instructions on the How-To card: [https://howto.lcsb.uni.lu/?contribute:mirror-fork](https://howto.lcsb.uni.lu/?contribute:mirror-fork)
\ No newline at end of file
# Using versioning system?
# Why use a version control system?
Basic feature:
* Ability to recover old versions
* Ability to recover old versions
<div class="fragment">
<div style="position:absolute; left:50%">
<img src="slides/img/version-history_OneDrive.png" height="650px">
</div>
......@@ -11,20 +11,22 @@ Basic feature:
Common tools you are already using supporting "version control":
- Owncloud
- OneDrive
- DropBox
- ...
Its clear **who** changed **which file** and **when** :) Huray!
From the list of files, it is clear *who* changed which file and *when*.
<div class="fragment">
### But something is missing, right?
- **What exactly** was changed? (which section or row?)
- **Why** it was changed?
But some information is missing:
- *What exactly* was changed? (which section or row?)
- *Why* was it changed?
# Using versioning system?
# Why use a version control system?
## Manual file versioning + CHANGELOG
<br>
......@@ -73,7 +75,9 @@ note: overhead for doing this manually is huge
# Using versioning system?
What happens if **3** people contribute?
What happens when **3** people contribute?
```
my-document_v01_AK.docx
my-document_v01_AK_BP.docx
......@@ -87,14 +91,4 @@ CHANGELOG.txt
<div class="fragment">
What happens when **10** people contribute?
```
_ ._ _ , _ ._
(_ ' ( ` )_ .__)
( ( ( ) `) ) _)
(__ (_ (_ . _) _) ,__)
`~~`\ ' . /`~~`
; ;
/ \
_____________/_ __ \_____________
```
What happens when **10** people contribute?
\ No newline at end of file
# Time to practice!
# Workflow - Web IDE
To change content of a file:
* Browse to *your fork*
* Open Web IDE
<!-- .element: class="fragment" data-fragment-index="1" -->
* Select a branch you want to work on
* Select the development branch
<!-- .element: class="fragment" data-fragment-index="2" -->
* Edit file content
<!-- .element: class="fragment" data-fragment-index="3" -->
* Commit
<!-- .element: class="fragment" data-fragment-index="4" -->
* Hit Commit
* Select **Create a new branch** and type your branch name
* Leave the **Start a new merge request** checked
* Hit Commit
* Click Commit
* Select **Create a new branch**
* Type your branch name (optional, but recommended)
* Check **Start a new merge request**
* Click Commit
<div style="position:absolute;left:40%;top:1em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/commit_GUI_web-ide.png" height="600px" >
<div style="position:absolute;left:30%;top:1em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/commit_GUI_web-ide.png" width="90%" >
</div>
<div style="position:absolute;left:40%;top:1em" class="fragment fade-in-then-out" data-fragment-index="2">
<img src="slides/img/web-ide_select-branch.png" height="600px" >
<img src="slides/img/web-ide_select-branch.png" width="90%" >
</div>
<div style="position:absolute;left:33%;top:1em" class="fragment fade-in-then-out" data-fragment-index="3">
<img src="slides/img/web-ide_edit-file.png" height="400px" >
<img src="slides/img/web-ide_edit-file.png" width="90%" >
</div>
<div style="position:absolute;left:50%;top:1em" class="fragment fade-in-then-out" data-fragment-index="4">
<img src="slides/img/web-ide_commit-button.png" height="200px" >
<img src="slides/img/web-ide_commit-button.png" width="90%" >
</div>
<div style="position:absolute;left:50%;top:10em" class="fragment fade-in-then-out" data-fragment-index="4">
<img src="slides/img/web-ide_commit-detail.png" height="400px" >
</div>
# What have we done?
<div style="position:absolute;top:2em" class="fragment fade-in-then-out" data-fragment-index="1">
<img src="slides/img/fork_branch-diagram-after-commit.png" height="600px" >
<img src="slides/img/web-ide_commit-detail.png" width="90%" >
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment