Nhà phát triển lõi Git cấu hình và sử dụng Git như thế nào?
(blog.gitbutler.com)- Scott Chacon, tác giả của "Pro Git", giải thích một số thiết lập Git mà anh ấy đã bật trên phạm vi toàn cục và lý do tại sao
- Nhiều thiết lập trong số đó thực tế được học từ những nhà phát triển đang làm việc trên codebase lõi của Git
- Dưới đây là cấu hình
~/.gitconfiggiúp Git trở nên tốt hơn[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # Có lý do gì để không dùng? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # Thiết lập theo sở thích cá nhân (bỏ chú thích để dùng khi cần) [core] # fsmonitor = true # untrackedCache = true [merge] # (nếu phiên bản Git thấp hơn 2.3 thì dùng ‘diff3’) # conflictstyle = zdiff3 [pull] # rebase = true
Các nhà phát triển lõi Git cấu hình Git như thế nào?
- Trên mailing list của Git, Felipe Contreras từng đề xuất đội ngũ lõi hãy xóa toàn bộ cấu hình và alias để thử dùng Git mặc định
- Kết quả của thử nghiệm này là 9 thiết lập và 3 alias đã được đề xuất làm giá trị mặc định mới
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - Những thiết lập này vẫn chưa được chấp nhận làm mặc định
- Nhưng điều thú vị là nhiều nhà phát triển Git gặp khó khăn khi dùng Git nếu không bật một vài thiết lập trong số này
- Điều còn thú vị hơn là phần lớn các bạn có lẽ hoàn toàn không biết chúng có ý nghĩa gì
- Bài viết sẽ giải thích chúng theo ba nhóm
- Những thứ rõ ràng làm Git tốt hơn (Clearly Makes Git Better)
- Có lý do gì để không dùng? (Why the Hell Not?)
- Vấn đề sở thích (A Matter of Taste)
# Những thứ rõ ràng làm Git tốt hơn
Sắp xếp danh sách nhánh
- Mặc định Git sắp xếp nhánh theo thứ tự chữ cái, nhưng sắp xếp theo ngày commit gần nhất có thể hữu ích hơn
- Bạn có thể dùng các thiết lập sau để sắp xếp nhánh theo commit mới nhất và hiển thị theo dạng cột
git config --global column.ui auto git config --global branch.sort -committerdate
Sắp xếp danh sách tag
- Để sắp xếp tag theo thứ tự phiên bản thay vì thứ tự chữ cái, hãy dùng thiết lập sau
git config --global tag.sort version:refname
Thiết lập tên nhánh mặc định
- Để đặt tên nhánh mặc định khi khởi tạo repository mới, hãy cấu hình như sau
git config --global init.defaultBranch main
Cấu hình diff được cải thiện
- Thay đổi thuật toán diff mặc định sang
histogramđể so sánh chính xác hơn - Để phát hiện phần code bị di chuyển và hiển thị bằng màu, hãy thêm các thiết lập sau
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
Cấu hình push được cải thiện
- Bạn có thể cải thiện hành vi của push bằng các thiết lập sau
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
Cấu hình fetch được cải thiện
- Để tự động loại bỏ nhánh và tag không cần thiết khi fetch, hãy dùng các thiết lập sau
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# Có lý do gì để không dùng?
Gợi ý tự sửa lỗi
- Để phát hiện lỗi gõ sai khi nhập lệnh và đưa ra gợi ý, hãy dùng thiết lập sau
git config --global help.autocorrect prompt
Hiển thị diff khi commit
- Để hiển thị luôn nội dung thay đổi khi viết commit message, hãy thêm thiết lập sau
git config --global commit.verbose true
Tái sử dụng cách giải quyết xung đột
- Để tự động tái sử dụng cách giải quyết xung đột trước đó, hãy dùng các thiết lập sau
git config --global rerere.enabled true git config --global rerere.autoupdate true
Thiết lập file .gitignore toàn cục
- Để chỉ định các file bị bỏ qua trên phạm vi toàn cục, hãy cấu hình như sau
git config --global core.excludesfile ~/.gitignore
Cải thiện thiết lập rebase
- Để tự động squash và stash khi rebase, hãy dùng các thiết lập sau
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# Vấn đề sở thích
Hiển thị xung đột merge tốt hơn
- Hãy cân nhắc thiết lập sau nếu muốn hiển thị thêm cả phiên bản gốc khi xảy ra xung đột merge
git config --global merge.conflictstyle zdiff3
Dùng rebase khi pull
- Nếu muốn tự động rebase khi chạy
git pull, hãy cấu hình như saugit config --global pull.rebase true
Tăng tốc phát hiện thay đổi file
- Để cải thiện hiệu năng của
git statusvà các lệnh tương tự, bạn có thể dùng các thiết lập saugit config --global core.fsmonitor true git config --global core.untrackedCache true
# Kết luận
- Với các thiết lập này, bạn có thể dùng Git thuận tiện hơn, và một số trong đó cũng được các nhà phát triển lõi tích cực sử dụng
- Tối ưu cấu hình Git có thể giúp cải thiện workflow và sử dụng hiệu quả hơn
7 bình luận
"Điều thú vị hơn là hầu hết các bạn hoàn toàn không biết điều này có nghĩa là gì" — đâm trúng tim đen thật. Rùng mình.
Là
-globalchứ không phải--globalsao?Phải là
--globalmới đúng. Tôi đã nhầm khi copy-paste. Đã sửa lại rồi.Các tùy chọn cấu hình Git phổ biến
Việc tái sử dụng cách giải quyết xung đột thật hay.
Khi xem diff, tôi có dùng
git-deltađể xem theo kiểu TUI.Nếu ngại cả cái này lẫn cái kia thì dùng
tigvậy.... hahaCó gì hay hơn nữa không nhỉ...?
Ý kiến trên Hacker News
git out. Nó liệt kê tất cả các commit chưa được push. Tôi dùng nó suốtgit config --global core.pager bat