'형상관리/VCS'에 해당되는 글 2건

  1. 2017.01.09 Git 사용중 Not a git repository 에러
  2. 2017.01.04 SVN 커밋 로그 검사

submodule을 사용하는 Git 사용 중에 아래와 같은 에러가 발생하였다.


$ git status

fatal: Not a git repository: /path/to/project/.git/modules/modules/common


구글에 검색 결과 원인은 없고, 해결방법만 나와 있었다.

해결방법은 프로젝트 디렉터리의 ".git"를 삭제하고 git init 명령어를 실행하라는 것이었다.

이렇게 하니 위의 에러는 없어졌지만 git remote -v 한 결과 원격저장소 내용이 다 사라졌다.

다른 설정들도 지워졌으리라 생각된다.


다시 git clone으로 프로젝트를 받아서 해결하였지만 원인이 궁금하였다.

해당 프로젝트 상위의 다른 프로젝트에서도 같은 에러가 발생하였다.

에러가 발생한 저장소를 백업하고 git clone로  같은 프로젝트를 받은 후 diff -r로 비교해보았다.


그러자 원인을 알것 같다.

몇 일 전 디렉터리를 정리하느라 소스가 있는 디렉터리의 상위 디렉터리 이름을 변경한 적이 있다.

diff했더니 변경되기 전 경로로 .git내의 파일들에 기록이 되어있었다.


/path/from/project/.git -> /path/to/project/.git


다른 원인도 있을 수 있겠으나 위와 같은 경우

원인을 알았으니 소스의 상위 디렉터리 경로를 마음대로 바꾸는 일은 없길 바란다.

변경하였으면 git clone으로 새로 받기를 바란다.


우분투 12.04에서 사용 중인 git 버전은 다음과 같다.

$ git --version

git version 1.7.9.5

'형상관리 > VCS' 카테고리의 다른 글

SVN 커밋 로그 검사  (0) 2017.01.04
Posted by dcmru
,

유지보수 관리를 위해 SVN의 커밋 로그 포맷을 정하여 사용 중이었다.

모두 잘지켜주었으면 좋겠지만 개발에 열정을 모두 쏟아 부은 결과(?) 커밋 로그를 대충 써버리는 사태에 당도하였다.

물론 약속을 잘지키면 이런 수고를 덜할 수 있겠으나 그러하지 못하였다.

그래서 대책을 강구하던 중에 hook 기능이 있다는 것을 알았다.


svn 저장소를 생성하게 되면 저장소의 디렉토리 구조는 다음과 같다.

$ ls

README.txt  conf  dav  db  format  hooks  locks


hooks에 들어가게 되면 상황에 맞는 템플릿 파일들이 있다.

$ cd hooks

$ ls

post-commit  post-commit.tmpl  post-lock.tmpl  post-revprop-change.tmpl  post-unlock.tmpl  pre-commit.tmpl  pre-lock.tmpl  pre-revprop-change.tmpl

pre-unlock.tmpl  start-commit.tmpl


커밋을 하고자 할 때 로그를 검사해야하므로 pre-commit.tmpl을 사용하도록 하겠다.


$ cp -rp pre-commit-tmpl pre-commit

$ vi pre-commit

#!/bin/sh


REPOS="$1"

TXN="$2"


# Make sure that the log message contains some text.

SVNLOOKOK=1

SVNLOOK=/usr/bin/svnlook

$SVNLOOK log -t "$TXN" "$REPOS" | \

grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0

if [ $SVNLOOKOK = 0 ]; then

    echo "Empty log messages are not allowed. Please provide a proper log message." >&2

    exit 1

fi


# Comments should have more than 7 "[" characters.

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "\[" | wc -l)

if [ "$LOGMSG" -lt 7 ]; then

    echo -e "Please provide a meaningful comment when committing changes." 1>&2

    exit 1

fi


# Comments should have more than 7 "]" characters.

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "\]" | wc -l)

if [ "$LOGMSG" -lt 7 ]; then

    echo -e "Please provide a meaningful comment when committing changes." 1>&2

    exit 1

fi


# All checks passed, so allow the commit.

exit 0


저장하고 나온 후 실행퍼미션을 부여해준다.

$ chmod +x pre-commit


부연 설명을 하자면 첫번 째 검사는 로그메세지를 포함하는지 검사하는 것이고,

두 번째와 세 번째 검사는 "[", "]"를 포함하는 라인의 개수가 7개보다 작으면 커밋을 실패하도록 한 것이다.

한글 단어를 포함하는지 검사 하고자 하였으나 인코딩이 기본 UTF-8이 아니기 때문에 에러가 발생한다.

svn 버전 1.8부터 conf에서 파일의 환경설정을 하도록 하는 기능이 있다고 하나 사용중인 버전이 낮기 때문에 이정도에서 적용하였다.


쉘이외에도 파이썬, php 등 여러가지 언어를 지원하므로 상황에 맞게 사용하면 된다.

'형상관리 > VCS' 카테고리의 다른 글

Git 사용중 Not a git repository 에러  (0) 2017.01.09
Posted by dcmru
,