59 điểm bởi GN⁺ 2024-02-17 | 4 bình luận | Chia sẻ qua WhatsApp
  • pull.ff only hoặc pull.rebase true

    • Cả hai cấu hình này đều nhằm ngăn việc vô tình tạo merge commit khi chạy git pull nếu nhánh đã lệch so với nhánh upstream.
    • pull.rebase true tương đương với việc luôn chạy git pull --rebase.
    • pull.ff only tương đương với việc luôn chạy git pull --ff-only.
    • Dùng đồng thời cả hai cấu hình này là không có ý nghĩa, vì --ff-only sẽ ghi đè --rebase.
  • merge.conflictstyle zdiff3

    • Cấu hình giúp phần xung đột khi merge dễ đọc hơn.
    • diff3 thay đổi cách mặc định hiển thị xung đột khi merge bằng cách chèn mã nguồn gốc vào giữa.
    • zdiff3 là phiên bản cải tiến của diff3 và thường được xem là tốt hơn.
  • rebase.autosquash true

    • Tính năng giúp việc chỉnh sửa các commit cũ trở nên dễ dàng hơn.
    • Nếu commit bằng git commit --fixup OLD_COMMIT_ID, thì khi chạy git rebase --autosquash main, commit fixup! sẽ tự động được gộp vào commit đích.
  • rebase.autostash true

    • Tự động chạy git stashgit stash pop trước và sau git rebase.
  • push.default simple, push.default current

    • Thiết lập để tự động push nhánh hiện tại lên nhánh remote có cùng tên.
    • push.default simple là cấu hình mặc định, chỉ hoạt động khi nhánh đã theo dõi một nhánh remote.
    • push.default current sẽ luôn push nhánh local lên nhánh remote cùng tên.
  • init.defaultBranch main

    • Khi tạo repository mới, sẽ tạo nhánh main thay cho master.
  • commit.verbose true

    • Thêm toàn bộ diff của commit vào trình soạn thảo văn bản khi viết commit message để giúp nhớ mình đã thay đổi gì.
  • rerere.enabled true

    • Ghi nhớ cách bạn đã xử lý xung đột merge trong quá trình git rebase và tự động giải quyết lại xung đột đó.
  • help.autocorrect 10

    • Tính năng tự sửa của git có kiểm tra lỗi gõ sai, nhưng không tự động chạy lệnh đã được sửa.
    • Nếu muốn tự động thực thi, hãy đặt help.autocorrect thành 1, 10, immediate, hoặc prompt.
  • core.pager delta

    • Đây là "pager" dùng để hiển thị đầu ra của git diff, git log, git show, v.v.
    • Thiết lập delta làm công cụ xem diff nâng cao có hỗ trợ tô sáng cú pháp.
  • diff.algorithm histogram

    • Thuật toán diff mặc định thường gây khó khăn khi thứ tự các hàm thay đổi.
    • diff.algorithm histogram sẽ hiển thị trường hợp đó rõ ràng hơn.
  • core.excludesfile: .gitignore toàn cục

    • Thiết lập tệp gitignore toàn cục áp dụng cho mọi repository.
  • includeIf: cấu hình git riêng cho cá nhân và công việc

    • Dùng để cấu hình các địa chỉ email khác nhau cho repository cá nhân và repository công việc.
  • url."git@github.com:".insteadOf 'https://github.com/'

  • fsckobjects: ngăn ngừa hỏng dữ liệu

    • Cấu hình này chủ động phát hiện hỏng dữ liệu và đã nhiều lần cứu cả nhóm.
  • Các cấu hình liên quan đến submodule

    • status.submoduleSummary true
    • diff.submodule log
    • submodule.recurse true
  • Các cấu hình khác

    • blame.ignoreRevsFile .git-blame-ignore-revs
    • branch.sort -committerdate
    • color.ui false
    • commit.cleanup scissors
    • core.autocrlf false
    • core.editor emacs
    • credential.helper osxkeychain
    • diff.tool difftastic
    • diff.colorMoved default
    • diff.colorMovedWS allow-indentation-change
    • diff.context 10
    • fetch.prune truefetch.prunetags
    • gpg.format ssh
    • log.date iso
    • merge.keepbackup false
    • merge.tool meld
    • push.followtags true
    • rebase.missingCommitsCheck error
    • rebase.updateRefs true
  • Cách thiết lập

    • Thông thường dùng git config --global NAME VALUE để cấu hình.
    • Nếu muốn xóa tùy chọn, hãy chỉnh sửa thủ công ~/.gitconfig.
  • Những cấu hình đã thay đổi sau khi viết bài này

    • diff.algorithm histogram
    • branch.sort -committerdate
    • merge.conflictstyle zdiff3
  • Kết luận

    • Việc hỏi nhiều người về các cấu hình yêu thích của họ rồi liệt kê những cấu hình được nhắc đến nhiều nhất là điều hữu ích.

Ý kiến của GN⁺

  • Điểm quan trọng nhất của bài viết này là giúp bạn biết được những tùy chọn cấu hình git mà các lập trình viên thường xuyên sử dụng.
  • Với các kỹ sư phần mềm mới bắt đầu dùng git, những cấu hình này có thể giúp tăng hiệu suất làm việc và giải quyết các vấn đề thường gặp hằng ngày.
  • Đặc biệt, các cấu hình như merge.conflictstyle zdiff3 hay rebase.autosquash true có thể giúp việc xử lý xung đột merge và quản lý lịch sử commit trở nên dễ dàng hơn, từ đó giảm bớt các vấn đề có thể phát sinh trong quá trình cộng tác.

4 bình luận

 
pril1 2024-02-23

Để xóa một tùy chọn, bạn cũng có thể dùng lệnh git config --global --unset NAME.

 
rumbarum 2024-02-21

Để kiểm tra cấu hình của bạn, hãy thêm

git config --list.

 
pmc7777 2024-02-18

Tôi cũng từng có trải nghiệm là đã cấu hình trong môi trường phát triển chính, rồi sang môi trường khác không được cấu hình nên tự hỏi sao lại không chạy.. haha. Vì lập trình viên dùng Git hằng ngày, nên mong mọi người sẽ quan tâm nhiều hơn đến các thiết lập liên quan đến Git.

 
GN⁺ 2024-02-17
Ý kiến trên Hacker News
  • Thiết lập core.autocrlfsafecrlf
    • Ngăn commit file CRLF và buộc chuyển đổi sang LF
    • Có thể ghi đè bằng gitattributes khi cần
  • Thiết lập alias trong .gitconfig
    • Đặt bí danh để in lịch sử commit dưới dạng đồ thị ngắn gọn
    • Cấu hình lấy từ một bài đăng trên Stack Overflow
  • rebase.autosquash và bí danh fixup
    • Đây là các thiết lập được dùng thường xuyên, giúp tự động hóa rebase sau khi commit
    • pull.rebase cũng quan trọng, nhưng fixup được dùng thường xuyên hơn
  • Tính hữu ích của thiết lập insteadOf
    • Dùng cách viết tắt khi thêm remote GitHub
    • Cũng nhắc đến nhiều thiết lập khác như advice.statusHints, include.path, remote "origin".fetch, interactive.singleKey
  • Ví dụ thiết lập .gitconfig cá nhân
    • Bao gồm nhiều cấu hình cho alias, tag, tar, log, pull, diff, difftool, pager, safe, advice, init
  • Thiết lập dùng delta làm pager
    • Hiển thị diff dễ đọc hơn và có tô sáng cú pháp
    • Thêm bí danh để checkout sang nhánh mặc định
  • Thiết lập user.useConfigOnly để dùng nhiều email khác nhau
    • Comment user.email, rồi thiết lập email khi commit trong repository mới
  • Sự cần thiết của việc đổi giá trị mặc định của merge.conflictstyle
    • Kiểu diff3 cung cấp nhiều thông tin hơn để giải quyết xung đột
  • Các thiết lập bổ sung
    • core.commentChar, alias.newtask, alias.zip, git checkout -, format.pretty, thiết lập delta
  • Hiểu lầm về thiết lập branch.sort
    • Thực tế nó sắp xếp theo ngày commit chứ không phải nhánh được dùng gần đây nhất
  • Một ví dụ thiết lập .gitconfig cá nhân khác
    • Bao gồm cấu hình alias.lg, alias.hist, alias.quick-push, alias.search, user, core, url
    • Có thể định nghĩa một quy trình làm việc đơn giản thông qua bí danh quick-push

Nội dung trên là bản tóm tắt các thiết lập .gitconfig cá nhân và các mẹo cấu hình Git mà người dùng chia sẻ trong phần bình luận trên Hacker News. Các thiết lập này tập trung vào việc nâng cao hiệu quả sử dụng Git, tự động hóa một số tác vụ cụ thể và cải thiện trải nghiệm người dùng.