git remote prune origin
명령어는 로컬 브랜치를 덩달아 삭제해주지 않는다. 그래서 날을 잡아 일일이 리모트에 없는 로컬 브랜치들을 삭제했었다.
매우 불편했다.
그래서 방법을 찾아보았다.
리눅스 파이프 연산자와 grep 문법, xargs 문법을 활용하면 이 작업을 한 번에 수행할 수 있다.
git remote prune origin && git branch -vv | grep ': gone]'| awk '{print $1}' | xargs git branch -D
git remote prune origin
- 리모트 브랜치를 업데이트
&&
이전명령어가 성공했을 때, 다음 명령어를 순차로 실행,복수개의 깃 명령을 연결할 수 있다. (명령어들이 독립적으로 실행됨)
|
파이프 연산자 - 이전 명령어 실행의 결과를 가지고 이후 명령어를 적용시킴
git branch -vv
- 브랜치
grep 문자열
- 문자열에 매칭되는 결과를 출력
grep -v 문자열
- 문자열에 매칭되는 결과는 제외한 결과들을 출력
xargs 명령어
- 앞선 출력결과들에 명령어를 각자 적용함 (Array.map 같은 역할)
git branch -D
- 브랜치를 삭제
awk
awk는 기본적으로 입력 데이터를 라인(line) 단위의 레코드(Record)로 인식합니다. 그리고 각 레코드에 들어 있는 텍스트는 공백 문자(space, tab)로 구분된 필드(Field)들로 분류되는데요. 이렇게 식별된 레코드 및 필드의 값들은 awk 프로그램에 의해 패턴 매칭 및 다양한 액션의 파라미터로 사용됩니다. (참고로, 레코드 구분 문자(newline)와 필드 구분 문자(space, tab)는 awk 프로그램 옵션으로 변경할 수 있습니다.) - 출처: https://recipes4dev.tistory.com/171
awk
명령어에서 ${0}이 레코드 전체, ${n}은 n 번째 필드이다. 각 필드는 공백으로 구분되어 있다.
feat/#1-signin-signup 7af528a [origin/feat/#1-signin-signup] feat: 로그인/회원가입 - Assignment 1 - validate Email and Password (#3)
위 레코드에서 ${1}필드에 해당하는 값은 "feat/#1-signin-signup", 즉 브랜치 이름이다. 입력 데이터들을 ${1}만 포함시켜서 출력하게 되겠다.
srcipts 객체에
prune_local : "echo git remote prune origin && git branch -vv | grep ': gone]'| awk '{print $1}' | xargs git branch -D"
키:값 쌍을 추가해주자.
awk 명령어 - https://recipes4dev.tistory.com/171
&& 연산자 - https://opentutorials.org/module/2538/15818
https://stackoverflow.com/questions/7726949/remove-tracking-branches-no-longer-on-remote
잘 정리된 포스팅 잘 보고 갑니다🍀