Git 저장소에 bash 스크립트가 있습니다. git pull
내부 스크립트를 사용하여 업데이트합니다. 하지만 가끔 스크립트 자체를 변경하면 실행 중에 변경되었기 때문에 전체 스크립트가 충돌하는 경우가 있습니다. 이 파일을 업데이트하고 싶지만 실행 중에는 업데이트할 수 없습니다.
어떻게 해야 하나요?
답변1
일반적인 방법
이런 종류의 문제를 해결하는 일반적인 방법 중 하나는 두 가지 버전의 스크립트(실행용과 저장소에 저장용)를 사용하는 것입니다. 웹에서 스크립트를 다운로드한 경우에도 모든 버전 제어 시스템에서 작동합니다.
예를 들어 다음을 수행할 수 있습니다 update.sh.in
(저장소에 추가).
#!/bin/bash
git pull
if [ update.sh.in -nt update.sh ]; then cp update.sh.in update.sh; fi
# actual work of the script
# any line here can be changed in the next version of the script
파일을 수동으로 복사하여 에 update.sh
포함시킵니다 .gitignore
.update.sh
여기서 중요한 점은 처음 세 줄을 수정해서는 안 된다는 것입니다. .sh.in
복사본이 .sh
스크립트의 동일한 위치에 유지되는 한 아무런 문제 없이 실행됩니다.
이 .in
확장은 템플릿 파일에서 실제 스크립트나 소스 코드를 생성하는 다양한 도구에 대한 전통적인 확장입니다.
자식 후크
일반적이지만 덜 일반적인 또 다른 방법은 git Hooks를 사용하는 것입니다. 이는 GIT 관련 방법입니다. 다른 스크립트를 작성하여 .git/hooks
디렉토리 에 넣을 수 있습니다 . Git은 다양한 실행 지점에서 이러한 스크립트를 호출합니다.
그 이상으로 무엇을 해야 하는지 지정하지 않았습니다 git pull
. 하지만 어쩌면 당신은 당신의 특별한 직업을 .git/hooks/pre-rebase
또는 에 넣을 수도 있습니다 .git/hook/post-merge
. 자동으로 호출됩니다 git pull
.
전체 후크 목록을 보려면 여기를 읽어보세요.https://git-scm.com/docs/githooks