less_retarded_wiki/git.md
2023-12-31 01:01:53 +01:00

5.8 KiB

Git

Git (name without any actual meaning) is a FOSS (GPL) version control system (system for maintaining and collaboratively developing source code of programs), currently the most mainstream-popular one (surveys saying over 90% developers use it over other systems). Git is basically a command line program allowing to submit and track changes of text files (usually source code in some programming language), offering the possibility to switch between versions, branches, detect and resolve conflicts in collaborative editing etc.

Git was created by Linus Torvalds in 2005 to host the development of Linux and to improve on systems such as svn. Since then it has become extremely popular, mainly thanks to GitHub, a website that offered hosting of git projects along with "social network" features for the developers; after this similar hosting sites such as GitLab and Codeberg appeared, skyrocketing the popularity of git even more.

It is generally considered quite a good software, many praise its distributed nature, ability to work offline etc., however diehard software idealists still criticize its mildly bloated nature and also its usage complexity -- it is non-trivial to learn to work with git and many errors are infamously being resolved in a "trial/error + google" style, so some still try to improve on it by creating new systems.

Is git literally hitler? Well, by suckless standards git IS bloated and yes, git IS complicated as fuck, however let's try to go deeper and ask the important questions, namely "does this matter so much?" and "should I use git or avoid it like the devil?". The answer is actually this: it doesn't matter too much that git is bloated and you don't have to avoid using it. Why? Well, git is basically just a way of hosting, spreading and mirroring your source onto many git-hosting servers (i.e. you can't avoid using git if you want to spread your code to e.g. Codeberg and GitLab) AND at the same time git doesn't create a dependency for your project, i.e. its shittiness doesn't "infect" your project -- if git dies or if you simply want to start using something else, you just copy-paste your source code elsewhere, you put it on FTP or anything else, no problem. It's similar to how e.g. Anarch uses SDL (which is bloated as hell) to run on specific platforms -- if it doesn't hard-depend on SDL and doesn't get tied to it, it's OK (and actually unavoidable) to make use of it. You also don't even have to get into the complicated stuff about git (like merging branches and resolving conflicts) when you're simply committing to a simple one-man project.

Which git hosting to use? All of them (except for GitHub which is a proprietary terrorist site)! Do not fall into the trap of githopping, just make tons of accounts, one on each git hosting site, add multiple push remotes and just keep pushing to all of them -- EZ. Remember, git hosting sites are just free file storage servers, not social platforms or brands to identify with. Do NOT use their non-git "features" such as issue trackers, CI and shit. They want you to use them as "facebook for programmers" and become dependent on their exclusive "features", so that's exactly what you want to avoid, just abuse their platform for free file storage. Additional tip on searching for git hosting sites: look up the currently popular git website software and search for its live instances with some nice search engine, e.g. currently searching just gitea (or "powered by gitea", "powered by gogs", "powered by forgejo") on wiby returns a lot of free git hostings.

Alternatives

Here are some alternatives to git:

  • nothing: If you don't have many people on the project, you can comfortably just use nothing, like in good old times. Share a directory with the source code and keep regular backups in separate directories, share the source online via FTP or something like that, let internet archive back you up.
  • svn: The "main", older alternative to git, used e.g. by SourceForge, apparently suffers from some design issues.
  • mailing list: Development happens over email, people just keep sending patches that are reviewed and potentially merged by the maintainers to the main code base. This is how Linux was developed before git.
  • darcs: Alternative to git, written in Haskell, advertising itself as simpler.
  • lit (previously known as gut): WIP LRS/suckless version control system.
  • ...

How To Use Git For Solo/Small Projects (Cheatsheet)

TODO

  • git add files_you_changed; git commit -m "Update"; git push
  • git pull
  • git stash
  • git rm file_to_remove
  • git init
  • git log
  • git diff
  • git apply diff_file
  • weird error: just look it up on stack overflow

Set Up Your Own Git Server

WIP

on server:

mkdir myrepo
cd myrepo
git init --bare

on client you can clone and push with ssh:

git clone ssh://user@serveraddress:/path/to/myrepo
cd myrepo
... # do some work
git commit -m "blablabla"
git push

you can also make your repo clonnable via HTTP if you have HTTP server (e.g. Apache) running, just have address http://myserver/myrepo point to the repo directory, then you can clone with:

git clone http://myserver/myrepo

IMPORTANT NOTE: for the HTTP clone to work you need to do git update-server-info on the server in the repo directory after every repo update! You can do this e.g. with a git hook or cronjob.

See Also