[리눅스/윈도] git fetch, pull 응용 스크립트
2023. 5. 6. 18:35ㆍ버전관리 및 빌드/Git
작성일 : 2021. 9. 15.
프로젝트 디렉토리 구조가 다음과 같을 때
각각의 디렉토리로 들어가서 git fetch && git pull 을 실행하는 스크립트다.
로컬 브랜치마다 업데이트를 하고 보여줘야 하기 때문에 git branch 명령도 활용한다.
최상위 디렉토리 (Workspace) | 하위 프로젝트 디렉토리 | 비고 |
/mnt/d/backend | ||
/repoPrj0 | .git 존재 | |
/repoPrj1 | .git 존재 | |
/repoPrj2 | .git 존재 |
굳이 IDE 에서 마우스로 연속된 클릭 동작으로 안하고 힘들게 하냐고 묻는 사람이 있다.
하지만, 한 번에 처리하는 게 편하거든. VsCode 띄워놓고 [새로 고침], [Pull], ... 언제 다 누르냐고, 그것도 성가시게 프로젝트마다 눌러가면서 말이지.
사용법)
상위 디렉토리에서 전체 프로젝트에 대한 최신 커밋을 받아올 때:
[/mnt/d/backend]$ git_pull.sh
************** repoPrj0
* dev -> 이미 업데이트 되어 있습니다.
************** repoPrj1
dev -> 이미 업데이트 되어 있습니다.
* newDev -> example.vue !@#$%^... Updating
oldWork -> example.vue !@#$%^... Updating
************** repoPrj2
* dev -> 이미 업데이트 되어 있습니다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
프로젝트 1건에 대해서 실행할 때:
[/mnt/d/backend/repoPrj2]$ git_pull.sh
************** repoPrj2
* dev -> 이미 업데이트 되어 있습니다.
스크립트 소스)
#!/bin/bash
# Copyright [2021] [한정훈 & blog.daum.net/debianizer & 종이와 쉼터]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------------------------------
# 본 BASH 스크립트는 아파치 라이선스 버전 2.0(라이선스)에 따라 라이선스가 부여됩니다.
# 라이선스를 준수하지 않는 한 이 파일을 사용할 수 없습니다.
# 다음에서 라이선스 사본을 얻을 수 있습니다.
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# 관련 법률에서 요구하거나 서면으로 동의하지 않는 한 소프트웨어
# 라이선스에 따라 배포되는 것은 "있는 그대로" 배포되며,
# 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건도 제공하지 않습니다.
# 라이선스에 따른 권한 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하십시오.
#
# 퍼갈 때는 출처를 남겨주십시오.
PREV=''
BRAN=''
prev() {
# cd 명령으로 프로젝트 디렉토리마다 들어가기 때문에 pull 동작을 마친 후에는
# 처음 시행한 위치를 알고 있어야 한다.
PREV=$(git branch | grep '^*' | sed 's/* //')
}
branch() {
# 로컬 브랜치를 모두 가져와서 배열에 담는다.
# 활성화된 브랜치 앞에는 '* ' 가 붙기 때문에 sed 명령으로 끄트머리를 삭제한다.
BRAN=$(git branch | sed 's/* //')
}
work() {
prev
branch
for i in ${BRAN[@]};do
git checkout $i --quiet; # '--quiet' 인자를 붙여서 자잘한 메시지 출력을 막는다.
git fetch --quiet;
if [ $i == $PREV ];then
# 기존 작업 중이던 브랜치 앞에 '* ' 를 붙인다.
git pull | xargs echo '* '$i' -> ' -;
else
git pull | xargs echo $i' -> ' -;
fi
done
git checkout $PREV --quiet
}
reset_exit() {
unset PREV
unset BRAN
exit 0
}
# 본 스크립트를 실행한 위치에 .git 이 들어 있으면 해당 경로에 대해서만 작업한다.
if [ -d ".git" ];then
work
reset_exit
else
# '.git' 밖에서 실행하는 경우, 각각의 프로젝트 디렉토리마다 들어가서 일괄작업을 한다.
PRJ_DIR=$(find . -maxdepth 1 -type d -name 'repoPrj*' | sed 's/.\///g')
for i in ${PRJ_DIR[@]};do
cd $i
echo -e '********************** '$i
work
cd ..
echo -e '\n'
done
reset_exit
fi
'버전관리 및 빌드 > Git' 카테고리의 다른 글
[윈도] Git Bash - git status 한글깨짐 방지 (0) | 2023.07.03 |
---|---|
[리눅스/윈도] git branch, checkout 응용 스크립트 (0) | 2023.05.06 |
[리눅스/윈도] git clone 응용 스크립트 (0) | 2023.05.06 |