If you want to look and sound like a real programmer it's time to learn about version control and git. Let's assume you've created a GitHub account and have followed the proper procedure to get an SSH key set up - we're assuming that because that's not what this post is about. Now, back to sounding like a real programmer. I'm also going to assume you're using OSX, because, programmer.
Version control: that's what we do to make sure we're not accidentally overwriting important or working code with new or experimental code. Kind of like that time your brother recorded his bass guitar audition over your only copy of Back to the Future. T·T It's more complicated than that but you get the idea.
First things first. Open "Terminal" and navigate to your project, for example $ cd ~/Documents/myNewProject
. (Side note: when I started working in the terminal I initially made the mistake of copying terminal commands with the $ included. That's not going to work; it's just used to illustrate the terminal prompt.)
Git Jiggy Wit It!
We'll start with getting our repo (repository) up and running and then with basic commands to manage branches and versions.
Initiate a repo
The first thing we want to do is initiate a git repository for our local project. This also creates a hidden .git file in our folder.
$ git init
Create a remote repo
This command is used to make a copy of our local repo in our GitHub account. Add your project name at the end to give the remote repo a name.
$ hub create myProject
Add your latest changes
Before committing we need to let git know we've made some changes. These change will always be against the branch we're currently working on.
$ git add .
Commit your changes
It's time to commit our changes to the current branch. Use the "-m" flag to add a comment; helpful if we need to fall back to a previous version or find some code we might have changed.
$ git commit -m "i made some codes"
Push that baby
Once we've committed we need to push the changes to GitHub. Don't worry, all commits are saved, so we won't overwrite anything - yay, version control! "Origin" is GitHub's git name, and "master" is the branch we're working on. It could also be called "experimental" or "bananas"; probably choose something fairly descriptive though.
$ git push origin master
That's it for the basics. Rinse and repeat.
Deeper into the Git tree
Git's more powerful than that though. Let's take a look at some other things we can do.
Clone a remote repo
What if I already have a remote repository and I want to work on it locally? Simple; send in the clones! Open the project in GitHub and grab the "Clone or download" url - it'll look something like this git@github.com:yourUsername/yourProjectName.git
$ git clone git@github.com:yourUsername/yourProjectName.git
Connect your local and remote repo
Sometimes you've already created a local repository and a remote repository. How do you connect those? Use the remote command with add.
$ git remote add origin git@github.com:yourUsername/yourProjectName.git
Branches
Git allows us to create branches of our project, so we can work in parallel. Sometimes we want to go in a completely different direction, or add some test features without touching our main branch. Sometimes we want to work together on a project without getting in each other's way. You've got it code monkey - let's make a branch (-b flag) and start working on it immediately.
$ git checkout -b bananas
What just happened? We just created a new branch called bananas and changed our working version to it. Git's checkout
seems to create some confusion, but if you think about it like a library the version you're currently reading is the version we checked out last.
CAUTION AHEAD
One thing you need to know is that git actually moves the working files around in your file system. If you do a checkout
in terminal the files that are open in your editor are also swapped out. You might think you have the old version open, but you're looking at the checked out branch. It's a little bit of a mind bender at first.
Checkout that branch
If you're done working on your current branch and want to move to another branch you'll have to make some commits and run git add .
and git commit
before proceeding. Let's do it.
$ git add .
$ git commit -m 'added more bananas'
$ git checkout master
Where's my branch?
Just like your master branch, other branches must be pushed to be available remotely.
$ git push origin bananas