많은 하위 프로젝트가 저장된 SVN 저장소가 있습니다. 지금은 post-commit
컴퓨터의 가능한 모든 폴더를 반복하고 svn update
각각에서 실행합니다.
REPOS="$1"
REV="$2"
DIRS=("/path/to/local/copy/firstproject" "/path/to/local/copy/anotherproject" ... "/path/to/local/copy/spam")
LOGNAME=`/usr/bin/whoami`
for DIR in ${DIRS[@]}
do
cd $DIR
sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done
문제는 프로젝트 중 하나의 하위 폴더를 커밋할 때 이것이 느리고 중복된다는 것입니다. 어떤 DIRS를 사용해야 하는지 식별하는 더 좋은 방법이 있는지 궁금합니다.오직그걸 업데이트하세요.
이를 수행할 수 있는 방법이 있습니까? 내가 아는 한, 저장소의 어느 부분이 커밋되었는지, 따라서 어떤 디렉터리를 업데이트해야 하는지 확인할 방법이 없습니다.
각 프로젝트마다 별도의 저장소를 만드는 유일한 대안이 있습니까? (아마 처음부터 그랬어야 했는데, 그렇다면...)
답변1
어떤 DIRS를 사용해야 하는지 식별하고 해당 DIRS만 업데이트하는 더 좋은 방법이 있는지 궁금합니다.
svnlook dirs-changed
당신이 찾고 있는 것이 바로 이것입니다:
# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar
다음과 같이 시도해 보세요.
#!/usr/local/bash4/bin/bash
typeset -A IP
typeset -A DOCROOT
PROJECTS="project1 project2"
IP=([project1]="ip1" [project2]="ip2")
DOCROOT=([project1]="/var/www/html/project1/" [project2]="/var/www/html/project2/")
REPO="$1"
REV="$2"
USER='deployer'
PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`
ssh -t "$USER@${IP[$PROJECT]}" "cd ${DOCROOT[$PROJECT]} && svn up"
답변2
Quanta의 도움을 바탕으로 제가 사용한 스크립트는 다음과 같습니다.
REPO="$1"
REV="$2"
declare -A PROJECTS
PROJECTS=(\
[project1]="/path/to/projects/project1 /path/to/projects/project1-devel" \
[project2]="/path/to/projects/project2 /path/to/projects/project2-devel" \
[project3]="/path/to/projects/project3 /path/to/projects/project3-devel" \
)
PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`
DIRS=${PROJECTS[$PROJECT]}
for DIR in $DIRS
do
cd $DIR
sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done
제가 추가해야 했던 가장 큰 것은 라인이었습니다 declare -A PROJECTS
. 어떤 이유에서인지 연관 배열/해시는 제가 이 작업을 수행할 때까지 작동하지 않습니다.