티스토리 뷰
[ 단축어 만들고 싶은 이유 ]
깃헙 > Setting > Options에 보면
머지될 때 해당 브랜치를 지워주는 기능을 설정할 수 있습니다.
이는 원격 브랜치를 지워주는 기능으로
로컬 브랜치는 알아서 지워줘야합니다.
머지된 로컬 브랜치를 파악해서 스스로 지워주는 일이 귀찮을 때,
머지된 로컬 브랜치를 전부 지워주는 git 명령어를 쓸 수 있습니다. (새로운 로컬브랜치나 아직 머지되지 않은 로컬브랜치는 안지움)
develop에 머지된 로컬 브랜치들을 삭제해주는 명령어입니다. (참고: local/remote/merged 브랜치 목록 조회 명령어)
git branch -d $(git branch --merge develop | grep -i -v -E "master|develop")
주기적으로 이 명령어를 돌릴 수 있는
crontab을 적용하기도 귀찮고,,,하여
가장 간단한 단축어로 만들어보기로 합니다.
[ 스크립트 만들기 ]
우선 스크립트를 만들어주겠습니다.
파일명은 delete-local-branch-already-merged-into-develop.py 로 하였습니다.
코드 설명은 아래와 같습니다.
## 1.
git_repo_directory_list에 이 스크립트를 적용할 깃헙 레포의 디렉토리 들을 넣어줍니다.
git_repo_directory_list = [
'~~~~/MyApp1',
'~~~~/MyApp2'
]
## 2.
os.chdir로 해당 디렉토리로 이동합니다.
## 3.
os.system('git checkout develop')
os.system('git pull')
develop으로 체크아웃하고 pull 받습니다.
## 4.
아래의 문법으로 명령어를 쳐서 출력되는 output을 변수에 담을 수 있습니다.
variable = os.popen('커맨드 명령어').read()
이렇게 하고 출력해보면 (참고: grep 명령어)
merged_branch_list = os.popen('git branch --merge develop | grep -i -v -E "master|develop"').read()
print(merged_branch_list)
아래와 같이 앞에 space가 좀 있는 채로 목록이 출력됩니다.
더 명확하게 보고 싶으면 line별로 나눠서 list를 만들어주는 .splitlines() 을 적용해서 확인해봐도 됩니다.
merged_branch_list = os.popen('git branch --merge develop | grep -i -v -E "master|develop"').read()
print(merged_branch_list.splitlines())
그러므로 자동으로 \n 과 space에 따라 split하여 list를 만들어주는 split()을 적용해줍니다.
merged_branch_list = os.popen('git branch --merge develop | grep -i -v -E "master|develop"').read().split()
print(merged_branch_list)
## 5.
위에서 구한 리스트를 string으로 join해줍니다.
merged_branch_list_str = " ".join(merged_branch_list)
print(merged_branch_list_str)
## 6.
머지된 브랜치가 없을 때 merged_branch_list가 empty여서 merged_branch_list_str은 empty string입니다.
git branch -d 명령어는 뒤에 브랜치를 안적어주면 아래와 같은 에러를 일으킵니다.
"fatal: branch name required"
그러므로 emtpy 일 때는 해당 명령어가 실행되지 않도록 해줍니다.
if len(merged_branch_list) == 0:
continue
## 7.
마지막으로 브랜치 삭제 명령어를 실행시켜주면 끝!
os.system('git branch -d %s' % merged_branch_list_str)
[ 단축어 만들기 ]
Automator 앱을 열고 빠른 동작을 선택해줍니다.
작업흐름 수신을 입력없음으로 설정해주고
셀 스크립트 실행을 추가해줍니다.
그리고 python이라고 쳐줍니다.
스크립트 파일을 끌어오면 path가 입력됩니다. (당연히 path를 직접 타이핑 해줘도 됩니다..!)
이렇게 단축어를 완성했습니다!
이제 Command + S 눌러서 저장해줍니다.
동작이름은 Delete Local Branch Merged Into Develop로 해줬습니다.
여기 저장되었습니다..!
[ 단축어 Finder에 등록하기 ]
설정 > 키보드 > 단축키에 들어가주세요
아까 만들었던 단축어가 있습니다.
control 키 누르고 선택해주면
목록이 나옵니다.
여기서 'Finder에서 보기' 를 눌러줍니다.
잘 추가되었습니다..!
[ Finder 접근 권한 설정 ]
서비스에 추가된 단축어를 실행시켜보면 에러 팝업이 뜹니다.
can't open file '/Users/kakao/Desktop/delete-local-branch-already-merged-into-develop.py':
[Errno 1] Operation not permitted’
How to Fix Automator's "Operation Not Permitted" Error in macOS Catalina 글을 보고 따라해줍니다.
설정 > 보안 및 개인 정보 보호 > 전체 디스크 접근권한 에 들어가서
+ 누르고 Finder를 선택
여기 Finder가 추가되었는 지 확인
이제 다시 단축어를 실행해보면 에러안나고 잘되는 것을 확인할 수 있습니다!
-----------------
base 를 세팅하고 싶을 때 스크립트
import os
git_repo_directory_list = [
...
]
base = "release/v5.0.0" # "develop"
for directory in git_repo_directory_list:
os.chdir(directory)
os.system(f'git checkout {base}')
os.system('git pull')
merged_branch_list = os.popen(f'git branch --merged | grep -v {base} | grep -v "develop" | grep -v "master"').read().split()
merged_branch_list_str = " ".join(merged_branch_list)
if len(merged_branch_list) == 0:
continue
os.system(f'git branch -d {merged_branch_list_str}')
'🍏 > MacOS' 카테고리의 다른 글
[MacOS] dmg파일을 만들어서 맥 앱 배포하기 (0) | 2021.03.12 |
---|---|
[MacOS] Custom 폰트를 쓰려면 info.plist에ATSApplicationFontsPath를 추가하자 (0) | 2020.09.03 |
[Automator] DerivedData 폴더 지우는 단축어 만들기 (0) | 2020.08.10 |
- Total
- Today
- Yesterday
- Flutter Spacer
- Django Heroku Scheduler
- Flutter getter setter
- Dart Factory
- flutter deep link
- Django Firebase Cloud Messaging
- Sketch 누끼
- Flutter Text Gradient
- flutter build mode
- SerializerMethodField
- 플러터 싱글톤
- PencilKit
- 플러터 얼럿
- Flutter 로딩
- github actions
- METAL
- ipad multitasking
- Flutter Clipboard
- cocoapod
- Python Type Hint
- DRF APIException
- flutter 앱 출시
- drf custom error
- flutter dynamic link
- Watch App for iOS App vs Watch App
- 장고 Custom Management Command
- 장고 URL querystring
- Django FCM
- ribs
- 구글 Geocoding API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |