Intro to Git for Drupal 7


Published on

A fairly in-depth introduction to the basics of working with Git version control and Drupal 7.

Published in: Technology

Intro to Git for Drupal 7

  1. 1. Intro to Git for DrupalOr: How I Learned To Stop Worrying and Love Version Control
  2. 2. What’s a version control system?• An application that allows you to record changes to your codebase in a structured and controlled fashion
  3. 3. Why do I need that?• makes it way easier to undo errors / roll back to earlier versions of code• makes it way easier to share a code base between developers without creating conflicts
  4. 4. • makes it waaaaay way easier to deploy changes from development to staging to production environments
  5. 5. Analogy:• Using Drupal without a version control system is like rock climbing without any safety gear
  6. 6. • You may be able to get away with it for awhile, but if you slip, you’re going to die.
  7. 7. Some popular version control systems• CVS - Concurrent Versions System• SVN - SubVersioN• Git• Mercurial• Bazaar• LibreSource
  8. 8. Drupal: From CVS to Git• used to have all module and project code under CVS• Drupal’s use of CVS system began January 15, 2001 with check in of Drupal 3.0.0 by Dries Buytaert
  9. 9. • worked great for a few years• over time CVS development stagnated• other systems began to appear, newer and hotter• decision to switch from CVS to Git was made in 2010
  10. 10. • Drupal officially switched from CVS to Git in 2011 on February 24 at 6:08 pm EST• excellent obituary for CVS by Larry Garfield (Crell - 26398) at blog/cvs-obituary• now entire Drupal project and all modules, distributions and themes use Git
  11. 11. So what’s Git?• initially created in 2005 by Linus Torvalds for Linux kernel development• written mostly in C• it’s a *distributed* version control system, which means...
  12. 12. • every Git working directory contains the complete repository and history and full revision tracking capabilities• you’re not dependent on a central server and you don’t have to be online• it’s rippingly fast - much faster than SVN, CVS, and other systems that have a lot of network latency• snapshot-based
  13. 13. What’s a repository?• it’s a directory that contains all of the data and metadata for your Git-controlled project• called .git/ and it resides in your Drupal site root directory
  14. 14. Basic Git lingo• init• commit • head• branch • add• merge • status• push • log• pull
  15. 15. Shut up already how do I start
  16. 16. Git thee to a command line• there are some GUI applications for Git, but it’s essentially a command line tool• it’s by far the most fun to use it on the command line
  17. 17. • in the following example we’ll be using the OS X terminal to connect to a local Ubuntu 12.04 server running in VirtualBox
  18. 18. • we’re going to a) install Git on the server b) set up a new Drupal site c) put the site into a local Git repository (repo) d) create a remote on GitHub e) make a commit locally and push it to the remote GitHub repo
  19. 19. Logging in to the server
  20. 20. To install Git on Ubuntu: apt-get install git-core
  21. 21. Set up credentialsYou need to let Git know who you are so itcan label the commits you make.So type...
  22. 22. git config --global "Your Name"git config --global ""
  23. 23. Here we have afresh localDrupalinstallation.Note that everyDrupal installincludesa .gitignore file
  24. 24. .gitignore files tell Git what *not* to put in therepository, i.e.: What to ignore.The default Drupal .gitignore file contains this:
  25. 25. That tells Git to ignore allsettings.php files, all files/ directories,and all private/ directories.You can override and add tothe .gitignore file.
  26. 26. Initialize!To create your repository, navigate to your Drupal root folder and type: git init
  27. 27. Check statusThe Git repository starts out empty.You’ll need to add files to it. But first - check the status. Type: git status
  28. 28. You’ll see a listof “untracked”files.You can addthem one at atime with “gitadd‘filename’”, oryou can addthem all atonce with...
  29. 29. git add .That adds everything.
  30. 30. Now all of thefiles except forthe onesin .gitignore havebeen staged -they’re not in therepo yet, butthey’re ready tobe put there.How do you putthem there?
  31. 31. git commit Actually you’ll want to type:git commit -m “Some text describing your commit”
  32. 32. All files have now been committed to therepository.If we type “git status” now, we get this:
  33. 33. Now what?• Use GitHub to make your repository available for private or public access
  34. 34. Do I have to use GitHub?• No, but it’s really cool and slightly easier than setting up your own Git server• So! - create an account if you don’t have one (it’s free)• login• set up your SSH keys
  35. 35. SSH keys?Entering your SSH keys establishes a trustedconnection between your GitHub accountand your development server(s), enablingyou to push and pull commits without havingto constantly enter your login information.
  36. 36. You can see a list of your repos on your profile. Click theindicated button to add a new one.
  37. 37. Now all of thefiles areshowing in thegithub repo.
  38. 38. Dev to GitHub• make a change on your local site and push the change to the GitHub repo• in this case we’re going to install five modules - ctools, features, panels, token, and views
  39. 39. If you check out the sites/all/modules folder in theGitHub repo, you’ll notice it only has a README file.
  40. 40. Locally, though, we’ve used Drush to download thefive modules, which are sitting in the local copy of thesites/all/modules folder.We want to make those modules show up on theGitHub repo.
  41. 41. Running “git status” shows us that the module foldersare untracked - we need to add them.We can get all of them at once by going to sites/all/and typing “git add modules”.
  42. 42. Commit ‘emNow we need to commit the changes. So wetype: git commit -a -m “Added five modules - views, panels, ctools, features, and token”And then we push it: git push
  43. 43. Now if we go back to GitHub and reload the page,the modules we pushed are all there.