# __ __ _ ____ _ _
# \ \ / /__ _ __ ___(_) ___ _ __ / ___|___ _ __ | |_ _ __ ___ | |
# \ \ / / _ \ '__/ __| |/ _ \| '_ \ | | / _ \| '_ \| __| '__/ _ \| |
# \ V / __/ | \__ \ | (_) | | | | | |__| (_) | | | | |_| | | (_) | |
# \_/ \___|_| |___/_|\___/|_| |_| \____\___/|_| |_|\__|_| \___/|_|
#
One of the great modern marvels of our civilization.
As the name implies version control systems manage versioning of… well… stuff. They are most commonly used in computer science to keep track of changes that occur to a specific file or a set of files. There “versions” can be seen as a snapshot in time, and are undoubtedly userful. Their implementation and management is a required skill for anyone interested in computational development. Since not much else can be said, and words are rather difficult to forumulate at this moment, we will just move on to the meat of this entry.
As computation has developed over time, version control systems (VCS) have evolved with the science. As you can image they come in all shapes and sizes, and different projects sometimes prefer different version control systems (VCS). Here are a list of the most popular ones.
As stated above, git is the most popular and widely used VCS in the world, and being such, means you will run in to it very often. The use of git is fairly straight forward, and easy to understand. You “clone” repositories, “add” your changes, “commit” those changes to a version, and “push” them back into the repository. Full disclosure, dealing with conflicts in versions is a pain in the ass, so try to avoid them. As time goes by, I will add some lesser known commands for git below.
git clone --mirror $REPO
java -jar BFG.jar -rt $SENSITIVE_DATA_FILE.txt --private $REPO_NAME
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push