How to start using Git on an existing Drupal project
Git is one of the most versatile opensource version control systems out there. If you have not already started using Git for your Drupal Development projects, this article should help you get started with it.
Please note: I have been using Linux as my development environment, and almost all my illustrations would be for Linux. Still, the commands for using git should be the same for git implementations on all OSes. Please add in a comment if you have any doubts.
Steps
- Download all the files of the existing site.
- Run the command git init, from the webroot directory. This command creates an empty git repository or re-initializes an existing git repository. When this command is executed, a hidden directory named ".git" is created inside the webroot.
- Add a .gitignore file inside the webroot. (This file contains the name of files and directories which the user does not want to track via git).
- Add all the files in the webroot to git. This is done using git add command. It adds all files in the directory. If you want to add each file one by one, you can specify the file path instead of the dot(.) symbol.
If any files or directories are specified in the .gitignore file, they will be ignored. If you try to add a file that is added to the .gitignore file, you will get the following message:The following paths are ignored by one of your .gitignore files: ...list of file paths... Use -f if you really want to add them. fatal: no files added
- Once all the files are added to git, the details should be logged into the repository. This is done using the command git commit. You can add a message to describe about the changes made in the current commit
Example
Here I demonstrate how I normally add an existing project into git:
I've a Drupal 7 installation in my system, which I wish to add to a git repo. It is in a folder named 'drupal7' and placed inside /var/www/. So my webroot is /var/www/drupal7.
From the terminal, I move to the webroot of my project 'drupal7'.
smruthy@inspiron:~$ cd /var/www/drupal7/
I'm going to list all the files in my webroot using 'ls' command
smruthy@inspiron:/var/www/drupal7$ ls -a
. .gitignore install.php modules sites
.. .htaccess INSTALL.sqlite.txt nbproject themes
authorize.php includes INSTALL.txt profiles update.php
CHANGELOG.txt index.php LICENSE.txt README.txt UPGRADE.txt
COPYRIGHT.txt INSTALL.mysql.txt MAINTAINERS.txt robots.txt web.config
cron.php INSTALL.pgsql.txt misc scripts xmlrpc.php
There is a .gitignore file inside the drupal7 webroot. The content of that file is as follows:
# Ignore configuration files that may contain sensitive information.
sites/*/settings*.php
# Ignore paths that contain user-generated content.
sites/*/files
sites/*/private
We add files or directories which we would like to be ignored by the git repo to this list.
Now we initialize git in this fodler using git init command. I also run the ls command to list the contents of .git directory that was created when the git init command was executed. I've also executed the git status command. It shows the branch I'm currently working on and the list of untracked files in the directory.
smruthy@inspiron:/var/www/drupal7$ git init
Initialized empty Git repository in /var/www/drupal7/.git/
smruthy@inspiron:/var/www/drupal7$ ls -a .git
. .. branches config description HEAD hooks info objects refs
smruthy@inspiron:/var/www/drupal7$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# .gitignore
# .htaccess
# CHANGELOG.txt
# COPYRIGHT.txt
# INSTALL.mysql.txt
# INSTALL.pgsql.txt
# INSTALL.sqlite.txt
# INSTALL.txt
# LICENSE.txt
# MAINTAINERS.txt
# README.txt
# UPGRADE.txt
# authorize.php
# cron.php
# includes/
# index.php
# install.php
# misc/
# modules/
# nbproject/
# profiles/
# robots.txt
# scripts/
# sites/
# themes/
# update.php
# web.config
# xmlrpc.php
nothing added to commit but untracked files present (use "git add" to track)
I want to ignore .htaccess file from git repo. So I add that file into the list in the .gitignore file. If I again execute 'git status' command, .htaccess file will not be listed below the untracked files.
Now I've to add all the files under the webroot to git. For that I use the command 'git add .'. The files/directories listed in the .gitignore file will be ignored. If you execute 'git status' command now, you can see that all the files/directories which where listed under 'untracked files' will now be under 'Changes to be committed:'.
Now you have to register all the additions and changes to git repo using 'git commit' command.
smruthy@inspiron:/var/www/drupal7$ git commit -m "Initial commit"
Now all the files will be added to git repo. I'm going to execute a few more commands, for checking.
smruthy@inspiron:/var/www/drupal7$ git status
# On branch master
nothing to commit (working directory clean)
smruthy@inspiron:/var/www/drupal7$ git log
commit 217d74d5cf4af00e2d634893a844b5848aa5b27c
Author: smruthy
Date: Mon Jul 2 12:50:28 2012 +0530
Initial commit
smruthy@inspiron:/var/www/drupal7$ git branch
* master
smruthy@inspiron:/var/www/drupal7$
'git status' shows the branch you are currently working on. Since there are no changes done after the last commit or any untracked file, it is showing the message 'nothing to commit (working directory clean)'
'git log' displays the details of the commits we have done to the git repo; with commit id, commit message, date and author who did the commit.
'git branch'. lists all the the branches in the repo. Now we have only one branch 'master'. If there are more branches, they will all be listed and the current working branch will be marked with *.
References:
- http://www.kernel.org/pub/software/scm/git/docs/gitignore.html
- http://www.kernel.org/pub/software/scm/git/docs/git-init.html
- http://www.kernel.org/pub/software/scm/git/docs/git-add.html
- http://www.kernel.org/pub/software/scm/git/docs/git-branch.html
- http://www.kernel.org/pub/software/scm/git/docs/git-status.html
- http://www.kernel.org/pub/software/scm/git/docs/git-commit.html
- http://www.kernel.org/pub/software/scm/git/docs/git-log.html