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 ư
GIT
By nghiatv
GIT
- 115