Git 서버 구축하기
Git은 오늘날 가장 일반적으로 사용되는 버전 제어 시스템으로, 빠른 속도로 버전 제어 표준으로 자리잡고 있습니다. Git은 기본적으로 분산 버전 제어 시스템 형태를 지닙니다. 즉, 코드의 로컬 사본은 완전한 버전 제어 리포지토리(Repository)에 해당합니다. 이러한 모든 기능의 로컬 리포지토리 덕분에 오프라인으로 또는 원격으로 쉽게 작업할 수 있습니다. 작업한 파일들을 로컬로 커밋한 다음 리포지토리 복사본을 서버의 사본과 동기화합니다. 이 패러다임은 클라이언트가 코드의 새 버전을 만들기 전에 서버와 코드를 동기화해야 하는 기존의 중앙 집중식 버전 제어와는 다릅니다. Git이 SVN 대비 가지는 장점은 무엇인가? 처음에 Git을 단순히 사용하기만 할 때에는 위 질문들에 명확히 답할 수 없었습니다. 그도 그럴 것이 Git 리포지토리를 중앙 집중식으로 운영해서 마치 SVN을 사용할 때와 똑같이 운영했었기 때문입니다. 이렇게만 사용하면 사실 Git은 SVN 대비 장점을 가지기 힘듭니다. 게다가 Git은 개념적으로 SVN보다 어렵습니다. 많은 조직들이 여전히 SVN같은 중앙 집중식 소스 관리를 하는 이유는 바로 개념적으로 쉽고 직관적이기 때문입니다.
이렇게 Git은 서버 저장소와 개발자 저장소가 독립적으로 커밋 이력을 가져갈 수 있기 때문에 매우 유연한 방식으로 소스를 운영할 수 있으며, 이러한 유연성이 Git의 가장 큰 장점입니다. 이 유연성을 바탕으로 바로 우리의 목적인 "소스를 최신으로 유지하면서도 개발자들이 원하는 때에 원하는 만큼 수정할 수 있는 방법"을 달성할 수 있는 것입니다. Git 서버쪽(Remote) 설치 및 설정 [root@localhost ~]# yum update <엔터> 그리고, Git 패키지 검색 후 설치를 시작합니다. 이미 설치가
된 상태이더라도 그 사이 버전업이 되었을 수도 있으니 무조건 설치를 시도합니다. [root@localhost ~]# yum list git <엔터> 위에서 Available Packages로 나올 경우, 신규로 설치해야 한다는 뜻입니다. Installed Packages로 나올 경우, 이미 Git이 서버에 설치되어 있다는 뜻입니다. 이 경우에는 맨 하단에 '이미 설치가 되어있다. 아무것도 할 것이 없다'라는 문구가 출력됩니다. Git의 설치가 끝나면 Git을 위한 CentOS 신규 계정을 생성합니다. 여기서는 git 이름의 계정을
생성합니다. [root@localhost ~]# useradd -d /home/git git <엔터> => 계정생성, 홈디렉토리 연결 이제 생성한 git 계정으로 로그인하고, Git 저장소 전용 디렉토리를 생성합니다. 그 다음 생성한 디렉토리를 Git에서 저장소(repository)로 사용할 수 있도록 초기화를 시켜줍니다. 여기서는 다음과 같은 저장소를 만든다고 가정합니다.
위의 내용을 기준으로 다음과 같이 작업합니다. [root@localhost ~]# su - git <엔터> Git 저장소의 종류 위에서 신규로 추가한 git 계정은 오직 Git 저장소를 관리하는 목적으로만 사용되어야 하므로, 사용자 계정마다 자동으로 지정되는
bash-shell에서 git 명령어만 사용할 수 있게 해주는 git-shell로 바꿔주면 됩니다. root 권한으로 다음과 같이 몇 가지 작업을 해줍니다.
이제 git 계정이 정상적으로 git-shell만 사용하게 되었는지 체크해봅니다. [root@localhost ~]# su - git <엔터> <= git 계정으로 로그인 'git>' 과 같은 git 전용 프롬프트가 나오면 정상적으로 설정된 것입니다. exit를 입력하여 빠져나옵시다. Git 클라이언트쪽(local) 설치 및 설정 SourceTree SourceTree 설치하기
그리고 [Download for Windows] 버튼을 클릭하면 곧바로 SourceTree 설치파일을 다운로드할 수 있습니다.
.NET Framework 설치를 마치면 재부팅하라고 나올 수도 있습니다. 한 번 재부팅을 해줍니다.
[동의합니다]를 체크하고 [계속] 버튼을 클릭합니다.
[My Atlassian으로 가기] 눌러서 계정을 새로 만들어도 되지만, Google Play Store 계정이 있다면 [기존 계정 사용]을 눌러서 구글계정으로 로그인해도 됩니다. (본인의 자유) 저는 그냥 [My Atlassian으로 가기]를 눌러서 계정을 신규로 생성하였습니다.
여기서는 [설정 건너뛰기]를 눌러 설치를 진행합니다.
설치를 모두 마치면 [시작메뉴]에 위와 같이 SourceTree 메뉴가 추가된 것을 볼 수 있습니다. 개발자PC별 인증키 생성하기
위 그림은 Git 원격 저장소 서버에 SSH 방식으로 접속하기 위한 절차를 나타냅니다. 위와 같은 절차는 다음의 내용으로 인하여 필수적으로 거쳐야 하는 단계가
되었습니다. 서버에 SSH 방식으로 접속 시, 비밀번호를 물어보지 않게 하는 방법 SourceTree의 내장 Git-Bash 터미널 환경
설정하기
그러면 아래와 같이 SourceTree에 내장된 Git Bash 쉘(git-bash.exe) 창이 뜨게 됩니다.
C:\Users\<본인_윈도우_계정명>\AppData\Local\Atlassian\SourceTree\git_local\git-bash.exe 실행화면입니다. Git Bash는 리눅스 운영체제에서 자주 사용하는 Bash 쉘 명령어를 윈도우 환경에서도 동일하게 사용할 수 있도록 해주는 윈도우용 Bash 쉘입니다. $ ls -al ~/.ssh <엔터> 실제 위의 경로는 윈도우 탐색기상에서 다음과 같습니다.
이제 Git 클라이언트 자격을 얻기 위해 RSA 기반의 본인의 개인 키(Private Key)와 Git 서버에 보내줄 공개 키(Public Key)를 OpenSSH 기반으로 생성해봅시다. 처음에 딱 한 번만 작업해주면 됩니다. 다음과 같이 입력합니다.
실제 개인 키와 공개 키는 아래의 경로에 생성됩니다. (윈도우 10 기준)
참고로, ssh-keygen 명령어의 옵션을 잠깐 살펴봅시다.
이제 Git Bash 쉘 창에서 아래와 같이 입력합니다.
Git-Bash의 터미널 환경 설정이 모두 끝났습니다. 개인 키는 등록했으니, 공개 키(id_rsa.pub 파일)를 Git 원격 서버에 root 권한으로 등록해야 합니다. 파일을 업로드하는 것은 아니고, 파일의 내용을 복사하여 서버의 특정 파일에 반영하는 방식입니다.
SecureCRT 등을 이용하여 원격 서버에 root로 접속하고, 다음과 같이 작업합니다. 처음 설정하는 경우에는 .ssh 디렉토리 및 authorized_keys(확장자 없음) 파일을 새로 생성해야 할 수도 있습니다.
다시 Git 클라이언트쪽으로 넘어와서, SourceTree의 Git Bash를 띄우고, 실제 원격 저장소에 접속하여 특정 저장소 파일들을 가져와서 클론(복제)을 만들어봅시다.
예를 들어, D:\WorkSpace\Project\git 하위에 마이 웹사이트의 Git 원격 저장소의 클론을 만들고 싶으면 다음과 같이 입력합니다.
여기까지가 Git-Bash 터미널 환경을 설정하는 방법이었습니다. 하지만, 실제 개발자가 파일을 추가하거나, 수정 및 삭제, 이동 등의 작업을 할 때마다 일일이 명령어를 라인 단위로 타이핑하여 입력해야 하는 불편함이 있습니다.
그러면 SourceTree에 내장된 PuTTY Key Generator 도구가 실행됩니다. 이 도구에서는 기존에 이미 생성된 OpenSSH 기반의 개인 키(id_rsa)를 가져와서 변환할 수도 있고, 완전 새로운 개인 키와 공개 키를 직접 생성할 수도 있습니다. Git-Bash 터미널 환경에서 사용했던 ssh-keygen.exe와 유사한 도구라고 보면
됩니다. 아래에서 기존에 이미 생성한 개인 키 파일인 id_rsa를 가져오기 위해 [Load] 버튼을 클릭합니다.
C:\Users\<본인_윈도우_계정명>\AppData\Local\SourceTree\app-2.4.8\tools\putty\puttygen.exe 실행화면입니다. 아래의 창에서 C:\Users\<본인_윈도우_계정명>\.ssh 디렉토리를 탐색하였는데, 처음에는 id_rsa 파일이 보이지 않을 수 있습니다. 왜냐 하면 우측 하단의 파일 필터가 PuTTY Private Key Files (*.ppk)로 선택되어 있기 때문입니다. 걱정할 것 없습니다. 이 필터를 All Files (*.*)로 바꿔봅시다.
확장자 없는 id_rsa, 확장자 있는 id_rsa.ppk의 차이 개인 키에 비밀번호를 설정한 경우, 아래와 같이 비밀번호를 물어보는 팝업창이 뜰
수 있습니다. 본인이 지정했던 비밀번호를 입력하고 [OK] 버튼을 누릅니다.
아래와 같이 성공적으로 id_rsa 파일을 가져왔다는 메시지가 나오면 불러오기가 성공한 것입니다. [확인] 버튼을 누릅니다. (아래 대화상자의 내용은 이렇습니다. '외부 키(OpenSSH SSH-2 기반 개인 키 (PEM 구형 포맷))를 성공적으로 가져왔습니다. 이 개인 키를 PuTTY에서 사용하려면, [Save private key] 버튼을 클릭하여 PuTTY 전용 포맷으로 저장해야 합니다.')
위의 화면에서 좀 전의 메시지 내용대로 [Save private key] 버튼을 클릭하여 PuTTY 전용 포맷 파일로 저장해봅시다.
PPK의 파일명은 본인이 인식하기 쉽고, 관리가 용이한 이름을 입력하면 됩니다. 추후, 다른 도메인 또는 IP 주소의 Git 원격 저장소가 여러군데 있을 경우 아래와 같이 종류별로 여러 개의 PPK 파일을 저장해두고 사용할 수도 있습니다.
이제 SourceTree에서 PPK 파일을 이용할 때 개인 키에 지정한 비밀번호를 자동으로 인증하도록 하려면 PuTTY의 Pageant 같은 SSH 관리도구를 이용하여 PPK 파일을 추가해야
합니다.
아래와 같이 팝업창이 뜨면 개인 키에 지정한 본인의 비밀번호를 입력하고 [OK] 버튼을 누릅니다.
그러면 화면 우측 하단의 트레이아이콘 부분에 Pageant라는 PuTTY 인증 에이전트가 실행되는 것을 볼 수 있습니다.
트레이아이콘에서 마우스 우측을 클릭하여 [Add Key] 메뉴를 선택합니다.
그리고 좀 전에 변환하여 생성한 repos-xxxx.ppk 파일을 선택하고 [열기(O)] 버튼을 누릅니다.
선택한 개인 키의 비밀번호를 입력하고 [OK] 버튼을 누르면 개인 키가 등록됩니다.
현재까지 등록된 개인 키를 보려면, 다시 트레이아이콘에서 마우스 우측을 클릭하여 [View Keys] 메뉴를 선택합니다.
그러면 아래와 같이 현재까지 등록된 PPK 개인 키 목록을 볼 수 있습니다.
개인 키 등록을 마쳤으면, 이제 최종적으로 SourceTree GUI 내부의 환경을 설정합니다. 상단의 [도구]-[옵션] 메뉴를 선택합니다.
옵션 창의 [일반] 탭을 선택하고 다음과 같이 설정해줍니다.
[Git] 탭을 선택하고 다음과 같이 설정해줍니다.
[Mercurial] 탭을 선택하고 다음과 같이 설정해줍니다.
전부 설정하였으면 최종적으로 [확인] 버튼을 누릅니다.
소스 경로 / URL 항목을 잘못 입력하거나 SourceTree에서 원격 서버로 접속하지 못하는 경우는 아래와 같이 주소 입력칸 바로 아래에 표시됩니다.
유효한 소스 경로/URL이 아닙니다. 라는 문구가 표시됩니다. 이때에는 우측 [세부 사항...] 버튼을 눌러 오류에 대한 상세원인을 볼 수 있습니다. 정상적인 소스 경로 / URL일 경우 아래와 같이 표시됩니다.
모든 입력이 정상일 경우, 맨 하단의 [클론] 버튼이 활성화됩니다. [클론] 버튼을 클릭합니다. 그러면 원격 저장소에서 파일을 읽고, 로컬 저장소에 클론을 만든다.
탐색기를 열고 D:\WorkSpace\Project\git 폴더를 찾아보면 아래와 같습니다.
git 폴더 하위에 mywebsite라는 이름의 폴더가 자동 생성되고, 그 안에 로컬 저장소임을 나타내는 .git 폴더가 숨김속성으로 생성되어 있는 것을 볼 수 있습니다. 현재는 아무런 작업된 파일이 없어서 비어있지만, 이제 mywebsite 폴더 내에서 실제 개발할 소스코드 및 관련 파일들을 복사한 후에 이것을 원격 저장소로 올려보기로 합시다.
기존에 작업했던 소스코드들을 로컬 저장소 폴더 안으로 복사합니다. 그리고 다시 SourceTree GUI 화면으로 돌아옵니다. 그러면 다음과 같이 신규로 복사된
파일들의 목록이 표시됩니다.
스테이지에 올라가지 않은 파일 부분에 신규로 복사한 파일들의 목록이 출력됩니다. 여기서 스테이지는 Git 원격 저장소가 아니라 Git 로컬 저장소를 말합니다. (Git의 개념, 혼동하면 안됨)
스테이지에 올라간 파일 부분에 파일이 올라간 것을 확인할 수 있습니다. 아래에 작업 내역에 대한 간단한 설명을 입력하고, [V] -에 바뀐 내용 즉시 푸시(Push)를 체크합니다. 푸시에 체크하게 되면 Git 로컬
저장소에 올림과 동시에 Git 원격 저장소에도 같이 올리게 됩니다. 최종적으로 우측의 [커밋] 버튼을 클릭합니다.
커밋이완료되면 위와 같이 나옵니다. [닫기] 버튼을 누릅니다. 정상적으로 처리되었으면 아래와 같은 화면으로 바뀝니다.
좌측에 master라는 항목이 생깁니다. 그리고 우측에는 커밋된 파일들에 대한 상세한 정보 및 변경 이력 등을 조회할 수 있습니다. 추후 개발작업의
방향
아르미즈(arumizz) 님을 이웃추가하고 새글을 받아보세요 |