What is Git?Per definition, Git is a distributed revision control [...] with an emphasis on speed [Wikipedia]. Let's break down those terms.
- Distributed: The data is spread out in identical copies on multiple places, akin to torrent technology (peer-to-peer).
- Revision control: Is the same as "version control" or "source control". It is the method by which you control, save and load different versions of your code and its changes over time.
Git implements the concept of branching. It's like a tree-branch, growing out from a stem.
Git is usually hosted online at a repository, such as Github. But it can also be locally on your computer. If you use an online repository, the online project and your local project will be exactly the same.
Two other essential Git concepts are "pulling" and "pushing". Pulling gets the source code from a repository. Pushing puts changes of your code into the repository.
It is important to understand that there is no real difference between an online, hosted master and offline master in your local filesystem. Almost everything you can do with an online master you can do with an offline one. Do not confuse Git with Github. Git is the system used to manage your data. Github just helps you with hosting this data online.
Why would I use Git?Git will help you store and manage your data. Indeed, that is the very point of version control.
There is no real difference between using Git locally or online: if you work solo and on one computer. But putting your project online will give you increased flexibility - if you want to share the project to others or download at a new location, the new copy being exactly the same as on your computer. It is distributed, remember?
If you are multiple people working on the same project, Git will provide easy online-access to your data (if you use a host such as Github). Using branches you can implement a feature without messing with the original code and meddling with your other team-members by submitting incomplete code. Just create a branch instead.
It's also certainly worth linking your Github account in your resumé if you have some nice code hosted there. Github is a well respected site, and many people know what it is and how to use it. And those that do not will surely be impressed by all your amazing computer code mumbo-jumbo.
Installing GitThe easiest way to install Git is to head to http://git-scm.com/ and download an easy client-bundle for your operating system.
You can also download some specialized GUIs with added functionality http://git-scm.com/download/gui/win
But we will use the first way, which gives you acces to the Git Bash console.
Now, if you sit on Windows the commands accepted by the Git Bash console will be different from what you are used to. It only takes unix commands which you can read more on here.
So fire up your fresh Git Bash and let's get to it.
Some initial necessary configurations:
Some initial necessary configurations:
# the name shown as you commit changes git config --global user.name "firstname surname" # you don't have to set a valid email (email@example.com is just fine) but it must be set. If you use Github, your email will function as your identification git config --global user.email "firstname.lastname@example.org"Not needed, but very useful.
# pushes all branches relevant to the project git config --global push.default "matching" # pull changes before pushing for safety git config --global branch.autosetuprebase alwaysNavigate to your project and create git files necessary to manage your project (the file structure here is for Windows)
# navigate cd C:\MyProject # create git files git initYou can now index the files - telling Git what files you want to manage.
# this will add all your files to Git. The . is a shorthand for "all" git add .If you are happy with your code, you can your files under local git management.
git commit -m "My first commit"Now you are done with local settings, and you can stop here unless you want to put your code online.
Dealing with Github
Disclaimer: The way we have approached Git so far is project-first. We assume you have some existing files you want to upload. There are other ways to do it, but we won't do that now.
Head over to Github and create your account.
Then press this icon beside your user to create a repository:
Setup a repository for your project:
You will see some text. Copy this (specific to you). Be sure to select HTTP - it's a much simpler but less secure version, but just fine for our purposes.
git remote add MyShortHand https://email@example.com:BlackOdd/MyProject.gitNow push the changes to your repository.
git push MyShortHandWrite the password for your Github account (which must be identical to the email you configured in the beginning, and also present on your account emails) - and you're done!
Other useful commandsIf anyone makes changes, you can pull them. This will update your files to be the same as the master.
git pull MyShortHandIf you have made changes to your indexed files you must use the -a flag while submitting files to git management.
git commit -a -m "I've done some changes"If you want to create a copy of the master in another folder, just use this.
git clone MyShortHand
Alternatives to GithubThe main drawback with Github is that if you want to hosting for free, your project must be public for everyone to see and download.
I personally use Bitbucket https://bitbucket.org/ as it has no such limitations, giving you the choice to make your project public or private at no cost.
For more specific needs (user amount, project size, project amount etc) you can check out these:
Useful resourcesGit tutorial by Lars Vogel: http://www.vogella.com/articles/Git/article.html
Official online and free training for Git: http://training.github.com/web/free-classes/
An exhausitive and free book for Git: http://git-scm.com/book