init from scratch, clone from elsewhere
Two ways to get a Git repository on disk: bring history with you (git clone), or start a fresh history (git init). They look superficially similar — both produce a .git/ folder — but the consequences are different. Knowing which one you want is the start of the daily loop.
git init creates an empty repository in the current directory. No commits, no branches that exist yet (until you make the first commit), no remotes. The default branch name comes from init.defaultBranch (set this to main globally; the old default master is unmaintained-Linux baggage). After git init you typically write a starter .gitignore, run git add ., and make the first commit so the project's history actually begins.
git clone downloads an existing repository. By default it copies all branches as remote-tracking refs (origin/main, origin/feature, etc.), checks out the default branch, and sets up a remote called origin that points at the URL you cloned. SSH URLs (git@github.com:user/repo.git) avoid daily password prompts; HTTPS URLs (https://github.com/user/repo.git) work everywhere including locked-down corporate networks but require a token or credential helper.
For huge repos, two clone tricks are worth knowing. --depth 1 does a shallow clone — only the most recent commit, no history. Fast, but you cannot blame or bisect usefully. --filter=blob:none does a partial clone — it grabs the commit graph and tree structure immediately, then fetches blobs lazily as you check them out. Modern, faster than shallow for most workflows, and Git 2.20+.