در این بخش خواهیم دید که چگونه یک Remote repository بسازیم و از این به بعد با Git Server به آن اشاره میکنیم. ما به یک Git Server برای فعالیت گروهی نیازمندیم
# add new group [root@CentOS ~]# groupadd dev # add new user [root@CentOS ~]# useradd -G devs -d /home/gituser -m -s /bin/bash gituser # change password [root@CentOS ~]# passwd gituser
دستورات بالا نتایج زیر را نمایش خواهند دادا:
Changing password for user gituser. New password: Retype new password: passwd: all authentication token updated successfully.
برای ساخت یک انبار جدید، از دستور bare-- که در ادامهاش دستور init آورده میشود، استفاده میکنیم. اینکار یک انبار بدون داشتن work directory ایجاد میکند. بر اساس توافق ما مجبوریم یک انبار خالی را با پسوند git. نام گذاری کنیم.
[gituser@CentOS ~]$ pwd /home/gituser [gituser@CentOS ~]$ mkdir project.git [gituser@CentOS ~]$ cd project.git/ [gituser@CentOS project.git]$ ls [gituser@CentOS project.git]$ git --bare init Initialized empty Git repository in /home/gituser-m/project.git/ [gituser@CentOS project.git]$ ls branches config description HEAD hooks info objects refs
وارد بحث تنضیمات Git Server میشویم، ابزار Ssh keygen میتواند برای ما زوج کلید رمز خصوصی یا عمومی RSA تولید کند، که ما از آنها برای احراز هویت استفاده میکنیم.
ترمینال را باز کنید و دستورات زیر را وارد کنید، برای ورودیها فقط کلید Enter را فشار دهید. بعد از پایان موفق اجرای کدها یک .ssh directory در داخل Home Directory ایجاد خواهد شد.
tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ ssh-keygen
دستورهای گفته شده در صفحه قبل نتایج زیر را ایجاد خواهد کرد:
Generating public/private rsa key pair. Enter file in which to save the key (/home/tom/.ssh/id_rsa): Press Enter Only Created directory '/home/tom/.ssh'. Enter passphrase (empty for no passphrase): ---------------> Press Enter Only Enter same passphrase again: ------------------------------> Press Enter Only Your identification has been saved in /home/tom/.ssh/id_rsa. Your public key has been saved in /home/tom/.ssh/id_rsa.pub. The key fingerprint is: df:93:8c:a1:b8:b7:67:69:3a:1f:65:e8:0e:e9:25:a1 tom@CentOS The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | . | | Soo | | o*B. | | E = *.= | | oo==. . | | ..+Oo | +-----------------+
ssh-keygen با دو کلید ایجاد شده است، اولی Private(i.e. id_rsa) و دیگری Public(i.e. id_rsa.pub).
تذکر : هرگز کلید private خود را با دیگران به اشتراک نگذارید.
فرض کنیم، دو برنامهنویس 1 روی یک پروژه کار میکنند، با نامهای Tom, Jerry هردو کلیدهای عمومی ایجاد کردهاند. چگونگی استفاده از این کلیدها در ادامه آورده شده است
Tom کلید عمومی خود را با دستور ssh-copy-id به سرور افزوده است، در زیر فعالیت Tom آورده شده است:
[tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub gituser@git.server.com
دستورات بالا نتایج زیر را نمایش خواهند داد:
gituser@git.server.com's password: Now try logging into the machine, with "ssh 'gituser@git.server.com'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
به شکل مشابهی Jerry نیز کلید عمومی خود را به سرور افزوده است:
[jerry@CentOS ~]$ pwd /home/jerry [jerry@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa gituser@git.server.com
و نتایج زیر نمایش داده میشوندد:
gituser@git.server.com's password: Now try logging into the machine, with "ssh 'gituser@git.server.com'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
ما یک انبار خالی روی سرور ایجاد کردیم و به دو کاربر اجازه دسترسی دادیم. حالا هم Tom و هم Jerry میتوانند تغییرات را برروی انبار Push کنند.
دستور git init .git directory را برای ذخیره کردن metadata در داخل انبار ایجاد میکند. همیشه تنضیمات انبار، از داخل .git/config فایل خوانده میشوند.
Tom یک directory جدید ایجاد میکند README فایل را در آن اضافه میکند، و تغییراتش را با عنوان)توضیحات ( initial commit, commit میکند. بعد از Commit کردن تغییراتش، آنها را با دستور git log بازبینی میکند
[tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ mkdir tom_repo [tom@CentOS ~]$ cd tom_repo/ [tom@CentOS tom_repo]$ git init Initialized empty Git repository in /home/tom/tom_repo/.git/ [tom@CentOS tom_repo]$ echo 'TODO: Add contents for README' > README [tom@CentOS tom_repo]$ git status -s ?? README [tom@CentOS tom_repo]$ git add . [tom@CentOS tom_repo]$ git status -s A README [tom@CentOS tom_repo]$ git commit -m 'Initial commit'
دستورات بالا نتایج زیر را در برخواهند داشت:
[master (root-commit) 19ae206] Initial commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README
Tom پیامهای log را با دستور git log مشاهده میکند:
[tom@CentOS tom_repo]$ git log
دستورات بالا نتایج زیر را در برخواهند داشت:
commit 19ae20683fc460db7d127cf201a1429523b0e319 Author: Tom Cat <tom@howcodex.com> Date: Wed Sep 11 07:32:56 2013 +0530 Initial commit
Tom تغییراتش را روی انبار محلی خود، قرار داده است. اکنون وقت Push کردن تغییرات، به git server یا remote repository است. اما ابتدا ما باید انبار را به عنوان remote معرفی)اضافه( کنیم، این کار را یک بار انجام خواهیم داد. بعد از این میتواند تغییرات را push کند
کند git فقط branch هایی را که یکسان باشند push میکند، بدین معنی که برای هر branch ای که در انبار محلی وجود داشته باشد remote repository فقط وقتی با دستور push به روز میشود که branch هم نام با محلی در آن وجود داشته باشد. در جزوهی ما، هر وقت که تغییراتی را در push origin master branch میکنیم، شما از نام مناسب با الزامات خود استفاده کنید.
[tom@CentOS tom_repo]$ git remote add origin gituser@git.server.com:project.git [tom@CentOS tom_repo]$ git push origin master
دستورات بالا نتایج زیر را در برخواهند داشت:
Counting objects: 3, done. Writing objects: 100% (3/3), 242 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To gituser@git.server.com:project.git * [new branch] master −> master
اکنون تغییرات به شکل موفقیت آمیز در remote repository یا git server افزوده شدهاند.