فرآیند تولید، انتشار، ویرایش انتشار هر برنامه در وب فرآیندی تکراری است که نیازمند توجه بسیار است، این توجه و ظرافت زمانی بیشتر اهمیت پیدا می‌کند که برنامه شما مخاطبان بسیاری داشته باشد که در هرلحظه بصورت زنده از سایت شما استفاده می‌کنند، در این صورت است که حتی ثانیه ها نیز ارزشمند هستند و برای ایجاد تغییر و یا بروزرسانی سایت خود بایست سریعترین راه را ایجاد کنید. در اینجا با استفاده از Git سیستمی خودکار برای انتشار تغییرات می‌سازیم و با نگاهی به آنچه پیشتر در مورد قلاب‌ها در گیت می‌دانستیم، تنظیمات احتمالی مورد نیاز را پیش و پس از انتشار انجام می‌دهیم.

پیش‌فرض‌های ما درون سرور

دایرکتوری اصلی کدهای ما در مسیر /var/www/domain.com است و مسیری که برای ایجاد ریپوزیتوری گیت داریم /var/reop/site.git است.

ایجاد ریپوزیتوری

وارد سرور خود شوید و دستورات زیرا را در آن اجرا کنید.

cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare

--bare مشخص کننده است که این دایرکتوری حاوی سورس کدی نیست و تنها برای مدیریت ساخته می‌شود.

قلاب‌ها

یکی از ویژگی‌های باحال گیت قلاب‌ها هستند، با استفاده از قلاب‌ها شما می‌توانید دستورات و فرامین خود را در زمان‌های مختلف اجرا کنید، مثلا پس از ارسال کدها به سرور درون یک فایل تاریخ اجرای دستور را ذخیره کنید. (البته مشخصا ذخیره تاریخ کاری عبث است ولی به هر حال کاری است که می‌توانیم انجام دهیم)

مهمترین بخش کار ما اینجاست، یعنی جایی که باید مشخص کنیم پس از دریافت کد‌های ارسال شده از سمت کاربر بایست با آنها چکار کنیم، چون همانطور که قبلا گفتیم مسیر site.git تنها به منظور مدیریت ایجاد شده است. با استفاده از قلاب post-recieve میخواهیم کدهای دریافت شده را به مسیر اصلی آنها یعنی domain ارسال کنیم، پس مراحل زیر را انجام می‌دهیم.

cd hooks
cat > post-receive
#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

# press ctrl-d to save
chmod +x post-receive

کار در سرور تمام است پس دستور بدرود با سرور را اجرا  می کنیم. exit

درون رایانه خود

حال باید ریپوزیتوری‌ای درون رایانه خود ایجاد کنیم وremote آن را برابر مسیر سرور خود قرار دهیم و کدهای خود را منتشر کنیم.

cd /my/workspace
mkdir project && cd project
git init

git remote add live ssh://user@mydomain.com/var/repo/site.git

git add .
git commit -m "My project is ready"

git push live master