Để sử dụng Git hiệu quả, có rất nhiều mẹo Cấu hình Git (Git Config) hữu ích cho full-stack developer. Trong quá trình làm việc mình có gặp một vài sự khó hiểu trong việc config và sử dụng git lên cũng chia sẻ lên đây để anh em tham khảo

Cấu hình Git (Git Config) hữu ích cho full-stack developer
Cấu hình Git (Git Config) hữu ích cho full-stack developer

1. Line Ending Character

Line Ending Character là ký tự thể hiện việc kết thúc 1 dòng trong 1 file, thông thường hay sử dụng enter để thêm ký tự này vào và bắt đầu 1 dòng mới.

Vậy có bao nhiêu loại ký tự xuống dòng?

  • The Carriage Return (“CR”) character (0x0D, \r): di chuyển con trỏ đến đầu dòng mà không tiến tới dòng tiếp theo. Ký tự này được sử dụng làm ký tự dòng mới trong các hệ điều hành Commodore và Macintosh trước đây (Mac OS 9 trở về trước).
  • The Line Feed (“LF”) character (0x0A, \n): di chuyển con trỏ xuống dòng tiếp theo mà không quay lại đầu dòng. Ký tự này được sử dụng làm ký tự dòng mới trong các hệ thống dựa trên Unix (Linux, macOS X, Android, v.v.).
  • The End of Line (“EOL”) character (0x0D0A, \r\n): thực tế là hai ký tự ASCII và là sự kết hợp của các ký tự CR và LF. Nó di chuyển con trỏ xuống dòng tiếp theo và đến đầu dòng đó. Ký tự này được sử dụng làm ký tự dòng mới trong hầu hết các hệ điều hành không phải Unix khác, bao gồm Microsoft Windows và hệ điều hành Symbian.

Trong khi lập trình, mỗi anh em lại sử dụng 1 loại hệ điều hành riêng cho mình để code, và đương nhiên trong các file có các ký tự xuống dòng khác nhau. Khi chúng ta pull code về, nếu git config không được config đúng nó sẽ tự động convert sang ký tự xuống dòng của hệ điều hành mà người pull code về đang sử dụng, từ đó show ra những thay đổi không cần thiết gây nhiễu loạn thông tin về file thay đổi.

Ví dụ:

  • Bạn A sử dụng Linux để code phần mềm, code xong thì push code lên remote để bạn B làm tiếp
  • Bạn B sử dụng Window để pull code về và code tiếp tính năng.

Sau khi bạn B pull code về thì thấy 1096 files thay đổi mặc dù ông ý chưa kịp làm cái quái gì cả.

Dấu hiệu nhận biết.

Khi show diff trong PHPStorm lên mà thấy hình như bên dưới là biết có biến rồi nhé.

Cấu hình Git (Git Config) hữu ích cho full-stack developer.

Mình hay gặp nhất là khi migrate code từ version cũ của Magestore Retailer POS lên version mới của POS, nên nếu anh em nào khi migrate lên mà thấy quá nhiều file thay đổi thì nên xem lại config này.

Ảnh hưởng

  • Gây bối rối cho anh em khi lần đầu gặp phải
  • Nhiễu loạn thông tin về các file thay đổi nhất là khi migrate code từ version cũ lên version mới. Việc thay đổi về dấu enter nó không ảnh hưởng gì đến các file PHP và JS nhưng việc show ra quá nhiều file thay đổi dễ gây nản chí cho anh em khi migrate và mất thời gian check xem file ý đúng là nội dung thay đổi hay chỉ thay đổi mỗi dấu xuống dòng.

Khắc phục

Mở terminal lên và gõ 2 dòng sau trong project để config cho riêng project đó

  1. git config core.autocrlf false
  2. git config core.eol input

Hoặc config global luôn cho đỡ phải config lại nhiều

  1. git config --global core.autocrlf false
  2. git config --global core.eol input

Giải thích

  • git config core.autocrlf false: Config không tự động convert ký tự xuống dòng theo hệ điều hành đang sử dụng (Người dùng window hay gặp vấn đề này).
  • git config core.eol input: Config giữ nguyên ký tự xuống dòng của file khi pull từ remote xuống.

2. File permission

Sau khi mình merge code từ develop sang nhánh feature thì show được list file thay đổi như sau:

Cấu hình Git (Git Config) hữu ích cho full-stack developer.

Và khi show diff lên thì…

WTF? không có thì thay đổi về nội dung sao vẫn hiển thị là file thay đổi?, còn giống cả ký tự xuống dòng cơ =)))

Vậy khác biệt ở đây là gì?

Git cũng có config track cả về việc thay đổi permission của file, và việc theo dõi sự thay đổi này theo mình cũng là không cần thiết và gây nhiễu thông tin như phần trên, tốt nhất là nên tắt nó đi cho nhẹ lòng.

Khắc phục

Tiếp tục mở terminal lên và gõ

  1. git config core.fileMode false

Hoặc config global

  1. git config --global core.fileMode false

Hi vọng bài viết sẽ hữu ích cho anh em trong công việc.

Nếu bạn là một DevOps Engineer, ưa thích làm sản phẩm quốc tế trong lĩnh vực bán lẻ - thương mại điện tử! Tham gia Tuyển dụng DevOps, môi trường làm việc từ xa, địa điểm tự do, quản lý linh hoạt theo Agile.

Hãy đăng ký nhận tin để là người đầu tiên đọc bài viết mới nhất từ chúng tôi nhé

Posted 
Jun 21, 2020
 in 
Tech
 category

Bài viết khác từ

Tech

category

View All