Git - درست عملیات


Advertisements

در این بخش خواهیم دید که چگونه یک 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

تولید Public/private RSA Key pair

وارد بحث تنضیمات 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.

Push کردن تغییرات به انبار Git روی سرور (Git server repository)

ما یک انبار خالی روی سرور ایجاد کردیم و به دو کاربر اجازه دسترسی دادیم. حالا هم 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 افزوده شدهاند.

Advertisements