Hoạt động Create trong Git



Trong chương này, chúng ta sẽ học cách tạo một repository git từ xa, từ đó chúng ta sẽ đề cập nó như một Git server. Chúng ta cần một Git server để cho phép team cộng tác với nhau.

Tạo một tài khoản sử dụng mới trên hệ điều hành (ở đây tớ dùng Linux)

# tạo một nhóm người dùng mới trong Linux. Chúng ta sẽ tạo mới một account trong git để thực hành.
root@ubuntu:~ groupadd dev

# tạo một người dùng mới trong Linux
root@ubuntu:~# useradd -G dev -d /home/gituser -m -s /bin/bash gituser

# thay đổi password của tài khoản gituser
root@ubuntu:~# passwd gituser

Lệnh trên sẽ tạo ra kết quả sau:

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Như vậy chúng ta đã tạo xong một tài khoản gituser trong group dev trên hệ điều hành Linux. Bây giờ tớ ssh lên server lại với account mới tạo bằng lệnh ssh gituser@10.10.10.10 (giả sử ip của tớ là 10.10.10.10)

Tạo một repository rỗng

Hãy cùng chúng tôi khởi chạy một repository mới bằng cách sử dụng lệnh init theo sau bởi tùy chọn --bare. Nó khởi chạy repository mà không là một thư mục làm việc. Theo quy ước, repository rỗng này phải được đặt tên như .git.

gituser@ubuntu:~$ pwd
/home/gituser

gituser@ubuntu:~$ mkdir vietjack.git

gituser@ubuntu:~/vietjack.git$

gituser@ubuntu:~/vietjack.git$ ls

gituser@ubuntu:~/vietjack.git$ git --bare init
Initialized empty Git repository in /home/gituser/vietjack.git/

gituser@ubuntu:~/vietjack.git$ ls
branches  config  description  HEAD  hooks  info  objects  refs

Cặp khóa chung/riêng

Bạn hãy cùng chúng tôi xem qua tiến trình của việc định cấu hình của một Git server, tiện ích ssh-keygen công cộng/private RSA key pair, mà chúng ta sẽ sử dụng để xác định người sử dụng.

Mở một terminal và nhập lệnh sau và nhấn enter cho mỗi lần nhập. Sau khi hoàn thành, nó sẽ tạo một thư mục .ssh bên trong thư mục home. Tớ tạo key này trên máy client (account root), chứ ko phải git server với tài khoản gituser

root@ubuntu:~# pwd
/root

root@ubuntu:~# ssh-keygen

Lệnh trên sẽ tạo ra kết quả sau:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.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 đã tạo hai khóa, đầu tiên là private (i.e., id_rsa) và thứ hai là public (i.e., id_rsa.pub).

Ghi chú: Bạn đừng bao giờ chia sẻ khóa Private của bạn với ai khác.

Thêm các khóa vào các khóa được ủy quyền

Giả sử có hai nhà lập trình làm việc trên một dự án, tên là Tom và Jerry. Cả hai có khóa generate public. Hãy cùng xem cách để sử dụng các khóa này để xác nhận.

Tom nhập khóa chung của anh ta tới server bằng cách sử dụng lệnh ssh-copy-id như dưới đây:

[tom@CentOS ~]$ pwd
/home/tom

[tom@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub gituser@git.server.com

Lệnh trên sẽ tạo ra kết quả sau:

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.

Theo cách tương tự, Jerry nhập khóa chung tới server bằng cách sử dụng lệnh ssh-copy-id.

[jerry@CentOS ~]$ pwd
/home/jerry

[jerry@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa gituser@git.server.com

Lệnh trên sẽ tạo ra kết quả sau:

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.

Đẩy (Push) các thay đổi tới repository

Chúng ta đã tạo ra một repository rỗng trên server và cho phép sự truy cập của hai người. Từ đó, Tom và Jerry có thể đẩy các thay đổi của họ tới repository bằng cách thêm nó vào như một điều khiển từ xa.

Lệnh init tạo một thư mục .git để giữ siêu dữ liệu về repository mọi lúc nó đọc cấu hình từ tệp .git/config.

Tom tạo một thư mục mới, thêm tệp README, và commit thay đổi của anh ta như là commit đầu tiên. Sau khi ký tác, anh ta thẩm tra các thông báo commit bằng cách chạy lệnh 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'

Lệnh trên tạo kết quả sau:

[master (root-commit) 19ae206] Initial commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README

Tom kiểm tra thông báo log bằng cách thực hiện lệnh git log.

[tom@CentOS tom_repo]$ git log

Lệnh trên sẽ tạo kết quả sau:

commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <tom@tutorialspoint.com>
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Tom commit thay đổi của anh ta tới repository nội bộ. Bây giờ là thời gian để đẩy những thay đổi tới repository từ xa. Nhưng trước đó, chúng ta phải thêm repository này như một điều khiển từ xa, đây là một hoạt động một lần. Sau đó, anh ta có thể đẩy những thay đổi này tới repository từ xa một cách an toàn.

Ghi chú: Theo mặc định, Git chỉ đẩy tới những nhánh kết nối: cho mỗi nhánh mà tồn tại trên side nội bộ, side điều khiển từ xa được cập nhật nếu một nhánh với cùng tên đã tồn tại trên đó. Trong phần hướng dẫn của chúng tôi, mỗi khi chúng tôi đẩy những thay đổi tới nhánh origin master, chúng tôi sử dụng chính xác tên nhánh.

[tom@CentOS tom_repo]$ git remote add origin gituser@git.server.com:project.git

[tom@CentOS tom_repo]$ git push origin master

Lệnh trên sẽ tạo ra kết quả:

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

Bây giờ, những thay đổi này đã được commit thành công tới repository điều khiển từ xa.

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.




Tài liệu giáo viên