Git flow
1. Clone code base
1.1. Lấy remote address của dự án
https://git.lifetimetech.vn/ikaigo/ikaigo.git
Lưu ý: Có thể setting ssh-key để clone code từ địa chỉ dạng "git@git.lifetimetech.vn:ikaigo/ikaigo.git" để không cần nhập username/password khi thực hiện các tao tác với git (Tham khảo tại đây)
1.2. Clone code
Tại thư mục chứa code, chẳng hạn C:\xampp\htdocs gõ lệnh:
git clone https://git.lifetimetech.vn/ikaigo/ikaigo.git ikaigo
Code của dự án sẽ được clone về thư mục C:\xampp\htdocs\ikaigo
1.3. Kiểm tra lại remote
Vào thư mục ikaigo. Kiểm tra lại địa chỉ remote
git remote -v
Nếu kết quả như sau thì việc clone code đã thành công.
origin https://git.lifetimetech.vn/ikaigo/ikaigo.git (fetch)
origin https://git.lifetimetech.vn/ikaigo/ikaigo.git (push)
2. Cập nhật code
Nên thực hiện kiểm tra tình trạng hiện tại vào đầu giờ sáng, trước khi bắt đầu làm việc hoặc trước khi làm một task mới.
git fetch origin
Kết quả nhận được sẽ có dạng:
From git.lifetimetech.vn:ikaigo/ikaigo
d4afea6..1991b02 master -> origin/master
* [new branch] I6974 -> origin/I6974
* [new branch] production -> origin/production
f432c7a..51ada17 staging -> origin/staging
Ta sẽ thấy các thay đổi trên hệ thống: các branch mới được tạo, các branch được cập nhật. Ngoài ra lệnh fetch còn cập nhật đồng bộ lại dữ liệu giữa repo local và repo remote.
Trường hợp branch master có thay đổi, cần cập nhật branch bằng lệnh:
git pull origin master
3. Bắt đầu code một redmine issue
3.1. Kiểm tra branch master đã được cập nhật hay chưa
Quay về branch master
git checkout master
Cập nhật origin remote repository
git fetch origin
Pull code mới nhất từ branch master
git pull origin master
3.2. Tạo branch mới từ branch master
Tuyệt đối không tạo branch làm task từ bất kỳ một branch nào khác, kể cả branch issue có liên quan hoặc issue cha.
Tạo branch mới
git checkout -b tên_branch
Quy tắc đặt tên branch mới:
RedmineIssuesId_Tên_màn_hình
RedmineIssuesId_Tên_chức_năng
Ví dụ:
6996_admin_login_page
9669_upload_image
Trường hợp issue fix bug hoặc issue con từ bất kỳ issue cha nào mà ta đã tạo branch. Tên branch nên được đặt như sau:
ParentIssuesId_ChildIssuesId_Tên_màn_hình_fixbug
ParentIssuesId_ChildIssuesId_Tên_chức_năng_enhancement
Ví dụ:
6996_8888_admin_login_page_fixbug
Một branch chỉ nên viết code để thực hiện một issue. Tránh code nhiều issue trên cùng một branch.
4. Tạo commit sau khi code xong
4.1. Kiểm tra lại các thay đổi sau khi code
git status
Ta sẽ nhìn thấy danh sách các file đã thay dổi:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: public/js/view.js
modified: public/js/view.js.map
modified: resources/views/groups/permisions.blade.php
Kiểm tra lại các đoạn code đã thay đổi
git diff (for all)
git diff tên_file
Kết quả nhìn thấy có dạng:
diff --git a/public/js/view.js b/public/js/view.js
index a40d16b..74f2570 100644
--- a/public/js/view.js
+++ b/public/js/view.js
@@ -457,110 +457,6 @@ function updateChart(data, options) {
function changeGroupUserProfileImage() {
$('.menu-item .avatar').attr('src', $("#new-user-img").attr("src"));
}
-$(document).ready(function() {
- //delete manual button
- $(document).on("click", ".delete-manual-btn", function() {
- var manualId = $(this).attr("data-manual-id");
- if (confirm("このマニュアルを削除します。よろしいですか?")) {
- $('#manual-form-' + manualId).submit();
- }
- });
-});
(function ($) {
var base = {
@@ -1578,6 +1474,110 @@ $(document).ready(function() {
});
});
$(document).ready(function() {
+ //delete manual button
+ $(document).on("click", ".delete-manual-btn", function() {
+ var manualId = $(this).attr("data-manual-id");
+ if (confirm("このマニュアルを削除します。よろしいですか?")) {
+ $('#manual-form-' + manualId).submit();
+ }
+ });
+});
Trong đó các dòng có dấu "-" màu đỏ là các dòng đã bị xóa, các dòng có dấu "+" màu xanh là các dòng đã thêm vào. Bước này là bước kiểm tra cuối cùng xem các thay đổi về code có vấn đề gì ko? Ngoài ra còn kiểm tra các lỗi về coding convention như đặt tên biến, cấu trúc block, dấu cách thừa cuối dòng, ...
5.2. Tạo commit
Add các file thay đổi vào commit
git add tên_thư_mục
git add tên_file
Chú ý không nên sử dụng lệnh git add .
Ví dụ:
git add public/js/
git add resources/
Trường hợp có các file bị xóa, sử dụng lệnh git add -u tên_thư_mục lệnh này sẽ kiểm tra lại các trường hợp đổi tên file, trường hợp file bị xóa hoàn toàn hoặc trường hợp xóa file cùng tên sau đó add file mới vào.
Kiểm tra lại lần cuối các file đã được add vào commit:
git status
Kết quả hiển thị có dạng:
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: public/js/view.js
modified: public/js/view.js.map
modified: resources/views/groups/permisions.blade.php
Tạo commit và message commit
git commit
Chú ý không nên sử dụng lệnh git commit -m "message"
Màn hình sẽ hiển thị editor nhập message commit. Nhập message commit sau đó tiếp tục, commit sẽ được tạo.
Quy tắc viết message commit:
[RedmineIssueId][Mô tả ngắn gọn công việc thực hiện]
___Để cách một dòng trống ở đây___
Ví dụ:
[6996][Create admin login page]
--- NEWLINE ---
[9669][Fix bug when click button login]
--- NEWLINE ---
Dòng message đầu tiên không nên quá 50 kí tự vì màn hình log sẽ có thể không hiển thị hết.
Trường hợp issue phức tạp, nên comment nhiều hơn trong message commit. Cách viết như sau:
[RedmineIssueId][Mô tả ngắn gọn công việc]
___Để cách một dòng trống ở đây___
- mô tả chi tiết công việc 1
- mô tả chi tiết công việc 2
___Để cách một dòng trống nữa ở đây___
5.3. Kiểm tra lại commit vừa tạo
Sau khi tạo commit, cần kiểm tra lại commit vừa tạo:
git log --oneline -10
Kết quả hiển thị có dạng
2876587 [6996][Fix bug permission page]
977da01 Merge branch '4974_delete_js' into 'working'
....
Ta sẽ thấy commit vừa tạo cùng với mã hash và message nằm trên đầu của list log.
6. Push code lên remote repository
6.1. Cập nhật các thay đổi (đã diễn ra trong quá trình code ở local)
git fetch origin
6.2. Rebase local commit
Rebase là quá trình lấy các thay đổi trên branch origin master (các thay đổi trong code mà người khác đã làm và merge vào code base) vào branch ở local, sau đó đưa commit mà ta vừa tạo lên đầu commit stack.
git pull --rebase origin master
Tuyệt đối không pull rebase từ bất cứ branch nào khác.
Trường hợp không có conflict (các mã code vừa do người khác đã thay đổi và merge vào code base, vừa do ta đã thay đổi trên local), sẽ có thông báo thành công hiện ra. Trường hợp có conflict ta cần phải thực hiện việc sửa conflict.
Xem các file conflict
git status
Các file cần sửa conflict sẽ hiển thị ở dạng "Both modified" màu đỏ. Sửa các file này, sau đó git add . Cuối cùng gõ lệnh tiếp tục rebase
git rebase --continue
6.3. Push code
git push origin tên_branch
Ví dụ:
git push origin 6996_admin_login
7. Tạo merge request
- Kiểm tra branch đã push trên
git.lifetimetech.vn - Tạo merge request và thông báo cho reviewer
8. Chỉnh sửa khi có comment
- Trường hợp có comment từ reviewer, cần sửa lại code và tiến hành rebase