글

이미 git commit 한 내용 제거 (commit 제거가 아닌 patch 제거)

이미 commit 한 내용이 시간이 지난 후라서 많이 쌓여있고 이 내용을 제거하고자 하지만 로그도 남기고 싶을 경우 다음과 같이 진행합니다. (뭔가 git으로 심플하게 하는 방법이 있을것 같지만 일단 이렇게 해도 심플합니다.) 1 2 3 4 5 # git show로 수정사항을 따냄 $ git show <commit> > diff # patch에 -R 옵션을 주어 역으로 패치를 제거 $ patch -p1 -R < diff 제거한 내용을 확인 후 필요에 따라 commit 하면 되겠습니다. 참쉽죠?

Bit field 예제

임베디드 개발하는데 필수적으로 레지스터 건드릴때 쓰는 bit field입니다. 어렵게 글로 설명하는 것보다 그림과 코드를 보는게 낫겠습니다. [A:6][B:4][C:6][D:16] 숫자는 bit이고 총 합이 32bits 인 데이터가 있습니다. typedef union { struct { unsigned int A : 6 ; /* [0:5] */ unsigned int B : 4 ; /* [6:9] */ unsigned int C : 6 ; /* [10:15] */ unsigned int D : 16 ; /* [16:31] */ } bits; unsigned int value; } Register; Union의 개념만 익숙하다면 너무 쉽네요. [A:6][B:4][C:6][D:16] = [value:32]

Shell 에서 파일의 full path 출력하는 방법

잡설 간단한 팁이지만 올리는 이유는 제 바보짓을 널리 알리기 위해서 입니다...읭? 그동안 파일의 위치에 가서 pwd를 하고 파일명을 덧붙이는 개삽질을 해오다가 문득 "내가 왜 이런 바보짓을 하고 있지?" "형님들이 이미 만들어놨을거야"라며 검색해보니 바로 나오네요. $ realpath .bashrc /home/sjpark/.bashrc #바보짓은이제그만 #간단하지만유용한팁

임베디드 개발자가 사용하는 vscode 정리

이미지
잡설 계속 업데이트할 예정입니다. 임베디드 개발자가 vscode 쓰려니 자꾸 vim으로 돌아가고 싶네요. Remote Development using SSH 공식 홈페이지 : https://code.visualstudio.com/docs/remote/ssh Git control이 가능합니다! 다 필요없으니 이거 쓰세요! 마소 만세! sshfs와 sftp Extension으로는 해결되지 않는 문제가 있었으니, Git control입니다. remote source control하라고 git을 만들어놨더니 remote로 git을 쓰고 있으니( 이게 뭔 말이야 ) 근데 많이들 이렇게 하니 문제는 문제죠. 마소 개발자들도 힘들었던지 결국 해결해내고 말았네요. 설치 아직 정리가 안된 관계로 간단히 서술합니다. 차후 다시 정리하겠습니다. Visual Studio Code Insiders . 설치. vscode 베타 버전입니다. 2019년 5월 27일 현재 Insiders 버전에서만 가능하답니다. VSCode의 Extension에서 Remote Development 검색하여 설치합니다. (확인 예정) 윈도우 powershell에서 ssh-genkey 실행. c:\users\<사용자명>\.ssh\ 에서 id_rsa.pub 파일을 서버의 ~/.ssh/에 authorized_keys 파일명으로 업데이트 VSCode의 F1 에서 Remote-SSH: Connect to Host... 선택 후 <id>@<서버명> 입력하여 접속 VSCode 에서 File->Open Folder 결정적인 도움을 준 제 베프에게 감사드립니다. ( 이 글을 안보겠지만 ) SSH FS 완벽한 솔루션을 찾은 관계로 사용하지 않습니다. 공식 홈페이지 : https://github.com/SchoofsKelvin/vscode-sshfs vscode를 쓰지 않았던 중요한...

VIM 에러 E21: 바꿀수 없음, 'modifiable'이 꺼져있습니다.

이미지
vim 을 쓰다 간혹 위와 같은 메시지가 발생하면서 저장이 안될때가 있습니다. 원인은 찾아보려했지만 찾지 못했습니다. 해결방법은 간단합니다. :set modifiable

git pull 을 했더니 branch가 갈라지는 경우

이미지
문제 git pull을 했더니 다음과 같은 메시지를 뿜어냅니다. 현재 브랜치와 'origin/master'이(가) 갈라졌습니다, 읭? 이게 뭔 소리죠? glog를 확인해봅니다. origin/master와 로컬의 master가 분리되었습니다. 이게 무슨일이야! 원인 사실은 범인이 접니다! ㅡ.ㅡ 여러가지 원인이 있지만 제가 발생시킨 방법은 다음과 같습니다. devel에서 commit 후 push build에서 pull devel에서 재수정 후 commit --amend하여 합침, 그리고 push build에서 pull 4번에서 pull을 했더니 commit이 달라져있던거죠. 우리가 원하는건 결국 devel에서 마지막으로 push했던걸 build에서 pull 하는 겁니다. 해결 일단 급한불은 끄기 위해 제가 아는 명령어를 조합해서 해결하기로 했습니다. 왼쪽 빨간선 두개 아래로 내리면 origin/master 와 같은 commit으로 가게 됩니다. # 주의 --hard 옵션은 로컬 변경사항까지 다 날려버립니다. 반드시 stash 같은걸로 백업해두세요. $ git rebase --hard HEAD~2 그리고 그냥 origin/master로 올라갑니다 git pull origin master 급했기때문에 일단 이렇게 해결했지만, 좀 더 우아한 해결방법이 있을것 같습니다. 나중에 또 문제 생기면 찾아보도록 하겠습니다.

git rebase 도중 submodule이 conflict 났을때

문제 어느때와 같이 주기적으로 active된 branch를 master와 rebase 하던 도중 conflict가 났습니다. 뭐 별거 있겠어? 수정하고 add 하고 git rebase --continue 하면 되지.....라고 봤더니 submodule이 conflict 났습니다. (당황) 내 commit으로 이어가려고 하는데 git add고 뭐고 안됩니다. (당황2) 정보수집 여러가지 방법도 찾아보고 구글링도 해보았지만 해결을 하지 못했습니다. Submodule Conflicts while Rebasing 해결 결국은 가장 단순한 방법을 사용하기로 했습니다. 급하게 해결하느라 해당 로그를 캡쳐하지 못해서 글로만 설명하니 양해바랍니다. reset으로 양쪽에서 수정 제거(git reset HEAD <submodule directory>) conflict 제거(git checkout --<submodule directory>) conflict가 발생한 patch 내용 확인 해당 submodule directory에서 patch에 해당하는 commit 가져오기(cd <submodule directory>; git checkout <해쉬>) 메인에서 git add <submodule directory>  rebase 계속 진행(git rebase --continue) 특별한 방법이 있는지도 모르겠지만 오컴의 면도날이라고 이해하기 쉽고 단순한 방법을 조합한 해결책이 최고죠.

이 블로그의 인기 게시물

구글 시트에 여러 행 한번에 추가하기

WSL2 Ubuntu 20.04 및 네트워크 설정

우분투 terminator 에서 파일 경로 클릭시 vscode 에서 열기