GIT

Giới thiệu

là một hệ thống quản lý mã nguồn miễn phí và mở, được xây dựng để có thể quản lý dự án từ nhỏ đến rất lớn một cách nhanh chóng và hiệu quả.

CVS - Concurrent Version System

  • CVS Local
  • Centralized Version Control Systems - CVCSs
  • Distributed Version Control Systems (DVCSs)

CVS Local

Copy code ra chỗ khác để sửa?

CVCSs 

  • Lưu trữ ở một nơi.
  • Tất cả sử dụng chung

DVCSs

  • Mỗi người 1 bản sao
  • Tất cả sử dụng chung
  • Mỗi máy cục bộ là một phiên bản đầy đủ dữ liệu.

Title Text

Sự ra đời của git

  • Vào năm 2002, dự án nhân Linux bắt đầu sử dụng một DVCS độc quyền có tên là BitKeeper
  • Vào năm 2005, sự hợp tác giữa cộng đồng phát triển nhân Linux và công ty thương mại phát triển BitKeeper bị phá vỡ và BitKeeper phải trả phí
  • Linus Torvalds phát triển công cụ của riêng họ dựa trên những bài học từ việc sử dụng BitKeeper

Cơ bản về git

  • CVS, Subversion...
  • Không phải cách làm việc của git

Cơ bản về git

Ba trạng thái

Cài đặt

http://git-scm.com/download

Mac: http://sourceforge.net/projects/git-osx-installer/

window: https://git-for-windows.github.io/

Lần đầu nên làm gì

Cấu hình danh tính 

Cấu hình

$ git config --global user.name "nghiatv"
$ git config --global user.email nghiait0111@gmail.com
$ git config --global core.editor emacs
$ git config --list

Kiểm tra cấu hình

$ git config user.name

Hoặc

Cần trợ giúp

$ git help <verb>
$ git <verb> --help
$ man git-<verb>
$ git help config

Chi tiết

Bắt đầu thôi

git init

Tạo ra 1 file .git chứa các tệp tin cần thiết cho 1 kho chứa git

git clone

"Clone" từ một respository có sẵn.

$ git add *.c
$ git add README
$ git commit -m 'lần đầu làm chuyện ấy'
$ git clone [url]

or

$ git clone [url] ten-thu-muc

Trạng thái của dữ liệu

Nó đây

git status

kiểm tra trạng thái của git

$ git status
# On branch master
nothing to commit, working directory clean
$ vim README
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   README
nothing added to commit but untracked files present (use "git add" to track)

Nếu ta thêm 1 file thì sao??

git add

Thêm file vào work directory

$ git add README
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   README
#

Kiểm tra lại xem sao

Tip: Thêm tất cả

$ git add .
$ git add . --all # git add . -A

.gitignore

Không thêm vào git

Quy tắc cho các mẫu có thể sử dụng trong .gitignore như sau:

  • Dòng trống hoặc bắt đầu với # sẽ được bỏ qua.
  • Các mẫu chuẩn toàn cầu hoạt động tốt.
  • Mẫu có thể kết thúc bằng dấu gạch chéo (/) để chỉ định một thư mục.
  • Bạn có thể có "mẫu phủ định" bằng cách thêm dấu cảm thám vào phía trước (!).

.gitignore

Không thêm vào git

$ cat .gitignore 
/node_modules
/public/storage
/vendor
/.idea
Homestead.json
Homestead.yaml
.env
_ide_helper.php
$ git diff
diff --git a/dontread.md b/dontread.md
index b94ab74..4ef0498 100644
--- a/dontread.md
+++ b/dontread.md
@@ -1 +1,3 @@
 please dont read me!
+
+add something below
$ git diff --staged
diff --git a/dontread.md b/dontread.md
new file mode 100644
index 0000000..b94ab74
--- /dev/null
+++ b/dontread.md
@@ -0,0 +1 @@
+please dont read me!

Chưa được commit

Đã được commit

git commit

Commit lại thay đổi

# them commit vao nhe
$ git commit
# them commit kem noi dung
$ git commit -m  "noi dung commit"
# them commit kem noi dung va tu dong add nhung file da duoc track
$ git commit -a -m "noi dung commit"

git log

Kiểm tra log của git

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,5 +5,5 @@ require 'rake/gempackagetask'
 spec = Gem::Specification.new do |s|
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"
+    s.version   =   "0.1.1"
     s.author    =   "Scott Chacon"
     s.email     =   "schacon@gee-mail.com

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

git log

  • -p - Hiển thị chi tiết của commit
  • -2 - Hiển thị 2 commit gần nhất
  • --pretty - custom format cho commit

git log

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 11 months ago : changed the version number
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
a11bef0 - Scott Chacon, 11 months ago : first commit

git log

Bạn lúc này?

git commit --amend

Thêm vào commit ngay trước

  • Commit quá nhanh
  • Thiếu mất  file chưa add
  • Code sai nhưng commit lên rồi
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

Add respository

Tại sao lại cần

Có một vài nguyên nhân chúng ta cần add respository

  • Làm việc với nhiều thành viên
  • Giảm thiểu rủi ro do hỏng hóc phần cứng
  • Làm việc với nhiều mã nguồn ở nhiều nơi
  • ...

git remote

$ git clone git://github.com/schacon/ticgit.git
Initialized empty Git repository in /private/tmp/ticgit/.git/
remote: Counting objects: 595, done.
remote: Compressing objects: 100% (269/269), done.
remote: Total 595 (delta 255), reused 589 (delta 253)
Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.
Resolving deltas: 100% (255/255), done.
$ cd ticgit
$ git remote
origin

git remote -v

$ git remote -v
origin	https://github.com/nghiatv/laraforum.git (fetch)
origin	https://github.com/nghiatv/laraforum.git (push)

git remote add

$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin  git://github.com/schacon/ticgit.git
pb  git://github.com/paulboone/ticgit.git

thêm các respository

git remote add

$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin  git://github.com/schacon/ticgit.git
pb  git://github.com/paulboone/ticgit.git

thêm các respository

git remote show

$ git remote show origin
* remote origin
  URL: git://github.com/schacon/ticgit.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branches
    master
    ticgit

kiểm tra thông tin respository

git remote rename

$ git remote rename pb paul
$ git remote
origin
paul

đổi tên thông tin respository

git remote rm

$ git remote rm paul
$ git remote
origin

xóa bỏ respository

git pull

$ git pull
Already up-to-date.

lấy dữ liệu từ respository

git push

$ git push origin master
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (15/15), 1.25 KiB | 0 bytes/s, done.
Total 15 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 1 local objects.
To https://github.com/nghiatv/laraforum.git
   28d606a..d6908f3  master -> master

đẩy dữ liệu lên respository

Mẹo

Gợi ý code

Tải về trực tiếp từ mã nguồn của Git tại https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

$ sudo nano ~/.bash_profile 
source ~/git-completion.bash

Sau đó thêm vào file

Cài alias

$ git config --global alias.last 'log -1 HEAD'
$ git last
commit d6908f371ee1043a8df8b08346d17164a80ee259
Author: Nghia Than <nghiait0111@gmail.com>
Date:   Sat Oct 22 03:18:55 2016 +0700

    adasd

Sau đó sử dụng

hỏi ư

Made with Slides.com