개발 Dev/깃 Git 11

셸 스크립트로 오래된 로컬 브랜치 한꺼번에 삭제하기

Git으로 작업을 하다보면 브랜치들이 점점 늘어난다. 일일이 삭제하려면 너무 번거롭다. 이럴 때 셸 스크립트Shell Script를 활용하면 한번에 지울 수 있다. 셸 스크립트 예시다.아래 셸 스크립트를 실행하면 브랜치가 한꺼번에 삭제된다.#!/bin/bashPREFIX_FEATURE="feature/"PREFIX_BUGFIX="bugfix/"PREFIX_RELEASE="release/"branches=`git branch -a`for b in $branchesdo if [[ "$b" == "$PREFIX_FEATURE"* ]] || [[ "$b" == "$PREFIX_BUGFIX"* ]]|| [[ "$b" == "$PREFIX_RELEASE"* ]] then echo $b git branch -D ..

개발 Dev/깃 Git 2024.05.18

gitlab에 있는 저장소를 github로 커밋 포함 전체 복사하기

코드 복사가 필요한 상황Git으로 관리하는 코드를 이 서비스에서 저 서비스로 옮겨야 할 때가 있다예를 들어서 gitlab에 있는 저장소를 github로 옮기고 싶다. 이 때 gitlab 코드를 내려 받고, github에 저장소를 만들고 내려 받은 코드를 복사한 뒤에 새로 커밋하면 기존 커밋 이력이 다 날라간다. 커밋 이력을 포함해서 복사하고 싶다면이때는 remote url을 변경해야 한다. 아래 명령어를 사용해야 한다.$ git remote set-url origin GitHub-저장소-URL 작업 순서 1. 우선 gitlab 저장소를 clone 한다.$ git clone https://gitlab.com/사용자명/저장소명.git 2. github에 저장소를 새로 만든다. 3. 원격 저장소 url을 변경..

개발 Dev/깃 Git 2024.05.15

Q. 깃허브github에서 깃플로git-flow와 스쿼시와 병합Squash and merge을 함께 쓰면 안 되는 이유는?

A. release 브랜치에서 main 브랜치로 PR(Pull Request) 요청할 때마다 충돌이 발생한다. 스쿼시와 병합Squash and merge이란?여러 커밋을 하나의 커밋으로 밀어넣어서(squash) 병합(merge)해주는 기능이다. 예를 들어서 feature 브랜치에서 develop 브랜치로 PR을 만들었다고 하자. feature 브랜치에서 작업한 커밋이 10개다. 스쿼시와 병합 기능을 쓰면 단 1개의 커밋으로 10개의 커밋이 합쳐져서 develop에 병합된다. 그래서 커밋 이력이 깔끔해진다. 충돌 예시 add hello title, add hello text란 두 커밋을 하고 feature/add_hello 브랜치에서 develop으로 PR을 만든 경우다. Squash and merge한 ..

개발 Dev/깃 Git 2023.10.11

깃모지gitmoji를 표로 한눈에 정리!

깃모지gitmoji란? Carlos Cuesta가 정리한 깃Git용 이모티콘이다. 커밋 메시지 맨 앞에 이모티콘을 사용한다. 아래 예를 보면 📄 Update LICENSE라고 커밋 메시지를 쓴 게 예이다. 깃모지 표 이모티콘 이모티콘 예약어 영어 뜻 한국어 번역 🎨 :art: Improve structure / format of the code. 구조 / 코드 포맷 개선 ⚡️ :zap: Improve performance. 성능 개선 🔥 :fire: Remove code or files. 코드나 파일 제거 🐛 :bug: Fix a bug. 버그 수정 🚑️ :ambulance: Critical hotfix. 긴급한 수정(핫픽스) ✨ :sparkles: Introduce new features. 새로운 기능..

개발 Dev/깃 Git 2023.10.03

Q. git-flow란? git-flow 활용 방법은?

A. git-flow는 Vincent Driessen이 제안한 깃git 브랜치 활용 모델로 많은 기업들에서 활용하고 있다. Vincent Driessen의 블로그 글 A successful Git branching model에 자세한 설명이 나온다. 주 브랜치(the main branches) gitflow의 주 브랜치는 master와 develop 브랜치다. 원문을 살펴보자. The central repo holds two main branches with an infinite lifetime: master develop The master branch at origin should be familiar to every Git user. Parallel to the master branch, anoth..

개발 Dev/깃 Git 2023.07.31

깃허브 커밋 메시지에서 특정 단어로 검색해서 엑셀 파일로 만들기

배경 팀 내에서, 코드 리뷰를 통해서 커밋을 한 경우 리뷰어의 이름을 커밋 메시지에 반드시 적기로 했다. 예를 들면 taptorestart란 사람이 리뷰를 했다면 커밋 메시지에 "taptorestart 리뷰 반영"이라고 적기로 한 것이다. taptorestart의 리뷰가 반영된 커밋수를 확인하려면 어떻게 해야 할까? 해결방법 git log 명령어로 커밋 메시지에 특정 단어가 들어 있는 커밋을 검색할 수 있다. 예를 들어 git log --grep="flask"라고 검색하면 아래처럼 나오는 것을 볼 수 있다. 매번 일일이 이렇게 확인할 수는 없다. 위 검색 결과를 엑셀로 만들고 싶다면? pandas를 활용해서 액셀 파일로 정리해서 만들 수 있다. 작업 코드 예다. import os import shutil..

개발 Dev/깃 Git 2023.06.17

Q. 깃허브Github 위키Wiki를 로컬에서 Git clone해서 수정할 수 있을까?

A. 수정할 수 있다! 위키 페이지를 가서 보면 Clone this wiki locally라고 적혀 있는 것을 볼 수 있다. https://github.com/taptorestart/wiki.wiki.git 네 깃허브 위키 clone을 위한 주소 예다. 잘 보면 taptorestart/wiki.wiki.git이니 계정명/저장소명.wiki.git이란 것을 알 수 있다. 로컬에서 아래 명령어처럼 입력하면 클론이 된다. $ git clone https://github.com/taptorestart/wiki.wiki.git 수정 작업을 한 뒤에 커밋하고 푸시하면 깃허브에도 반영이 된다. PR은 지원되지 않는다. 로컬에서 하면 이미지나 파일 추가도 다른 곳에 올리지 않고 위키 내에 올려서 쉽게 할 수 있다. wi..

개발 Dev/깃 Git 2022.12.23

Q. fork한 github 저장소 브랜치들을 하나만 남기고 일괄 삭제하고 싶다면?

A. shell script를 사용한다. 아래 파일을 내려 받는다. fork한 저장소 디렉터리에 복사한다. $ sh ./remove_branches_except_mine.sh 를 실행하면 브랜치가 모두 삭제된다. 위험하니 꼭 테스트 저장소를 만든 뒤에 해보기를 권한다. #!/bin/bash # 남겨둘 브랜치명 예)dev MY_BRANCH="/dev" SUB="remotes/origin/" branches=`git branch -a` for b in $branches do if [[ "$b" == *"$SUB"* ]] && [[ "$b" != *"$MY_BRANCH" ]] && [[ "$b" != *"main"* ]] then echo $b git push origin --delete ${b/${SUB}/..

개발 Dev/깃 Git 2022.04.03

Q. github에 push해서 데이터베이스 계정과 비밀번호가 노출되었다면 어떻게 해야 할까?

A. git reset --hard {commithash} 하고 나서 git push --force origin 하면 된다. 앗! 비밀번호를 그대로 올린 것을 발견했다. git reset --hard b0ce9e5a10c5f93ec619083db05d6dbd3776d261 위 명령어로 b0ce9e5로 시작하는 Create .gitignore로 reset을 한다. 그렇게 하면 Create .gitignore 다음에 커밋한 내용은 사라지게 된다. 그리고 강제로 push를 한다. --force를 붙여야만 된다. git push --force origin 위 명령어를 깃허브 데스크탑 같은 클라이언트 프로그램을 쓰지 않고 터미널에서 하게 된다면 Username for 'https://github.com': tap..

개발 Dev/깃 Git 2022.02.24

좋은 커밋, 좋은 커밋 메시지Git commit message는 어떤 것일까?

깃Git을 쓰고 커밋commit을 할 때 메시지를 적는다. 메시지를 어떻게 적어야 할까? 커밋 메시지는 훌륭한 협업자를 판단하는 기준 "a commit message shows whether a developer is a good collaborator." - Peter Hutterer. (출처: On commit messages) "커밋 메시지는 개발자가 훌륭한 협업자인지 여부를 보여준다." 말로 훌륭한 협업자라고 주장해봤자 의미는 없다. 언제나 말보다 실제가 중요하니까. 결국 커밋 메시지를 잘 적어야 다른 사람들에게 훌륭한 협업자로 인정받을 수 있게 된다. Peter Hutterer의 주장을 좀 더 살펴보자. (출처: On commit messages) A good commit message shou..

개발 Dev/깃 Git 2021.03.11

git에 이미 추가했던 파일을 더 이상 추적하지 않아 저장소에 저장되지 않도록 하면서, 파일은 남겨 두고 싶다면?

git -rm 을 사용하면 된다 예를 들어 app.yaml 파일이 이미 git에 추가된 상태이다. app.yaml 파일을 삭제하지 않고 남겨 두면서 git에서 추적되지 않게 하고 싶다. .gitignore 파일에 뒤늦게 app.yaml을 추가해도 이미 추가했던 파일이면 적용되지 않는다. 1) git -rm app.yaml 이렇게 하면 app.yaml 파일이 삭제된다. 2) git -rm --cached app.yaml 이렇게 하면 app.yaml 파일이 삭제되지 않고 남아 있다. 더 이상 git에서 추적되지 않게 된다. --cached Use this option to unstage and remove paths only from the index. Working tree files, whether mo..

개발 Dev/깃 Git 2021.01.27