git bare repository 설정 및 다른 프로토콜(HTTP, SSH) 과 연계
개요
github 나 gitlab 의 Enterprise 솔루션을 사용하지 않고 git 에 내장된 기능을 이용하여 간단하게 로컬 저장소를 구성해서 설정 파일을 git + ssh 로 관리하는 방법을 정리해 본다.
RHEL/CentOS 6 기준
git repositories 는 /var/lib/git 이라 가정한다.
SSH 로 연계
/var/lib/git 을 git repostories 로 활용한다.
master
git central repository 서버(ex: www.example.org)에 root 로 로그인한후에 /var/lib/git 에 access 할 수 있는 계정을 설정한다. (Ex. lesstif)
mkdir /var/lib/git setfacl -m u:lesstif:rwx /var/lib/git
- root 에서 logoff 한후에 위에 설정한 계정으로 login 한다.
git 디렉터리에 프로젝트를 생성한다. (bare 저장소에야 한다)
git init --bare /var/lib/git/testprj.git
생성한 빈 저장소를 작업 폴더로 clone 한다.
git clone file:///var/lib/git/testprj.git
file: 뒤에 / 가 세 개인 것에 주의!
만약 이미 로컬에서 작업을 진행했다면 clone 하지 말고 git init 후에 remote 를 추가한다.
git remote add origin file:///var/lib/git/testprj.git
- 파일을 추가한다.
vi hello.c
hello.c#include <stdio.h> int main(int argc, char** argv) { printf("Hello World\n"); return 0; }
커밋한다.
git add hello.c git commit -m "hello.c 추가"
remote 에 push 한다.
git push origin master
second 서버
- clone 할 서버에 로그인한다.
- 다음 문법에 맞게 clone 한다. (SSH Port 가 22 번이 아닐 경우 b 번처럼 포트번호를 명시적으로 기술해줘야 한다.)
- git clone USERID@www.example.org:/var/lib/git/testprj.git
- git clone ssh://lesstif@www.example.org:1022/var/lib/git/testprj.git
- cd testprj
git remote show origin 명령어로 git central server 를 확인한다.
$ git remote show origin * remote origin Fetch URL: lesstif@www.example.org:/var/lib/git/testprj.git Push URL: lesstif@www.example.org:/var/lib/git/testprj.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
Apache HTTP 로 연계
- git central server 에 root 로 로그인한다.
- gitweb package 를 설치한다.
yum install gitweb -y
- git repository가 /var/lib/git 이므로 SELinux rule에 의해 apache httpd 는 읽을수 없다. git을 위해 추가된 context 인 httpd_git_content_t 를 설정한다.
- chcon -R -t httpd_git_content_t /var/lib/git
- apache config 를 수정한다.
- 11
- cd /etc/httpd
- vi /etc/httpd/conf.d/git.conf
- vi /etc/httpd/conf/httpd.conf
VirtualHost 항목에 다음 내용 추가
<VirtualHost *:80> ServerName www.example.org # conf.d/의 모든 conf 를 loading 하므로 아래 구문 불필요 # Include conf.d/git.conf ServerAdmin lesstif@example.org ErrorLog logs/gitserver-error_log CustomLog logs/gitserver-access_log common </VirtualHost >
- vi /etc/httpd/conf/gitpasswd
- git client 에 로그인한다.
- cloning
- git remote show origin 으로 정상 설정 여부를 확인한다.
See Also
Ref
daemon