Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • sc/edu/git-seminar
  • mk21womu/git-seminar
2 results
Select Git revision
Show changes
Commits on Source (39)
Showing
with 512 additions and 232 deletions
paper.html
paper.pdf
img/git-remote-contributor.svg
img/git-remote-maintainer.svg
img/git-remote-solo.svg
img/license-chooser.svg
img/motivation-structure.svg
img/motivation-throwaway-playground.svg
img/rdm-use-case-data.svg
img/rdm-use-cases-a.svg
img/rdm-use-cases-b.svg
img/rdm-use-cases.svg
img/staging-area.svg
paper.html
paper.pdf
*.pdf
img/staging-area-diff.svg
/img/rdm-use-case-merged.svg
[submodule "reveal.js"]
path = reveal.js
url = https://github.com/hakimel/reveal.js.git
[submodule "pandoc-cheat-sheet"]
path = pandoc-cheat-sheet
url = https://github.com/idiv-biodiversity/pandoc-cheat-sheet.git
......@@ -17,12 +17,22 @@ pandoc-papers.pdf: pandoc-papers.md
-o pandoc-papers.pdf \
pandoc-papers.md
rdm.pdf: img rdm.md rdm.yml
pandoc \
--standalone \
--from=markdown+yaml_metadata_block \
--pdf-engine=xelatex \
--template=pandoc-cheat-sheet/cheat-sheet.tex \
-o rdm.pdf \
rdm.yml rdm.md
all: subdirs
clean:
for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@; \
done
rm -f rdm.pdf
default: all
......
# regular FAQ
- 10-12 git integration RStudio / VS Code / others
- 13-15 GitLab / GitHub project setup / importing existing projects / how to start and continue after that, project management, issue management
- 15-16 GitLab / GitHub automation
- 16-18 free for all
# git advanced -- how to maintain a comprehensible history
- when projects get bigger
......
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="author" content="Dirk Sarpe and Christian Krause" />
<title>git basics</title>
<meta name="description" content="a git seminar for beginners" />
<meta name="author" content="Dirk Sarpe and Christian Krause" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="reveal.js/css/reveal.css" />
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css" />
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href="reveal.js/css/theme/black.css" id="theme" />
<link rel="stylesheet" href="reveal.js/dist/reset.css">
<link rel="stylesheet" href="reveal.js/dist/reveal.css">
<link rel="stylesheet" href="reveal.js/dist/theme/black.css" id="theme">
<link rel="stylesheet" href="reveal.js/plugin/highlight/monokai.css">
<link rel="stylesheet" href="css/company-logo.css" />
<link rel="stylesheet" href="css/ribbon.css" />
<link rel="stylesheet" href="css/crawl.css" />
......@@ -38,34 +45,62 @@
- log in to git.idiv.de
- cheat sheets are handed out later
- if you have questions feel free to interrupt
- cleanup https://git.idiv.de/sc/edu/git-merge-conflict-demo
</section>
<section id="intro-objectives" data-markdown>
## objectives
<section id="intro-goals" data-markdown>
## goals
- teach you to fish
- hands-on experience
- use version control!
- collaborate!
1. use git in **ALL** your projects
1. collaborate with each other
... is mission accomplished.
notes:
- there is time for fancy stuff later
- take a few weeks getting used to git
- delay is good to grow your own experience
- growing pain is how we learn
</section>
<section id="intro-agenda" data-markdown>
## agenda
<section id="intro-agenda-1" data-markdown>
## agenda (today)
1. intro and installation
1. setup and local repositories
1. remote repositories and collaboration
1. motivation
1. install and setup
1. recording changes
1. platforms and remotes
1. collaboration
note:
- we have dynamic breaks, try at most 90 minutes without break
</section>
<section id="intro-agenda-2" data-markdown>
## agenda (advanced)
1. customization (editors, IDEs)
1. project & team setup (GitLab)
1. how to project maintainer
1. automation
note:
- in smaller groups
- while today is more general, advanced will be focused on your
specific situation
</section>
<section id="intro-version-control" data-markdown>
## about version control
> records changes
what, who, when, why
note:
- different kinds of version control systems
- for different meta-level things
- git is for text files / source code
</section>
<section id="intro-about-git" data-markdown>
......@@ -85,25 +120,10 @@
- doc: also means community / stackoverflow entries
</section>
<section id="intro-about-today" data-markdown>
## about today
1. use git in **ALL** your projects
1. collaborate with each other
... is mission accomplished.
notes:
- there is time for fancy stuff later
- take a few weeks getting used to git
- delay is good to grow your own experience
- growing pain is how we learn
</section>
<section id="intro-about-christian" data-markdown>
## about christian
- scientific computing support @ iDiv since 2014
- [scientific computing support @ iDiv](https://www.idiv.de/en/about-idiv/support-for-scientists/scientific-computing.html) since 2014
- happy git user since 2010
> There will never be a better version control system than git.
......@@ -111,15 +131,6 @@
> -- Christian Krause, 2017
</section>
<section id="intro-about-dirk" data-markdown>
## about dirk
- statistics and R support @ iDiv since 2014
- knows that kind of pain:
![blah](img/draft_mess_half_size.png)
</section>
<section id="intro-about-you" data-markdown>
## about you
......@@ -140,7 +151,7 @@
<section id="motivation" data-markdown>
# motivation
> Why should I use version control?
> Why should ***I*** use version control?
notes:
- summarize reasons from audience
......@@ -153,7 +164,7 @@
## motivation #1
### avoid mess
![blah](img/draft_mess.png)
![blah](img/motivation-draft-mess.png)
notes:
- who has seen such a mess?
......@@ -165,11 +176,13 @@
## motivation #1
### want structure
![blah](img/gitk-pretty-history.png)
![blah](img/motivation-structure.svg)
notes:
- structure
- who, when, why
- ability to inspect old versions
- ability to revert to old versions
</section>
<section id="motivation-playground" data-markdown>
......@@ -182,36 +195,19 @@
- test stuff without interfering
- throw away if garbage
- integrate if good
- switch back and forth
- (done right) decision based on regression testing
- switch back and forth without pain
</section>
<section id="motivation-collaboration-1" data-markdown>
## motivation #3
![boy scout rule](img/boy-scout-rule.jpg)
notes:
- there is a rule in ~~open source software~~ nay life
- if you want the world to be a better place
- complain about it (issue tracker)
- if you are able to fix it: do it!
</section>
<section id="motivation-collaboration-2" data-markdown>
## motivation #3
### collaboration made easy
<!-- do not fix this typo, it is here on purpose to show collab -->
> This text contains a typo.
> This text cntains a typo.
notes:
- demo GitLab
- [go to project](https://git.idiv.de/sc/edu/git-seminar)
- check if typo still in master
- edit
- change **target branch** to create merge request
- demo **edit** ribbon
- change target branch (creates MR) to: **basics/typo**
- commit message:
```
fixes typo
......@@ -220,7 +216,7 @@
```
</section>
<section id="motivation-collaboration-3" data-markdown>
<section id="motivation-collaboration-2" data-markdown>
## motivation #3
![typo-pr](https://pbs.twimg.com/media/EDsklbLUEAMdusJ.png)
......@@ -231,25 +227,6 @@
- and it is not too much effort
</section>
<section id="motivation-use-everywhere" data-markdown>
## motivation #e
### use version control for
# *everything*
- software
- blog / documentation
- presentation
- paper / thesis
- ...
notes:
- software, thats obvious
- blog / doc: web-pages in general are more and more managed by git
- e.g. this git cheat sheet we are handing out is a git repo
- if it does not support version control, i.e. text, do not use it,
e.g. graphics written in dot, compiled to SVG
</section>
<section id="motivation-automation" data-markdown>
## motivation #a
### automation
......@@ -260,7 +237,7 @@
- enforce **style guide** aka *code formatting*
- ***deployment*** (app store, web server)
*(see advanced seminar)*
*(see advanced)*
notes:
- buzzwords:
......@@ -436,24 +413,30 @@
```
</section>
<section id="cheat-sheet" data-markdown>
## cheat sheet
https://idiv-biodiversity.github.io/git-cheat-sheet/
</section>
<section id="setup-git-1" data-markdown>
## git setup #1
```bash
# configure your identity
git config --global user.name 'Jane Doe'
git config --global user.email 'jane.doe@riot-grrrl.org'
git config --global user.name "Jane Doe"
git config --global user.email "jane.doe@idiv.de"
# show colors
git config --global color.ui auto
# configure aliases
git config --global alias.unstage 'reset HEAD --'
git config --global alias.unstage "reset HEAD --"
git config --global alias.lol \
'log --graph --decorate --oneline --all'
"log --graph --decorate --oneline --all"
# show config
git config --global --list
git config --list [--global]
```
notes:
......@@ -470,11 +453,14 @@
git config --global core.editor notepad
# Mac
git config --global core.editor 'open -Wne'
git config --global core.editor "open -Wne"
# Linux GNOME / KDE
git config --global core.editor gedit
git config --global core.editor kate
# to verify editor works
git config --global --edit
```
notes:
......@@ -592,23 +578,16 @@
notes:
- users should do this in a terminal with demo by us
- git stage git add are the same thing
- prefer stage and unstage because the opposite of add is remove
and that does something entirely different
- `git stage` and `git add` are the same thing
- prefer `stage` and `unstage` because the opposite of `add` is
`rm` and that does something entirely different
</section>
<section id="cli-git-diff-1" data-markdown>
<section id="cli-git-diff" data-markdown>
## command line
### show changes
```bash
# from staging area to current working copy
git diff
# show contents of staging area, i.e.
# from last commit to staging area
git diff --staged
```
![git diff](img/staging-area-diff.svg)
notes:
- users should do this in a terminal with demo by us
......@@ -624,7 +603,7 @@
git commit [-v]
# commits with a short message
git commit -m 'initial commit'
git commit -m "initial commit"
```
notes:
......@@ -688,9 +667,14 @@
<section id="summary-1" data-markdown>
## you can now
- track changes in your projects
- browse your projects history
- see why a change was introduced
- create local repos (`init`)
- track changes in your projects (`stage`, `commit`)
- browse your projects history (`log`)
- rest are helpers (`status`, `diff`, `restore`)
notes:
- very important: `status`
- demo emacs git integration to show `stage -p`
</section>
<section id="summary-2" data-markdown>
......@@ -816,10 +800,11 @@
![remotes](img/git-remote-solo.svg)
notes:
- remotes have names, default to origin
- remotes are **full clones**, i.e. entire history
- **fetch** is on the box, so you **fetch everything**
- **fetch** does not integrate branches, i.e. **merge**
- remotes have names, default to **origin**
- remotes are usually **full clones**, i.e. entire history, all
commits, all branches
- **fetch** edge is on the box, so you fetch **everything**
- **fetch** does not integrate branches, i.e. no **merge**
- **push** and **pull** also **merge** the *tracking* branch
</section>
</section>
......@@ -835,7 +820,7 @@
notes:
- this is a demo chapter, you will all do this in collaboration
chapter (next one)
- what was this **master** again? we have not explained yet
- what was this **main** again? we have not explained yet
</section>
<section id="branch-visual" data-markdown>
......@@ -848,7 +833,7 @@
- create a branch to have a separate history
- branch is a name attached to a commit
- the name advances when a new commit is made
- **master** is a naming convention for the default branch
- **main** is a naming convention for the default branch
- switch back and forth
- always imagine git history as a directed graph
- graph is drawn with new top and old bottom
......@@ -859,10 +844,10 @@
<section id="branch-when-to-use" data-markdown>
## when to use branches
- breaking **master**
- breaking **main**
- something takes longer
- frequent interruptions
- comment out code
- (instead of) comment out code
notes:
- if logical commit without breaking do not branch
......@@ -914,7 +899,7 @@
```
notes:
- `git branch --list 'topic/*'`
- `git branch --list "topic/*"`
- decide with your team, write `CONTRIBUTING.md`
</section>
......@@ -923,7 +908,7 @@
```bash
# resolve branch by merging
git switch master
git switch main
git merge branch-name
# delete branch
......@@ -932,7 +917,7 @@
notes:
```
# switch master, lol
# switch main, lol
# merge wip/feature, lol
# branch -d wip/feature, lol
```
......@@ -961,21 +946,14 @@
notes:
- we: new commit
- group: fetch, lol, pull upstream master, lol
- group: fetch, lol, pull upstream main, lol
- group: push origin, lol
- group: branch, switch, commit, push, MR
- collaboration happens in issues and MR discussion!
- we: review and possible resolve merge request in GL
- show next slide once merging is done on command line
</section>
<section id="collab-maintainer" data-markdown>
## view of maintainer
![remotes](img/git-remote-maintainer.svg)
notes:
- we: review one MR, show line comments in GL, thumbs up
- advanced: view of maintainer
</section>
<section id="collab-review-criticism" data-markdown>
......@@ -995,65 +973,34 @@
discussion
</section>
<section id="collab-review-code-of-conduct" data-markdown>
## review
### code of conduct
1. be friendly
1. be responsible
1. be open
1. be proactive
notes:
- the discussions are usually public, so be aware of that
- usually needed when community grows
- decide with your community, write `CONTRIBUTING.md`
</section>
<section id="collab-review-your-turn" data-markdown>
## review
### your turn
1. review a merge request
1. discuss / emote
1. comment on code
</section>
<section id="collab-conflicts" data-markdown>
<section id="collab-conflicts-contributor" data-markdown>
## resolving conflicts
### maintainer
```bash
git remote add alice https://...
git fetch alice
git switch master
git merge alice/topic/feature
# fix conflicts
git push
```
### contributor
```bash
git fetch upstream
git switch topic/feature
git merge origin/master
git merge origin/main
# fix conflicts
git push
```
notes:
- hopefully conflicting changes
- MR status should show that (can not be merged without conflicts)
- maintainer decides if trivial or delegate to contributor
- https://git.idiv.de/sc/edu/git-merge-conflict-demo
- contains two conflicting branches
- git lol
- git fetch
- explain different solutions
- create MR
- MR status show merge conflicts
- edit file, show how to keep both ours and theirs
</section>
<section id="summary-3" data-markdown>
## you can now
- create and connect to remotes
- contribute to projects you do not own
- maintain projects you own
- create and connect to remotes (`clone`, `push/pull`)
- contribute to projects (`switch -c`, `push -u origin`, MR/PR)
- hint: use `lol` alias
</section>
<section id="summary-4" data-markdown>
......@@ -1066,11 +1013,11 @@
<section>
<section id="homework" data-markdown>
# homework
# "homework"
</section>
<section id="homework-use-git" data-markdown>
## homework #1
## "homework" #1
### use git
for each project you use ...
......@@ -1088,7 +1035,7 @@
</section>
<section id="homework-collaborate" data-markdown>
## homework #2
## "homework" #2
### collaborate
- talk with your colleagues
......@@ -1100,7 +1047,7 @@
</section>
<section id="homework-feedback" data-markdown>
## homework #3
## "homework" #3
### feedback
https://git.idiv.de/sc/edu/git-seminar
......@@ -1110,6 +1057,20 @@
</section>
</section>
<section id="intro-agenda-2" data-markdown>
## agenda advanced
1. customization (editors, IDEs)
1. project & team setup (GitLab)
1. how to project maintainer
1. automation
note:
- in smaller groups
- while today is more general, advanced will be focused on your
specific situation
</section>
<section id="eof" data-background="img/trex.png">
<h1>EOF</h1>
</section>
......@@ -1126,7 +1087,7 @@
```bash
git remote add alice https://...
git fetch alice
git rebase [--interactive] master alice/topic/feature
git rebase [--interactive] main alice/topic/feature
# fix conflicts
git push
# manually close merge request
......@@ -1142,12 +1103,49 @@
```bash
git fetch upstream
git rebase origin/master topic/feature
git rebase origin/main topic/feature
# fix conflicts
# force push because branch history changed
git push --force
```
</section>
<section id="collab-maintainer" data-markdown>
## view of maintainer
![remotes](img/git-remote-maintainer.svg)
</section>
<section id="collab-review-code-of-conduct" data-markdown>
## review
### code of conduct
1. be friendly
1. be responsible
1. be open
1. be proactive
notes:
- the discussions are usually public, so be aware of that
- usually needed when community grows
- decide with your community, write `CONTRIBUTING.md`
</section>
<section id="collab-conflicts-maintainer" data-markdown>
## resolving conflicts
```bash
git remote add alice https://...
git fetch alice
git switch main
git merge alice/topic/feature
# fix conflicts
git push
```
notes:
- maintainer decides if trivial or delegate to contributor
</section>
</section>
</div>
</div>
......@@ -1164,7 +1162,8 @@
<div class="ribbon-wrapper right">
<div class="ribbon">
<a href="https://git.idiv.de/sc/edu/git-seminar">
<a href="https://git.idiv.de/sc/edu/git-seminar/edit/main/basics.html"
target="_blank">
edit
</a>
</div>
......@@ -1172,30 +1171,28 @@
<!-- reveal.stuff -->
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script src="reveal.js/dist/reveal.js"></script>
<script src="reveal.js/plugin/zoom/zoom.js"></script>
<script src="reveal.js/plugin/notes/notes.js"></script>
<script src="reveal.js/plugin/search/search.js"></script>
<script src="reveal.js/plugin/markdown/markdown.js"></script>
<script src="reveal.js/plugin/highlight/highlight.js"></script>
<script>
Reveal.initialize({
controls: true,
progress: true,
slideNumber: true,
history: true,
center: true,
keyboard: true,
maxScale: 1.5,
slideNumber: false,
theme: Reveal.getQueryHash().theme,
transition: Reveal.getQueryHash().transition || 'default',
dependencies: [
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'reveal.js/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
]
controls: true,
progress: true,
center: true,
hash: true,
plugins: [
RevealZoom,
RevealNotes,
RevealSearch,
RevealMarkdown,
RevealHighlight,
]
});
</script>
</body>
......
......@@ -6,7 +6,7 @@ digraph {
node [color = orchid]
omaster[label = "master"]
omain[label = "main"]
}
subgraph clusterlocal {
......@@ -14,7 +14,7 @@ digraph {
node [color = orchid]
master[label = "master"]
main[label = "main"]
}
subgraph clusterupstream {
......@@ -22,11 +22,11 @@ digraph {
node [color = limegreen]
umaster[label = "master"]
umain[label = "main"]
}
omaster -> master [label = "git pull"]
master -> omaster [label = "git push", constraint = false]
umaster -> master [label = "git pull upstream master", constraint = false]
omaster -> umaster [label = "pull request (GitHub)\nmerge request (GitLab)", constraint = false]
omain -> main [label = "git pull"]
main -> omain [label = "git push", constraint = false]
umain -> main [label = "git pull upstream main", constraint = false]
omain -> umain [label = "pull request (GitHub)\nmerge request (GitLab)", constraint = false]
}
......@@ -6,7 +6,7 @@ digraph {
node [color = orchid]
omaster[label = "master"]
omain[label = "main"]
}
subgraph clusterlocal {
......@@ -14,7 +14,7 @@ digraph {
node [color = orchid]
master[label = "master"]
main[label = "main"]
}
subgraph clusteralice {
......@@ -22,7 +22,7 @@ digraph {
node [color = limegreen]
amaster[label = "master"]
amain[label = "main"]
}
subgraph clusterbob {
......@@ -30,11 +30,11 @@ digraph {
node [color = lightskyblue]
bmaster[label = "master"]
bmain[label = "main"]
}
omaster -> master [label = "git pull"]
master -> omaster [label = "git push", constraint = false]
amaster -> master [label = "git pull alice", constraint = false]
bmaster -> master [label = "git pull bob", constraint = false]
omain -> main [label = "git pull"]
main -> omain [label = "git push", constraint = false]
amain -> main [label = "git pull alice", constraint = false]
bmain -> main [label = "git pull bob", constraint = false]
}
......@@ -9,7 +9,7 @@ digraph {
node [color = orchid]
omaster[label = "master"]
omain[label = "main"]
}
subgraph clusterlocal {
......@@ -17,10 +17,10 @@ digraph {
node [color = orchid]
master[label = "master"]
main[label = "main"]
}
omaster -> master [label = "git fetch", style = dotted, ltail = clusterorigin, lhead = clusterlocal]
master -> omaster [label = "git push"]
omaster -> master [label = "git pull"]
omain -> main [label = "git fetch", style = dotted, ltail = clusterorigin, lhead = clusterlocal]
main -> omain [label = "git push"]
omain -> main [label = "git pull"]
}
File moved
digraph {
node [shape = "box", style = "filled, rounded"]
master4[label = "Alice (today)\nfixes logic error", color = limegreen]
master3[label = "Bob (yesterday)\nfixes typos", color = darkorchid1]
master2[label = "Alice (three days ago)\nadds methods chapter", color = limegreen]
master1[label = "...", color = grey]
master4 -> master3 -> master2 -> master1
}
digraph {
node [shape = "box", style = "filled, rounded"]
subgraph clustermaster {
label = "master"
subgraph clustermain {
label = "main"
node [color = limegreen]
master3[label = "ebe0262"]
master2[label = "03f4f8d"]
master1[label = "62a0ee9"]
main3[label = "..."]
main2[label = "..."]
main1[label = "..."]
master3 -> master2 -> master1
main3 -> main2 -> main1
}
subgraph clusterplayground {
......@@ -18,11 +18,11 @@ digraph {
node [color = orchid]
playground2[label = "8b29f74"]
playground1[label = "7f295dd"]
playground2[label = "visualization"]
playground1[label = "methods"]
playground2 -> playground1
}
playground1 -> master2
playground1 -> main2
}
digraph {
compound = true
node [shape = "box", style = "filled, rounded"]
subgraph cluster_script {
label = "scripts"
node [color = lightskyblue]
script_version_b[label = "nature-v2"]
}
subgraph cluster_data {
label = "data repository (not git!)"
node [color = limegreen]
data_version_a[label = "doi:blah/blah"]
}
subgraph cluster_paper {
label = "paper"
node [color = limegreen]
paper_version_c[label = "nature-final"]
}
paper_version_c -> data_version_a [label = "\n\n", lhead = cluster_data]
data_version_a -> script_version_b [label = "\n\n", lhead = cluster_script]
}
digraph {
compound = true
node [shape = "box", style = "filled, rounded"]
subgraph cluster_script {
label = "scripts"
node [color = lightskyblue]
script_version_b[label = "nature-v2"]
script_version_a[label = "nature-v1"]
}
subgraph cluster_data {
label = "data repository (not git!)"
node [color = limegreen]
data_version_a[label = "doi:blah/blah"]
}
subgraph cluster_paper {
label = "paper"
node [color = limegreen]
paper_version_a[label = "nature-review-1"]
paper_version_b[label = "nature-review-2"]
paper_version_c[label = "nature-final"]
}
subgraph cluster_software_a {
label = "software A"
node [color = orchid]
software_a_version_a[label = "v2.1.6"]
}
subgraph cluster_software_b {
label = "software B"
node [color = orchid]
software_b_version_b[label = "v0.3.4"]
software_b_version_a[label = "v0.2.0"]
}
script_version_a -> software_a_version_a [label = "\n\n"]
script_version_b -> software_a_version_a [label = "\n\n"]
script_version_a -> software_b_version_a [label = "\n\n"]
script_version_b -> software_b_version_b [label = "\n\n"]
paper_version_a -> script_version_a [label = "\n\n"]
paper_version_b -> script_version_b [label = "\n\n"]
paper_version_c -> script_version_b [label = "\n\n"]
paper_version_c -> data_version_a [label = "\n\n"]
data_version_a -> script_version_b [label = "\n\n"]
}
digraph {
compound = true
node [shape = "box", style = "filled, rounded"]
subgraph cluster_software_a {
label = "software A"
node [color = orchid]
software_a_version_a[label = "v2.1.6"]
}
subgraph cluster_software_b {
label = "software B"
node [color = orchid]
software_b_version_a[label = "v0.2.0"]
}
subgraph cluster_script {
label = "scripts"
node [color = lightskyblue]
script_version_a[label = "nature-v1"]
}
subgraph cluster_paper {
label = "paper"
node [color = limegreen]
paper_version_a[label = "nature-review-1"]
}
script_version_a -> software_a_version_a [label = "\n\n"]
script_version_a -> software_b_version_a [label = "\n\n"]
paper_version_a -> script_version_a [label = "\n\n"]
}
digraph {
compound = true
node [shape = "box", style = "filled, rounded"]
subgraph cluster_software_a {
label = "software A"
node [color = orchid]
software_a_version_a[label = "v2.1.6"]
}
subgraph cluster_software_b {
label = "software B"
node [color = orchid]
software_b_version_b[label = "v0.3.4"]
software_b_version_a[label = "v0.2.0"]
}
subgraph cluster_script {
label = "scripts"
node [color = lightskyblue]
script_version_b[label = "nature-v2"]
script_version_a[label = "nature-v1"]
}
subgraph cluster_paper {
label = "paper"
node [color = limegreen]
paper_version_a[label = "nature-review-1"]
paper_version_b[label = "nature-review-2"]
}
script_version_a -> software_a_version_a [label = "\n\n"]
script_version_b -> software_a_version_a [label = "\n\n"]
script_version_a -> software_b_version_a [label = "\n\n"]
script_version_b -> software_b_version_b [label = "\n\n"]
paper_version_a -> script_version_a [label = "\n\n"]
paper_version_b -> script_version_b [label = "\n\n"]
}
digraph {
compound = true
node [shape = "box", style = "filled, rounded"]
subgraph cluster_software_a {
label = "software A"
node [color = orchid]
software_a_version_a[label = "v2.1.6"]
}
subgraph cluster_software_b {
label = "software B"
node [color = orchid]
software_b_version_b[label = "v0.3.4"]
software_b_version_a[label = "v0.2.0"]
}
subgraph cluster_script {
label = "scripts"
node [color = lightskyblue]
script_version_b[label = "nature-v2"]
script_version_a[label = "nature-v1"]
}
subgraph cluster_paper {
label = "paper"
node [color = limegreen]
paper_version_a[label = "nature-review-1"]
paper_version_b[label = "nature-review-2"]
paper_version_c[label = "nature-final"]
}
script_version_a -> software_a_version_a [label = "\n\n"]
script_version_b -> software_a_version_a [label = "\n\n"]
script_version_a -> software_b_version_a [label = "\n\n"]
script_version_b -> software_b_version_b [label = "\n\n"]
paper_version_a -> script_version_a [label = "\n\n"]
paper_version_b -> script_version_b [label = "\n\n"]
paper_version_c -> script_version_b [label = "\n\n"]
}
digraph {
node [shape = "box", style = "filled,rounded"]
workdir[label = "working directory\n(changes not staged for commit)", color = lightskyblue]
stage[label = "staging area\n(changes to be committed)", color = orchid]
repo[label = "repository\n(tracked content)", color = limegreen]
workdir -> stage [label = "git diff"]
stage -> repo [label = "git diff --staged"]
}
img/unlimited-power.jpg

54.9 KiB

Subproject commit 2346a002289757ee612bfd4b56b57db53e0c751b