🤔공부하게 된 계기
나는 Window OS를 사용하고 있다.
회사에서 커밋을 할 때 MacOS를 쓰는 분의 코드를 수정하고
커밋하면 파일의 모든 코드가 변경된 파일로 인식이 되어 네이밍만
변경해도 파일 전체가 다시 커밋되어 문제가 있어 알아보게 되었다.
📌OS별 개행 방식의 차이?
기본적으로 Window OS에서는 CRLF방식을 활용하여 개행한다.
그리고 Unix, Linux, MacOS는 LF방식을 활용하여 개행하게 된다.
각 개행 방식은 아래와 같다.
- LF = \n
- CR = \r
- CRLF: \r\n
사실상 CR방식은 MacOS 9버전 이하에서 사용했었기 때문에
이제는 거의 취급하지 않는다.
🐈⬛개행 방식 자동변환 설정
" git config core.autocrlf " 명령어를 통해서 깃에서 커밋할 때
개행 방식 자동 변환에 대한 설정을 할 수 있다.
core.autocrlf = input
branch에 checkout( git pull )할 때
개행방식을 변환하지 않고 기존 코드에 녹아든 방식을 유지하고commit할 때 LF 개행방식으로 변환해서 저장소에 올린다.
core.autocrlf = false
자동변환 하지 않는다.
core.autocrlf = true
Window에서는 checkout했을 때 LF로 받은 경우 CRLF로 변환하고
commit할 때 LF변환하고 커밋하며
MacOS와 Linux에서는 양방향으로 LF로 자동변환 처리한다.
- 명령어
// 마지막 명령어를 true, false, input 등으로 변경하면 적용된다
git config --global core.autocrlf true
git config --local core.autocrlf true
✅그렇다면 어떻게?
결론적으로 쉽게 설정하기 위해서 MacOS와 Window OS 모두
input으로 설정해주면 된다.
git config --global core.autocrlf input
git config --local core.autocrlf input
그럼에도 혹시나 작업환경이 바뀌었을 때 사람인 이상 깜빡할
가능성은 분명 존재한다.
🪄프로젝트 자체에서 공통 설정하기
사실 MacOS나 Window, Linux 등의 개행방식도 중요하지만
Git에서 기대하는 개행 값이 LF 개행방식이기 때문에
공동작업자와의 OS 차이까지 생각해보면 LF 개행방식으로
commit을 하는 것이 바람직하다고 볼 수 있다.
이를 해결하기 위해 프로젝트 root 경로에 .gitattributes라는
파일을 생성해준다. 그리고 아래 코드블럭처럼 넣어주면
commit할 때 최우선 순위로 autocrlf 설정이 적용되어 강제로
LF로 commit하게 된다.
- .gitattributes
# 모든 텍스트 파일은 자동 감지되고 LF로 저장
* text=auto eol=lf
# 명시적으로 LF 강제할 확장자들
*.js text eol=lf
*.jsx text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.css text eol=lf
*.scss text eol=lf
*.html text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.sh text eol=lf
*.env text eol=lf
# 바이너리 파일은 줄바꿈 처리 제외
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.mp4 binary
✍🏻마치며...
프론트엔드 개발을 지속하며 React의 state flow나 기본적인 script, memory 프로세스들에 대한 이해도는 높아졌지만 막상 다른 부분들에서 취약점이 드러나는 것 같다. 이제 좀 더 확장하여 딥다이브하는 시간을 많이 가져봐야겠다.
'Git' 카테고리의 다른 글
| [ Convention / git-commit-message ] 컨벤션이란? (0) | 2024.09.28 |
|---|---|
| [ Git-commands ] 최근 커밋 메시지 변경하기 (0) | 2024.09.28 |
| [ Git-commands ] Git 변경사항 임시저장하기 (2) | 2024.03.31 |
| [ git filter-branch ] 깃허브 저장소 히스토리 필터링 (0) | 2023.05.24 |
| [ GitHub ] 깃허브 사용해보기 (0) | 2023.03.19 |