scenarios | ||
exercise.md | ||
git-commands-visualizations.pdf | ||
README.md |
git
Setup
- Login with your username found on your name badge and set the initial password for your account: https://git.aspp.school/user/login
- You'll have to type that password many many times this week: choose wisely!
- We will use the exercise in the repo for the rest of the lecture
Warm-Up
- how to start a repo from scratch?
git init
local method- on an online forge (GitHub, GitLab, …):
git clone
- how to revert mistakes?
- before commit:
git restore <file>
[discard changes in the working directory] changes filesgit restore --staged <file>
[unstage changes ➔ opposite ofgit add <file>
, does not modify the working directory]
- after commit:
git revert <commit>
[creates a new commit, modifies the working directory]git reset <commit>
[only reset the HEAD pointer, does not modify the working directory] rewrites history ➔ can not be used if you have already pushed to some remotegit reset --hard <commit>
[reset HEAD and modify working directory] rewrites history and changes files ➔ can not be used if you have already pushed to some remote
- before commit:
- how to move the whole working directory to a specific point in history?
git checkout <commit>
➔DETACHED HEAD
problem, changes files- interaction with branches:
git branch <branch_name>
+git switch <branch_name>
git gui
: building commits along the way interactively (for the mess around type of workflows)- check out these sketches for a graphical visualization of git commands!
The Open Source model
- remotes:
git pull <from_where> <what>
,git push <where> <what>
,git fetch <from_where> <what>
,git merge <another_branch>
- GitHub: forks, branches and PRs: important ➔ explain fork vs. clone!!!
- strategies for keeping your fork up-to-date: your
main
, origin's and upstream'smain
, short-lived and long-lived topic branches - a more thorough and detailed explanation can be found on the SciPy Contributor's Guide. This guide can be adapted to your own needs, see gitwash.
- make it clear that GitHub and GitLab are just options (git≠GitHub)
Scenarios
- lone scientist working alone in the cellar without Internet (local git)
- lone scientist uploading their software to the Internet in the hope it can be useful for other people (local git + one personal GitHub repo)
- lone scientist sharing one software project with some other befriended lone scientist working in a different place (local git + one personal GitHub repo + permissions)
- research group sharing software among members (local git + several GitHub repos + permissions + branches + [optional] PRs)
- fully distributed software development using the most typical open source software workflows as used by numpy, scipy, sklearn, etc. (like above + we don't trust our contributors, i.e. work strictly with forks)