2021년 40주차 기록
2021.10.04
core_autocrlf line-endings
10/04 (월) ~ 10/10 (일)
- 새로운 카테고리가 필요하다
- 스니펫 도구
- Chrome history를 날짜별로 살펴볼수 있을까?
- gitconfig cross platform
- (번역) 제발, 당신의 Git 리포지토리에 .gitattributes 을 추가하라
- 크롬 브라우저에 사이드바 추가해 업무 생산성 높이는 방법
새로운 카테고리가 필요하다
- 요즘 책을 하나 봤는데…
- 알고리즘 관련 카테고리가 하나 필요하다고 생각됨
- 일단 알고리즘 관련은 블로그에 정리해 두자
- 어떻게 카테고리를 나누는 것이 좋을까?
대기업 입사시험 - 토끼 문제
스니펫 도구
- 이전에 작성했던 코드를 재사용하기 위한 도구가 있다
-
Snippet Tools 소개글, onextrapixel
- 이 중 현재는 cacher 로 이름이 바뀐 GistBox 를 사용해봤다
- 시간나면 다른 것도 확인해보자
Chrome history를 날짜별로 살펴볼수 있을까?
- Chrome 에서 Ctrl + h 를 클릭하면 본인이 브라우징한 히스토리를 볼 수 있다
- 최근 날짜는 찾기 쉽지만 한 달전 것을 찾아보려면 많이 힘들다
- 방법을 찾아 봤다. How do I view a specific date in my Google Chrome history?
- 구글의 마이 액티버티 를 찾아보라는 내용이다
- 본인 인증을 다시 한 번 해야 한다
- 다른 방법으로..
-
history-by-date
라는 Chrome Extension 이 있다
-
gitconfig cross platform
- #line-endings, #core_autocrlf #newline
- 36주차에 다뤘던 주제 인데 이어서 다뤄보자
- cross platform 에서, 다시 말하면 linux와 window 상에서 같은 프로젝트를 편집하려고 한다
- 이 때 중요한 이슈가
line-ending
이다- 윈도우는
CR+LF
로 line이 완료되며 - 리눅스는
LF
로 line이 완료된다
- 윈도우는
- 이 주제는 한 때 양쪽 진영 ( 윈도우측 , 리눅스측) 간에 대립이 있었던 민감한 주제인데 ..
- 각 플랫폼에서 개발후 git으로 머지할 때 line ending을 잘못올려 빌드가 깨지는 문제가 종종 발생했었기 때문이다
- 리눅스측은
LF
하나로 끝낼 수 있는 것을 왜 복잡하게CR
+LF
로 하는가 불만이 있고 - 윈도우 측은 원래
CR
+LF
가 원래 환경이었으나 유닉스계열에서 효율성을 이유로 변칙적으로LF
만 쓰게 되어 문제가 발생한 것이라는 주장이다
git config 에서 core.autocrlf
옵션을 켜야할까?
- git은 이 문제를 해결하기 위해
core.autocrlf
라는 옵션을 켤수 있는데- 크로스 플랫폼 개발시 이 기능을 꼭
On
하라는 개발자가 있는 반면.. - 크로스 플랫폼 개발시 이 기능을 절대 켜면 안된다는 입장도 있다
- 대부분의 모던
윈도우
에디터는CR
+LF
뿐만 아니라LF
도 지원하기 때문이다 - 심지어 윈도우 10에서는 기본 에디터인
NotePad
도LF
line ending을 지원한다!!!
- 대부분의 모던
- 크로스 플랫폼 개발시 이 기능을 꼭
- 이것 저것 읽어본 결과 오리지날이 어느 쪽인지 따지는 것보다 2021년 현재 개발면에서 어떤 방법이 좋느냐 결정을 해야 하는데
- 개발쪽은 점유율이 일단 리눅스쪽이 많고
- 요즘 윈도우측도 개발쪽을 지원하기 위해 리눅스 지원을 강화하는 트렌드이기 때문에 ( WSL 등등 )
- autocrlf 옵션을 끄고 리눅스 방식으로 통일하는 것이 맞는것 같다
현재 core.autocrlf 를 On 해서 사용하고 있는 상황에서 off로 바꾸기
- 참고 링크 , 참고할 stackoverflow 답변
(번역) 제발, 당신의 Git 리포지토리에 .gitattributes 을 추가하라
- 원본 링크 : 🙏 Please Add .gitattributes To Your Git Repository, dev.to
- 2020년 2월 3일 작성되고 2월 12일 마지막 업데이트 된 글 ( 확인일 : 2021-10-06 )
- 참고 링크
What Is .gitattributes?
-
.gitattributes
파일은 파일과 경로의 속성들 특정하도록 한다.- 그 속성들은
git commit
등 과 같은 git actions을 수행할때 참고되는 것들이다
- 그 속성들은
- 즉, git은 파일이 생성되거나 저장될 때마다, 지정된 속성에 따라 자동으로 설정하여 파일을 저장한다
- 이 속성중 하나는 eol (end of line) 으로, 특정 파일의 줄 끝 형식을 지정한다
- 이 article은 line endings을 어떻게 설정하는지 더 깊이 파고들 것이며,
- 같은 repository에서 서로 다른 머신 / OS를 사용할지라도 개발들이 같은 값을 사용하도록 할 것이다
Why .gitattributes ( Developers At War ⚔)?
- 모든 개발자들은 서로 같지 않다
- 단지 윈도우즈 머신에 VS Code로 개발한다고 해서
- 다음번 pull request가 같은 개발 환경에서 개발됐을거라 생각하지 말라
- (다른 개발자가 MacOS 머신에 Subline Text 2를 쓸 수도 있다)
- 위에서 언급된 개발자들은 다른 OS들을 쓰는데 ( 윈도우즈 vs 맥OS )
- 서로 다른 기본 line ending 을 가지고 있다
- 윈도우측은 CRLF로 끝나며
- Linux/MacOS측은 LF로 끝난다
- 겉보기에 둘을 달라보이지 않는다. 이게 왜 문제일까???
- 당신
prettier
를 활성화했고endOfLine
속성이lf
로 설정되어 있다면1 2 3
{ "endOfLine": "lf" }
- 윈도우 머신 개발자는 prettier로 부터 아래와 같은 linting 이슈를 만나게 될 것이다
- 이 지점에서
.gitattributes
파일이 당신을 구해줄 것이다 :fairy: , :mage_man: :mx_claus: 🦸♀️🦸♂️ !!!
New Repository (Repo)
-
.gitattributes
을 repo에 추가하기 위해- 당신 repo의 root folder에
.gitattributes
이름을 가진 파일을 생성해야 한다
- 당신 repo의 root folder에
- 아래는 .gitattributes file의 예제 내용이다
1 2 3
*.js eol=lf *.jsx eol=lf *.json eol=lf
- 이 파일을 repo에 commit하고 , 변경사항을 서버에 push하라
1 2 3
git add . git commit -m "Added .gitattributes to repo" git push
- 이제 이 repo로 부터 code를 받는 누구든지
- 파일을 수정하거나 생성할 때, git에 의해 자동으로 알맞은 기본 line ending이 사용될 것이다
Add to Existing Git Repository (Repo)
- .gitattributes file을 생성하기위해 New Repository (Repo) 에 언급된 과정을 따라해라
- 일단 이 파일이 git server에 push 되면
- 로컬 repo가 clean 하며 commit 할 것이 없도록 확인한다
-
git status
를 실행하여 repo가 clean 한지 확인한다1
git status
- Note: 아직 push 나 commit할 파일이 있다면,
- 다음 Command를 실행하기전에
- 이런 action이 지금 실행되도록 확인 하거나
- stash 되도록 하라
- 다음 Command를 실행하기전에
GitAttributes Reset
1
2
git rm --cached -r .
git reset --hard
- 위의 명령은,
-
.gitattributes
에서 새롭게 정의된 line endings 을 이용하여 - 현재 repo의 파일들을 업데이트할 것이다
-
- 새로운 변경사항을 포함하여 어떤 변경도 그 파일에 대해 지정된 line ending을 자동적으로 사용하게 된다
- 다음 단계는 모든 팀 동료와 collaborator 들에게
- GitAttributes Reset 명령을 실행하라고 알려주는 것이다
- 이제 prettier 는
CR
에 대해 더이상 불평하지 않으며- 모든 개발자는 편히 쉴 수 있다
크롬 브라우저에 사이드바 추가해 업무 생산성 높이는 방법
-
Switch
- 고급기능은 유료라서 사용포기
- Switch Workstation