2012-11-14 3 views
1

이전에 커밋 한 후에 적용됩니다. 소스의 버전 번호를 증가시키기 위해 사전 커밋 (pre-commit) 훅을 작성했습니다.이 커밋 된 후 변경 내용이 적용된 이유는 무엇입니까? ? 저지르기 전에 그 일을하기 위해 무엇을 할 수 있습니까?git pre-commit 코드 수정은

#!/bin/sh 
# Hook to increment version number before checkin 

REPO_DIR=$(cd `dirname $0`/../.. && pwd) 
VERS_FILE="${REPO_DIR}/version.php" 
CUR_DATE=`date -u '+%Y-%m-%d %H:%M:%S'` 
HOOK=`basename $0` 

if [ -w ${VERS_FILE} ]; then 
    # increment last digit of version string 
    perl -i -pe 's/(\$version\s?=\s?['\''|"][\d\.]+)(\d+)/"$1".($2+1)/e' "${VERS_FILE}" 
    RV=$? 
    if [ 0 -ne ${RV} ]; then 
     echo "ERROR: Updating version in ${VERS_FILE} failed" 
     exit $RV 
    fi 
    echo "INFO: Increment version in file ${VERS_FILE}" 
fi 

echo "Finish $HOOK at $CUR_DATE" 
exit 0 

이러한 자동 변경은 권장되지 않습니다. 그러나 기술적으로 이것은 어쨌든 가능해야합니다. 우분투 9.10에서 git 1.6.3.3을 사용하고 있습니다.

답변

1

사전 커밋 스크립트는 파일의 작업 트리 복사본을 수정하지만 인덱스의 버전은 수정하지 않습니다. 후자는 실제로 커밋됩니다.

파일을 수정 한 후 git add해야합니다. 하지만 이렇게하면 작업 트리에서 일부 변경 사항을 적용하려는 경우에도 모든 파일에 대한 모든 변경 사항이 모든 커밋에 포함됩니다.

+0

도움 주셔서 감사합니다. 스크립트의 마지막에'git add -u - "$ {VERS_FILE}" ''명령을 추가했습니다. 그러나 커밋 메시지에는 파일이 수정 된 것으로 표시되지 않습니다. – StackUnderflow

관련 문제