목록Git (12)
오늘도 한 뼘 더

# 배경 작업 중인 디렉터리에서 git을 사용하려고 하는데 에러가 발생했다. # 문제 git status 명령어를 실행시키는데 다음과 같은 에러가 나타났다. $ git status > fatal: detected dubious ownership in repository at 위의 문제는 Git의 보안 이슈로 인해서 해당 경로가 차단돼서 나타나는 문제라고 한다. # 해결 방법 다음 명령어를 통해서 해당 경로를 안전 경로로 등록을 해주면 된다. $ git config --global --add safe.directory [directory path]

# 배경 개발자가 작성한 테스트 코드를 돌리고 나서 결과에 따라서 GitLab에서 바로 Merge가 되지 않았으면 한다는 요구 조건이 있었다. 이전에 테스트 코드 실행은 GitLab에서 Merge Request가 열리면 Webhook을 통해서 Jenkins에서 테스트 코드가 실행되었다. 위의 요구 조건을 실행하기 위해서 GitLab의 CI/CD 툴을 사용하기로 하였다. # .gitlab-ci.yaml gitlab ci/cd의 경우 레포지토리에 .gitlab-ci.yaml 파일을 포함하고 있으면 자동으로 pipeline이 실행이 된다. gitlab repository > Settings > CI/CD에 들어가면 변수 세팅을 할 수 있다. 변수를 세팅할 때 Protected로 변수를 설정할 경우 Protec..

# 배경 git repository를 pull 하거나 push 할 때마다 username과 password를 입력해야 하는 번거로움이 있다. 한번 설정하고 나면 물어보지 않았으면 좋겠다. 저장하는 방법을 찾아보도록 한다. # 저장 방법 다음 명령어를 통해 git 설정에 추가한다. git config (--global) credential.helper store 이후 push나 pull 할 때 username과 password를 입력하고 나면 저장이 되어 그 이후에 더 이상 입력을 해야 할 필요가 없다.

# 배경 회사에서 GitLab을 사용 중이었는 데 사용한 가장 큰 이유는 무료로 사용이 가능해서였다. 그러다가 업그레이드를 하지 않으면 읽기 전용으로만 사용 가능하다는 알림을 받게 되었다. 5명을 초과하는 인원의 contributor를 무료 버전에서는 지원하지 않는다는 내용이었다. 그래서, 자체 관리형 gitlab을 알게 되었고 직접 GitLab 서버를 설치해서 진행해보고자 한다. # GitLab 이미지 https://hub.docker.com/u/gitlab Docker hub.docker.com GitLab 이미지는 gitlab-ee(Enterprise Edition)과 gitlab-ce(Community Edtion) 두 가지로 제공이 된다. 두 이미지는 기능이 거의 같지만 EE 버전에서 추가로 제..

# 배경 로컬에서 git 코드를 pull 받는 중에 다음과 같은 에러가 발생하였다. Unlink of file failed. Should I try again? # 문제 원인 찾아본 결과 이 문제는 해당 파일이 다른 프로그램에서 사용이 되고 있어 브랜치를 변경하는 과정에서 이 파일을 변경하거나 옮기지 못하게 git에서 보호를 하는 것이라고 하였다. 실제로 pull을 받기 전에 브랜치를 변경하는 작업을 진행하고 있었다. # 해결 방법 'y'를 누르면 해결이 된다는 글도 있었는데 'y'를 눌렀을 때에는 계속에서 다른 파일에 대한 해당 에러가 발생하였다. Ctrl + C로 해당 명령어를 중지하고 다시 pull을 받았다. git pull origin main 다시 pull을 받으니 정상 작동 완료!

# 배경 회사에서 새로운 프로젝트를 만들었는데 gitignore 파일이 제대로 먹히지 않고 gitignore 파일 안에 지정한 파일이 git으로 올라가는 문제가 발생했다. # 문제 및 해결 방법 gitignore에 설정하는 파일은 파일을 만들기 전에 미리 gitignore에 작성을 해야 정상적으로 작동함을 확인했다. 아래 파일을 git에 올리지 않도록 하고 싶었는데 제대로 동작하지 않았다. .idea/workspace.xml 해당 파일을 삭제한뒤에 위 코드를 작성하고 git push를 하면 정상적으로 해당 파일이 올라가지 않음을 확인했다.

로컬에서 작업을 하다가 코드를 pull 받았을 때 pull 받으려고 하는 코드와 작업 중인 코드의 순서가 불분명할 경우 conflict이 난다. 즉, 같은 파일의 같은 줄에 서로 다른 코드가 작성되어 있을 경우 어떤 코드가 반영되어야 하는지 불분명해 이런 conflict이 발생한다. # Conflict 해결 방법 1. 밑의 두 가지 방법을 사용해서 먼저 접근한다. Git > Rebase > Resolve Conflcts Git > Resolve Conflicts 2. Merge 클릭 Accept Yours 로컬에 있는 코드를 받아들이겠다는 뜻이다. Conflict이 난 상황에서 본인이 수정한 코드를 먼저 받아들여서 로컬 창에 본인이 수정한 코드만 남게 된다. Accept Theris GitLab에 올라가..

# SSH 키 생성 2021.04.30 - [DevOps & Infra/OS] - [Ubuntu] SSH 키 생성하기 # Git Hub에 SSH 설정하기 1) Profile > Settings 클릭 2) SSH and GPG keys 3) New SSH Key > rsa.pub 키를 복사해서 붙여 넣는다. # SSH 키 테스트 ssh -T git@github.com

# 배경 회사에서 사용 중인 Git 프로젝트에 불필요한 git branch가 너무 많이 쌓여서 이를 삭제하기로 하였는데 직접 git lab에서 삭제를 하기에는 하나하나 지워줘야 하는 불편함이 있어 로컬에서 한 번에 삭제하는 방법을 찾았다. # Git 원격 브랜치 조회하기 - 원격 브랜치를 조회한다. (이때, 로컬에서 원격으로 push 한 브랜치만 조회가 된다.) $ git branch -r - 원격의 모든 브랜치를 조회하는방법 $ git fetch --all // 원격 브랜치를 가져오기 $ git branch -r - 존재하지 않는 원격 브랜치 삭제하기 $ git fetch -p upstream # Git 원격 브랜치 삭제하기 - 브랜치 하나 삭제하기 $ git push origin --delete or..

# 배경 회사 업무를 진행하다 보면 배포 시기가 서로 다른 업무들이 있다. 이런 경우 전체 브랜치를 운영 브랜치로 올릴 수 없기 때문에 원하는 commit만 merge하는 방법이 필요하다. 이 때, cherry pick을 사용한다. # Cherry-Pick git log를 통해 체리픽하고자 하는 commit ID를 확인한다. git log --pretty=oneline 체리픽을 할 브랜치를 하나 체크아웃 한다. git checkout -b {cherry-pick-issueNO.} commit ID로 체리픽을 한다. git cherry-pick {$git commit ID} 체리픽을 진행한 브랜치를 푸쉬한다. git push origin {cherry-pick-issue#}