펌웨어 프로그램은 보통 여러명이서 개발하는게 아니라서 개인적으로 관리하는 용도로 사용하기로 했다.
git hub가 아닌 git으로 push 없이 커밋만으로 형상관리 할수 있다.
단점은 hub에 올리는게 아니라서 협업은 할수 없지만 만드는게 간단하다.
추가로 커밋할때 버전도 자동으로 업데이트 할수 있는 방법 없을까 해서 작업해봤다.
sourceTree를 열고 Create에서 관리하기 원하는 폴더를 지장하면된다.
예 누르면 된다.
.gitignore 에 필터링 하고 싶은거 넣으면 된다. 주로 컴파일 빌드 파일을 필터링
GNU ARM*/
*.si4project/
.cproject
.project
.settings/
그러고 커밋하면 코드가 관리된다.
여기까지는 다 아는 내용일거고
깃을 생성하면 아래 폴더가 같이 생성되는데 안에 경로로 가면 sample 코드 들이 있다.
.git\hooks
이중에 pre-commit , prepare-commit-msg 이 두 파일만 수정한다.
pre-commit 파일에 아래 코드 전체 복붙
#!/bin/bash
VERSION_FILE="version.h"
COMMITTER=$(git config user.name)
EMAIL=$(git config user.email)
DATE=$(date +"%Y. %m. %d. %p %I:%M:%S")
# 파일이 없으면 기본 내용으로 생성
if [ ! -f "$VERSION_FILE" ]; then
cat <<EOF > "$VERSION_FILE"
#ifndef VERSION_H
#define VERSION_H
#define FIRM_VER "Ver. 0"
#endif // VERSION_H
EOF
echo "Created $VERSION_FILE with initial content."
fi
# 현재 버전 가져오기
CURRENT_VERSION=$(grep '#define FIRM_VER' "$VERSION_FILE" | grep -oE '[0-9]+')
# 새 버전 계산
NEW_VERSION=$((CURRENT_VERSION + 1))
# 버전 업데이트
sed -i "s/#define FIRM_VER \"Ver. $CURRENT_VERSION\"/#define FIRM_VER \"Ver. $NEW_VERSION\"/" "$VERSION_FILE"
# 새 주석 작성
NEW_COMMENT=$(cat <<EOF
/*
Ver. $NEW_VERSION
날짜: $DATE
작성자: $COMMITTER <$EMAIL>
*/
EOF
)
# `#endif` 아래에 멀티라인 주석 추가
awk -v comment="$NEW_COMMENT" '
/^#endif/ {
print $0
print comment
next
}
{ print $0 }
' "$VERSION_FILE" > "$VERSION_FILE.tmp" && mv "$VERSION_FILE.tmp" "$VERSION_FILE"
# 변경 사항 스테이징
git add "$VERSION_FILE"
prepare-commit-msg 파일에 아래 코드 전체 복붙
#!/bin/bash
VERSION_FILE="version.h"
MSG_FILE="$1"
# 현재 버전 가져오기
CURRENT_VERSION=$(grep '#define FIRM_VER' "$VERSION_FILE" | grep -oE '[0-9]+')
# 작성자 정보
COMMITTER=$(git config user.name)
EMAIL=$(git config user.email)
DATE=$(date +"%Y년 %m월 %d일 %A %p %I:%M:%S")
# 기존 커밋 메시지 가져오기
COMMIT_MESSAGE=$(cat "$MSG_FILE")
# 새로운 메시지 형식 작성
NEW_MESSAGE=$(cat <<EOF
Ver. $CURRENT_VERSION
$COMMIT_MESSAGE
EOF
)
# 커밋 메시지 파일 업데이트
echo "$NEW_MESSAGE" > "$MSG_FILE"
뒤에 .sample 확장자를 지워야 동작이 됨
그 후 한번 아무렇게나 커밋을 한번 하면 폴더에 version.h 이라는 파일이 생성된것을 확인 할 수 있다.
#ifndef VERSION_H
#define VERSION_H
#define FIRM_VER "Ver. 3"
#endif // VERSION_H
/*
Ver. 3
날짜: 2024. 12. 13. AM 10:34:41
작성자: sonseoungmin <raimbow10@naver.com>
*/
/*
Ver. 2
날짜: 2024. 12. 12. PM 05:26:35
작성자: sonseoungmin <raimbow10@naver.com>
*/
/*
Ver. 1
날짜: 2024. 12. 12. PM 03:23:21
작성자: sonseoungmin <raimbow10@naver.com>
*/
3번 커밋한 상태의 version.h 파일
소스트리에 커밋된 커밋메시지 상태
version.h 도 같이 업데이트 되서 커밋된 것을 확인. version.h 파일은 건드릴 필요 없다.
한번 커밋을 해보면 알겠지만 설명하자면
커밋 전에 파일을 생성해서 version.h 를 찾고 없으면 새로 만들고
기존거 있으면 버전을 숫자를 1씩 올리고 하단에 주석으로 간단한 정보를 넣는다.
( 주석에 커밋 메시지도 함께 추가하려고 하였지만 구조적으로 안되겠더라. 할줄 아는분 알려주삼 )
sourceTree에 커밋 메시지도 version.h를 추적해서 Ver. x 를 상위에 넣어서 설명 앞에 버전이 먼저 보이도록 하였다.
이제 메인에다가 원하는 위치에 콘솔로 출력할수 있게 코드를 만들면 끝.
#include "version.h"
void main(void)
{
printf("Rail Sample TRX Standard %s\n", FIRM_VER);
}