첫 번째 명령 이후에 종료하지 않고 배치 파일에서 여러 git 명령을 실행하려면 어떻게해야합니까?
계속해서 사용하는 일련의 GIT 명령을 배치 파일로 사용하여 너무 많이 반복하지 않도록 노력했습니다. 예를 들어, update_repo_branch.bat
로컬 리포지토리를 업데이트하고 분기를 원격 분기와 동기화하기 위해이 배치 파일을 호출 했습니다.
@echo off
if (% 1) == () goto end
if (% 2) == () goto end
cd % 1
git checkout % 2
git fetch origin
git merge oring / % 2
: end
게 으르는 것이 좋지만 GIT 명령이 완료되면 실행중인 모든 항목을 종료하기 위해 종료 플래그를 다시 보내는 것 같습니다 . 따라서 배치 파일을 사용하여 한 번에 모두 추출하는 것은 작동하지 않습니다. 이 문제를 해결하는 방법을 아십니까?
이것이 모든 Windows git 패키지에 해당하는지 확실하지 않지만 적어도 일부 git.cmd
는 실제 git 실행 파일 (예 :)을 감싸는 래퍼로 스크립트를 사용합니다 git.exe
. 따라서 배치 파일에서 git
명령을 사용할 때 Windows는 실제로 다른 배치 파일을 실행합니다.
안타깝게도 한 배치 파일이 다른 배치 파일을 호출하면 기본적으로 호출 된 배치 파일로 '점프'되어 반환되지 않습니다 (이는 고대 MS-DOS 명령 프로세서와의 호환성을위한 것입니다).
이 문제는 몇 가지 방법으로 해결할 수 있습니다.
명령을
git
사용하여 배치 파일에서 호출 하여 배치 파일call
을 실행하고git.cmd
다시 자신의 파일로 돌아갑니다.call git checkout %2 call git fetch origin rem etc...
배치 파일을 완전히 피하려면 확장명을
git
사용하여 배치 파일에서.exe
명시 적으로 호출 하십시오git.cmd
. 이것이 작동하려면 경로 및 기타 환경 변수가git.exe
예상 대로 설정되어 있는지 확인해야 할 수 있습니다 (git.cmd
msysgit에서 수행 되는 것처럼 보입니다 ).git.exe checkout %2 rem etc...
귀하의 예에서 볼 수 있듯이 실제로 로컬 브랜치 'branchname'을 origin / branchname과 동기화하려고합니다.
이를 위해 추가 스크립팅이 필요하지 않으며 git pull
시퀀스 대신 사용하면 됩니다.git checkout branchname; git fetch origin; git merge origin/branchname
git의 브랜치 추적과 그 이점에 대한 문서를 살펴보십시오.
일반적으로 다음과 같은 저장소 레이아웃이있는 경우 :
git branch -a
...
master
dev1
dev2
remotes/origin/master
remotes/origin/dev1
remotes/origin/dev2
그리고 dev1 및 dev2 브랜치는 origin / dev1 및 origin / dev2에 대한 브랜치를 이에 따라 추적하므로 저장소에서 실행하기 만하면됩니다.
git pull
이 명령은 모든 로컬 추적 분기를 원격 분기와 효과적으로 동기화합니다.
자세한 내용은 여기를 참조하십시오.
Git 원격 분기 및 추적 분기 (Progit Book)
msysGit을 Git 클라이언트로 사용한다고 가정하면 실제로 Bash 스크립트를 사용하고 싶을 수 있습니다. 다음과 같이 bash 함수를 ~/.bashrc
(~는 일반적으로 C : \ Users \- 여기 참조 ) 배치 할 수 있습니다.
update_repo_branch() {
if [ $# != "2" ]; then
echo "Usage: update_repo_branch REPO BRANCH" 1>&2
return 1
fi
cd $1
git checkout $2
git fetch origin
git merge origin/$2
}
그런 다음 update_repo_branch myrepo cool-branch
mysysGit 셸에서 실행할 수 있습니다 .
물론 cmd.exe에서는 액세스 할 수 없습니다. msysGit cygwin 셸에서만 사용할 수 있습니다.
ReferenceURL : https://stackoverflow.com/questions/5401229/how-do-i-execute-several-git-commands-in-a-batch-file-without-terminating-after
'developer tip' 카테고리의 다른 글
문자열에서 ASCII가 아닌 문자 제거 (0) | 2021.01.05 |
---|---|
문서에서 일부 필드를 제외하는 방법 (0) | 2021.01.05 |
앱으로 돌아갈 때 정적 변수 null (0) | 2020.12.31 |
Nuget repositories.config 파일은 무엇입니까? (0) | 2020.12.31 |
ASP.NET MVC에서 기본 JSON serializer 설정 (0) | 2020.12.31 |