Github 에서 내용에서 민감한 정보 삭제하기

github에 소스코드를 올리면서 중요한 코드를 삭제하지 않고 올렸다는걸 나중에서야 알게되었다. github에서 코드를 지워야하는 상황.

구글에 검색해보니 몇가지 답이 나왔다. 명령어를 입력해서 처리하는 방법과 bfg라는 툴을 이용하는 방법 두가지가 있는데 일단 bfg는 좀 귀찮았고(많은 설명들에서 bfg가 무엇인지 안나와있는데 github에서 bfg를 검색해보면 된다.) 명령어를 입력해서 처리해보기로 결정.

여튼 검색된 문서의 이런저런 방법대로 해봐도 잘 안되서 마지막은 github에서 공식적으로 안내된 문서대로 해보았더니 바로 적용되었다. (https://help.github.com/articles/removing-sensitive-data-from-a-repository)

일단 삭제할 내용이 포함된 파일을 백업한 다음, 입력할 명령어는 다음과 같다.

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 삭제될파일의_전체경로' --prune-empty --tag-name-filter cat -- --all

이것을 입력하고 일단 무언가 텍스트들이 잠시 지나가길 기다린 다음, 마지막으로 push를 하면 된다. 삭제될 파일의 경로는 정확하게 경로 모두와 파일명 전부를 적어줘야한다.

git push origin --force --all

그리고 나면 해당 파일이 삭제되어 있다. 백업했던 파일을 수정한 다음 원래 위치로 다시 복구하고, add, commit, push를 차례대로 해준다.

그러면 복구 완료.

git 저장소 주소 변경하기

사내시스템의 아이피 변경으로 소스코드 관리 서버 URL이 변경되었다.

작업 디렉토리에 연결된 저장소 URL을 변경해야해서 찾아보니 다음과 같은 링크를 발견했다.

현재 작업 디렉토리와 연결된 저장소 URL을 알아내려면 git remote show origin

현재 작업 디렉토리와 연결된 저장소 URL을 변경하려면 git remote set-url origin ssh://git서버주소 를 입력하면 된다.

.gitignore 파일 설정하기

git을 이용할 때 무시하고 싶은 파일이 있을 때에는 .gitignore 파일을 작성하여 사용한다.

.gitignore 파일을 작성하는 방법 : http://emflant.tistory.com/127

.gitignore 파일을 작성하는건 어렵지 않은데 이것을 적용하니까 이미 .gitignore에 무시하도록 설정한 파일이 자꾸 나타났다. 이 문제를 해결하려면 다음과 같이 처리한다. (참고 : http://blog.naver.com/deersoo?Redirect=Log&logNo=70169497582 )

git으로 관리하고 있는 프로젝트의 루트로 이동한다.

git rm -r –cached .

git add .

git commit -a

 

git rm -r –cached . 은 git의 삭제명령인데 -r은 하위폴더도 모두 삭제하는 옵션이고 –cached는 git 시스템이 인덱스하고 있는 부분을 삭제하라는 의미이다. 이 명령으로 캐시를 다 삭제하고 다시 add 한다음 commit 하고 push를 하면 그다음부터는 .gitignore에 있던 파일들은 안나타나게 된다.

git flow 에서 hotfix 사용 방법

git flow 에 익숙해져 가고 있는데 hotfix 사용법에 익숙치 않아서 애를 먹었다.

나중에 잊어버리지 않기 위해 hotfix 사용방법을 여기에 기록해둔다.

git flow hotfix start <핫픽스버전이름> <베이스버전이름>

명령으로 origin의 특정 브랜치로부터 핫픽스 브랜치를 시작한다.

수정작업을 진행한다.

수정작업을 진행하며 git commit 명령으로 계속 커밋을 해놓는다.

저장소로 커밋 내용을 보내기 위해

git push -u hotfix/<핫픽스버전이름>:hotfix/<핫픽스버전이름>

을 입력해서 저장소의 hotfix/<핫픽스버전이름> 브랜치로 계속 push를 한다.

수정 작업이 마무리되고 모든 것이 끝났다면 로컬의 develop 브랜치로 이동한 다음, git pull 명령을 입력하여 다른 사람들이 작업했던 것들을 받아온다.

git flow hotfix finish <핫픽스버전이름>

명령을 사용하여 핫픽스를 종료하고 hotfix 브랜치를 삭제하고 develop 브랜치에 변경 내용을 병합한다. 충돌이 나면 수정한다.

git push 명령으로 저장소에 반영한다.

git에서 stash 명령 사용하기

git으로 작업을 하다가 git flow init를 한것을 깜빡 잊고 그냥 작업을 하다가 생각이 나서 git flow init를 하면 오류가 난다.

git flow init 를 하려면 기존에 수정하던 사항들을 버려야되는데 그렇게 하지 않기 위해 git stash 를 사용한다.

git stash를 입력하면 지금 수정사항들이 모두 임시공간으로 들어가게 된다.

수정사항들이 임시공간으로 옮겨지면 작업을 하고 있던 working copy 가 깨끗한 상태가 된다. 이 상태에서git flow 작동을 하거나 혹은 git을 이용한 다른 작업을 모두 다 한 다음 git stash pop을 입력하면 아까 임시공간에 넣어둔 수정사항들이 다시 working copy에 반영이 된다.

현재 수정사항 떄문에 git의 다른 작업이 안될 때 유용하게 쓰일 수 있다.

git stash 에 대하여 잘 나와있는 글 : http://blog.outsider.ne.kr/788

SourceTree와 함께 Git과 git-flow 사용해보기

최근 회사에서 Subversion에서 Git으로 이전하고 있고 나 역시도 이제부터는 Git으로 옮겨가려는 생각이라 내 서버에 Git을 설치하고 사용해보기로 한다.

서버에는 yum으로 Git을 설치했다. 몇번의 시행착오끝에 방법을 알게되어 기록해놓는다.

서버에 저장소를 만들려면 다음의 순서를 따른다.

  1. 저장소 레포지토리를 만들 위치에 가서 mkdir로 디렉토리를 만든다. 일반적으로는 ‘프로젝트이름.git’을 사용하는듯하다.
  2. 만든 디렉토리롤 들어가서 ‘git init –bare’를 입력하여 초기화한다.

여기까지가 서버상의 설정이다. 물론 권한등을 더 설정해야할 수도 있다.

이제 SourceTree 어플리케이션을 사용해본다.

  1. SourceTree에서 저장소를 설정하여 연동한다.
  2. Git은 아무 파일도 없다면 master 브랜치가 생성되지 않는다고 한다. 로컬컴퓨터의 working copy 디렉토리에 touch 명령어로 빈파일을 하나 생성한다.
  3. SourceTree에 가서 commit을 한다.
  4. master 브랜치가 생성되을 것이므로 SourceTree의 git-flow 버튼을 눌러서 초기화하겠다는 창이 뜨면 OK를 눌러서 초기화한다.
  5. 이제 git-flow를 사용할 준비 완료.

몇번의 삽질 끝에 대략 이러한 과정을 거치면 된다는 것을 알았다. 나머지 레드마인과의 연동 등은 다음에 정리해보는 것으로.

CentOS에서 GIT 설치

회사의 형상관리시스템이 Subversion에서 GIT를 쓰기로 결정되어 GIT를 내 서버에 한번 설치해본다.

CentOS 6.4에서 yum으로 기본적인 패키지는 다 있을거란 가정하에 설치시작.

yum으로 설치하려 했으나 역시 공식 레포지토리에는 없다. 검색해보니 비공식 레포지토리를 이용해서 설치가 가능하긴하나 개인적으로 비공식 레포지토리는 EPEL을 제외하고는 좋아하지 않으므로 그냥 소스설치를 해보도록 한다. 페도라 EPEL에는 GIT가 있긴한데 그렇게 떙기진 않는다. ㅎㅎ

http://www.git-scm.com 에서 소스코드를 받아 압축을 푼다.

압축을 푼 후

make configure
 ./configure --prefix=/usr/local/git --with-openssl --with-libpcre --with-curl --with-expat --with-iconv --with-perl --with-python --with-zlib --with-tcltk
 make
 make install

하면 끝.

git라고 입력해보면 이제 git 명령이 잘 실행된다.