반응형
반응형

Windows환경에서 git bash를 이용해서, Linux 서버에 배포를 하는 작업을 주로 하는데, add 하는 과정에서 CRLF가 붙어버려서, 일반적으로는 문제가 없지만, 쉘 스크립트 등은 치명적일 수 있기 때문에, 이를 방지하는 설정이 있다는 걸 알게 되었다.


사실 문제가 생겨서는 아니고, add 할때마다 아래와 같은 Warning 메시지가 나오는게 거슬려서 찾아보게 됨.

warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.


git bash를 띄워서, 아래와 같은 명령어를 입력하면 자동으로 CRLF가 생성되는 것을 방지한다.

$ git config --global core.autocrlf false


반응형
,
반응형

코인거래소의 API를 연동할 일이 생겨서, 작업을 해서 최종적으로 github에 올리게 되었는데, 이전 직장에서 사용하던 git 사용 습관상 master branch는 건드리지 않고, master branch를 새롭게 clone떠서 다른 branch로 만든 후 push, 그 후 master branch의 내용을 다른 branch와 rebase 하는 작업을 하다보니..


rebase 특성 상, commit 을 일렬로 쭉 나열하기 때문에, 테스트간 API Key를 넣어서 로컬에서 commit했던 이력도 전부 다 github에 올라가게 되버리는 참사가 일어나게 되었다. 


이게 SVN만 사용하다보니, 로컬 commit이 같이 push가 될거라고는 생각을 못했는데, 치명적인 실수였던 것 같다.


당장 Key가 노출되었기 때문에, 거래소 API Key는 바로 삭제처리하고, 조금 더 완벽하게 하기 위해 github에 이미 올라간 API Key가 노출된 commit(HEAD 기준 바로 전 커밋)도 같이 없애 보기로 하였다.


아래와 같이 작업을 계획했고, 그 결과 자연스럽게 내가 노출한 Commit을 Commit을 안한거처럼 보이게 할 수 있었다.


1. remote repo 현재 버전을 로컬에 clone

$ git clone <Remote REPO URL>

2. 로컬에서 git rebase 명령어를 통해 HEAD와 바로 전 Commit을 합침

$ git rebase -i HEAD~2   # HEAD 포함 2개까지의 Commit을 하나의 Commit으로 만들겠다.
# 위 명령어를 치면 editor가 열리며 아래와 같이 해당되는 Commit들이 목록에 보여짐
# 아래부터는 전부 Editor 메시지
pick 111111 HEAD 바로 이전 Commit
pick 222222 HEAD Commit

# HEAD 바로 이전 Commit과 HEAD를 합치기로 했으므로, HEAD 부분의 커밋에 해당하는 라인의 가장 앞에 있는 pick을 squash로 바꿔주고, 저장 후 빠져나온다.
pick 111111 HEAD 바로 이전 Commit
squash 222222 HEAD Commit

# 이제 다시 editor가 뜨며, 새로운 commit 메시지를 입력하라고 나온다. 2개의 Commit을 자연스럽게 합치고, 메시지를 뭘로 할지 결정해서 입력해주고, 저장 후 빠져나온다.
# 주의사항이 있다면, 주석을 제외한 모든 텍스트가 Commit 메시지가 된다.
# This is the 1st commit message:
HEAD 바로 이전 Commit

# This is the commit message #2:
HEAD Commit

3. remote repo에 push (github 정책 상 커밋 이력을 수정하게 되면 다른 사용자가 pull을 받은 경우 conflict이 날 수 있기 때문에, 기본적으로 허용을 안한다고함.. 이런 경우 --force 옵션을 사용하여 강제로 덮어버릴 수 있다.)

$ git push origin master --force



반응형
,
반응형