Git directory outside working directory

I have an old PHP website that I wanted to have its code/content versioned with Git, normally Git setup the repo directory in the “.git” directory inside the working directory, but I faced a problem, if the working directory is accessible from the web server it means “.git” is also accessible too.

Luckily git have an option to have the repo directory located somewhere else using the GIT_DIR environment variable, so here what I did:


$ vi .profile
GIT_DIR=/home/rayed/my_website_git
GIT_WORK_TREE=/var/www/my_website
export GIT_DIR
export GIT_WORK_TREE

You notice that the web site is located in “/var/www/my_website” but the repo is located under totally different directory “/home/rayed/my_website_git”, so the web server can’t access it by mistake.

كيف تنشئ موقع انترنت مجانا

هل تملك عنوان بريد الكتروني تحت gmail او hotmail؟ ماذا لو بحثت عن اسمك هل ستظهر صفحتك في تويتر او فيس بوك؟

لماذا لا تقوم بحجز اسم نطاق خاص بك مثل www.rr.sa ويكون عنوانك البريدي هو rayed@rr.sa، وبالمجان ايضاً.

نحتاج للخدمات ما يلي:

  1. تسجيل اسم النطاق domain: المركز السعودي لمعلومات الشبكة (SaudiNIC) يقدم نطاق تحت العنوان “.sa” مجانا.
  2. استضافة اسم النطاق: موقع ClouDNS يقدم خدمة استضافة النطاقات مجانا. (نعم تسجيل النطاق شئ واستضافته شئ آخر) اتمنى لو يقدم المركز السعودي هذه الخدمة مجانا ايضاً.
  3. استضافة موقع الويب، والخيارات هنا عديدة ما اعرفها هي:
    1. Github Pages مع اسم نطاق مخصص Setting up a custom domain with GitHub Pages
    2. موقع tumblr.com مع اسم نطاق مخصص Using a custom domain name
  4. استضافة البريد: موقع ClouDNS يقدم خدمة استقبال واعادة ارسال البريد Email Forwarding لثلاث حسابات مجانا.

My first Git Session

This guide for my own reference please don’t rely on it, for a better introduction check out Git Reference website. Basic concept and terminologies, Git have 3 logical places:

  • Working Area: normal directory where you edit your project.
  • Staging Area: Think of the staging as your project state before you start your coding session, after each coding session you add your changes to staging area using “git add filename” or “git add .”
  • Snapshot Area: After multiple coding sessions you would finish a logical change, e.g. adding commenting system in web site, next you need to store a snapshot of your project after these changes, you would do that with “git commit”

Setting the environment:

git config --global user.name "Rayed Alrashed"
git config --global user.email "my@email"
git config --global color.ui true

Start versioning a project:

cd my_project
make clean
vi .gitignore  # files you want Git to ignore, e.g. log, tmp, binaries
git init           # Initalize Git 
git add .        # Add All files to Git tracking
git commit    # Initial commit, get a snapshot of the project

Typical workflow:

cd my_project
:
vi README
git status -s            # Get the status of files changed
git add README      # Add README to staging area
:
git commit -m "Describe your change"        # Make a snapshot of the staging area