3.9 KiB
3.9 KiB
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
- find a partner to do pair-programming for this lecture by finding someone with the same tarot card as you
- before starting, make yourself acquainted with the meanining and the power of the tarot cards: carefully read this booklet
A cautionary quote
My first instinct is to sell all my computers, fake my own death, move to another planet, and reinvent computing from scratch, rather than try to understand Git.
I rarely actually do that, mind you. But the urge is there.
— Lars Wirzenius (Linux kernel developer)
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>
- how to copy a file from a different branch:
git checkout <branch> <file>
➔ the file is staged automaticallygit restore --source=<branch> <file
➔ the file is not staged
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)