Xử lý lỗi commit failed conflict trong svn server năm 2024

Git là tool quản lý source code, version, phân quyền truy xuất mã nguồn. Git có 3 vùng lưu trữ chính gồm :

Working Diretory: folder coding

Staging Area: vùng đệm, dùng review changing -> Git Add: add all thay đổi code từ working_directory vào vùng staging -> Git commit: add all thay đổi code từ working_directory vào vùng staging

Repository: lưu lịch sử thay đổi.

Quy trình quản lý mã nguồn xem thêm git flow. Một số công cụ phục vụ học git căn bản, xem tại : //learngitbranching.js.org/?locale=vi //www.rithmschool.com/courses/git/git-github-git-basics-exercises //gitexercises.fracz.com/exercise/master

CÁC LỆNH CẦN NHỚ

————-LOG ls -la: hiển thị toàn bộ file hoặc thư mục ẩn. git log –all -decorate –oneline –graph: tra lịch sử commit. git status: Kiểm tra lại trạng thái hiện tại của git, vị trí hiện tại của con trỏ.

————-LOCAL git init : Tạo repository local . git add ‘tenfile.file’|[.] : thêm file tenfile.file vào môi trường staging để sẳn sàng thay đổi HOẶC thêm all file đã thay đổi. git commit -m ‘message’: lưu thay đổi vào local repo với ghi chú. git commit –amend: thực hiện commit ghi đè commit trước đó mà không bổ xung commit vào log . git stash [save ‘message’]: lưu lại các thay đổi của task1 [với mess – nếu dùng save]nhưng chưa commit để chuyển sang việc khác, branch khác, các thay đổi này sẽ được sử dụng tiếp sau đó. git remote add [alias_name] [remote_url]: mapping local current with remote repo tại remote_url và định danh nó bằng alias_name . git remote add origin url: join local repo với remote repo với url, origin là alias_name . git push -u origin master|[local_branch]:[remote_branch]: đẩy thay đổi từ local repo lên remote repo [đã join local with remote] ứng với -u làjoin local_branch tới remote_branch . git push –force: đẩy thay đổi từ local lên server, ghi đè thay thế hoàn toàn bản local cho remote bỏ qua xung đột phiên bản. git tag [version] [commit_id] : đánh dấu 1 commit_id với tag phiên bản.

————–REMOTE git pull: đồng bộ repo từ remote về local, tự động merger nội dung cho local. git fetch: lấy toàn bộ nội dung từ remote repository, tách riêng thành 1 nhánh có tên FETCH_HEAD, sau đó phải merge tay hoặc pull lại .

————–Branching git branch -a : liệt kê tất cả các nhánh . git branch [ten_nhanh]: tạo branch mới từ vị trí HEAD hiện tại, có tên là [ten_nhanh], nhưng HEAD vẫn ở nhánh hiện tại. git branch -f master HEAD~3: Xóa commit ở nhánh master đến vị trí HEAD~3. git branch –d [ten_branch]: xóa branch local hiện tại. git push –delete [ten_remote] [ten_branch]: xóa branch remote ứng với branch tại local có tên ten_branch . git checkout [ten_nhanh]: điều chỉnh contror HEAD tới branch mới . git checkout -b [ten_nhanh]: tạo branch [ten_nhanh] và điều chỉnh contror HEAD tới branch mới luôn.

————–Merge fast forward git merge [ten_nhanh]: tự động merge nội dung branch ten_nhanh vào nhánh hiện tại, 1 commit mới được sinh, con trỏ HEAD của branch ten_nhanh vẫn ở commit cuối cùng của branch ten_nhanh. Con trỏ HEAD của nhánh hiện tại di chuyển tới commit mới được tạo ra do merge. Khi có conflict thì sửa nội dung, git add + commit [+ push].

————–Set 1 nhánh thành master git rebase master: bạn đang đứng tại nhánh feature_branch, lệnh rebase cắt tất cả commit của feature_branch từ điểm rẽ nhánh, ghép nối tiếp vào nhánh master, trong khi merge chỉ ghép 2 commit cuối cùng của 2 nhánh feature và master thành 1 commit mới của master.

————–Khôi phục thay đổi về điểm bắt đầu . git reset [commit_id]: sử dụng hồi phục nhánh về vị trí commit_id. git reset –hard [commit_id]: reset về điểm commit thành công gần nhất hoặc điểm commit_id , chỉ dùng cho branch cá nhân. nguy hiểm. git reset –soft HEAD~n : bỏ n commit bằng cách di chuyển con trỏ HEAD về trước đó n commit, nhưng giữ nguyên hiện trạng[–soft] thay đổi tại các file.

git revert [commit_id] : tạo commit mới bằng việc commit lại ứng phiên bản kề trước nó[ hoặc đè lên commit_id bằng một commit_id’], điều chỉnh con trỏ HEAD về vị trí commit mới.

git merge –squash [issue_branch]: gộp tất commit từ nhánh issue_branch thành 1 commit và tích hợp vào nhánh hiện tại.

————–Điều chỉnh vị trí. git cherry-pick [list-commit-id]: chỉ gộp 1 danh sách commits có id trong [list-commit-id] vào nhánh hiện tại, thứ tự thêm vào theo thứ tự trong ds [list-commit-id] . git rebase -i HEAD~n : đây là lệnh điều chỉnh lại vị trí nhưng mở giao diện con cho phép lựa chọn ds commit.

NOTE:

Tool học GIT: //learngitbranching.js.org/?locale=vi

SVN FLOW

  • BaseSource: Lưu nguyên bản source code nhận được từ khách hàng
  • Main: [Project_Name].[Source_Version] – Nhánh chính chứa full code, last code, code từ branch đã hoàn thiện được merge vào đây.
  • Branchs: Nhánh phụ, nhân bản từ Main, dành riêng xử lý lỗi hoặc thêm chức năng[feature] mới:

    [

    TicketId] – Sử dụng TicketId đễ định danh bug hoặc feature.

    [

    TicketId].[SolutionN] – Sử dụng các giải pháp khác nhau cho ticket ứng với TicketId, thêm hậu tố Solution-N để tiện theo dõi.

  • Release: Baseline cho mỗi lần release [TicketId].[Source_Version] – Source được release riêng cho mỗi bug hoặc feature. .. [Project_Name].[Source_Version] – Source được release theo Baseline[Source Version], sau đó được merge vào Main.

NOTE: Việc càng nhiều branch thì việc duplicate code càng nhiều. Khi muốn tách branch từ 1 vị trí commit cũ rất mất công. Khi client làm việc trên nhiều branch thì cần chuẩn bị thêm dung lượng lưu trữ. Đối với outsourcing, nếu cần duy trì hỗ trợ phiên bản cũ thì cần duy trì riêng 1 branch release cho phiên bản đó.

GIT FLOW

  • Master : only admin update, code in production, no bug, no direct commit.
  • Develop: only admin update, developing, contain all bug info. All task start from here. QC test from code feature merge, .. testing for new release.
  • Feature: feature branch được tạo từ develop branch ứng với task dựng chức năng mới. ->Có thể có nhiều feature branch được tạo ra trong cùng 1 thời điểm Feature branch ở local nên xoa sau khi feature được thi công hoàn thiện, chức năng được xây dựng xong. Feature branch được merge với develop branch. ->Xóa local feature branch và kết thúc task. NOTE: Đối với feature branch đang làm dỡ, có thể switch nhanh chóng sang feature branch khác để làm việc mà không sợ bị mất công phần việc đang làm dỡ[chưa commit]. Git có cơ chế lưu tạm [Git stash ..], khi dev checkout feature, source sẽ được load lại từ vùng tạm để tiếp tục làm việc.
  • Release: Được tạo từ develop branch khi delivery feature, triển khai phiên bản ứng dụng ra môi trường production. -> Có thể có nhiều release branch do cần triển khai nhiều verion production hoặc có mục đích tracking error version[by feature]. Không release từ develop branch, tránh trường hợp đang release thì code bị update hoặc phải pause developing to release. Release branch only fix bug, not dev new function, .. do-loop-fix-until no bug => merge release to master, after then merge release to develop, ghi lại release tag vào merge commit. ->Xóa release branch kết thúc task.
  • HotFix: Được tạo ra từ master branch, fix error production. Hoàn thành hot fix, HotFix branch merge master branch, merge develop branch, ghi lại release tag. ->Xóa feature hotfix kết thúc hot fix.

SVN vs GIT

  • GIT nhanh hơn do cho phép làm việc offline thực sự với local repo. Dev phần lớn làm việc mới mã nguồn tại máy họ.
  • Git tạo nhánh linh hoạt và merge tốt hơn. Đây là đặc điểm cốt lõi. Trong khi với ví dụ về SVN Flow ở trên chúng ta thấy SVN làm việc với nhánh phức tạp hơn.
  • SVN học dễ, dev dễ tiếp cận hơn GIT.

CUỐI CÙNG

GIT có thể hỗ trợ làm CI/CD, Docker Registry, .. Học hơi mất thời gian tí nhưng chỉ có 10 lệnh chiếm 80% các thao tác với GIT, tài liệu hướng dẫn dễ tìm. GIT desktop cũng dễ dùng. Hãy dùng GIT.

Chủ Đề