Git 이 여러가지 Protocol 을 지원하고 있다지만, 어디까지나 기본 바탕은 SSH Protocol 이다!
계정 관리 및 계정의 권한 역시 SSH Protocol 의 정책이 그 기본이다.

앞에서 해당 Protocol 에 대해서는 간단히 알아보았고,
여기에서는 실제로 사용하는 모습을 간단히 시나리오에 따라서 살펴보도록 하겠다.



1. adduser


$ sudo adduser bigbang

우선 새로운 사용자를 하나 생성해보도록 하자.
위 스크린샷에서는 'bigbang'이라는 계정을 생성하였다.


$ sudo apt-get install finger
$ finger bigbang

꼭 설치해야하는 것은 아니지만, 그냥 계정을 확인할 수 있는 'finger'도 설치해보았다.
그냥... ^^



2. su


$ sudo su bigbang

일단 사용자를 변경하자.


프로젝트에 신입사원이 새로 왔다는 상황을 가정해보도록하겠다.
계정을 새로 발급을 받고 프로젝트 소스를 받아서 작업을 하고자 하는 상태다!



3. workspace


$ cd
$ mkdir workspace
$ cd ./workspace

repository를 내려받기 위한 공간을 마련하는 작업이다.
계정 홈디렉토리 밑에  workspace 라는 공간을 만들어서 그 밑에서 작업을 하고자 한다.



4. clone


$ git clone bigbang@localhost:/srv/repository/BareRepo.git

앞에서 살펴보았던 방법으로 ssh protocol 을 사용하여 repository 를 clone 하여보았다.



바로 곧 이어서 push에 대해서 살펴보자~!!!

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Remote Repository - git push  (2) 2012.03.04
Git Server - push + 한글  (1) 2012.02.26
Git Server - SSH  (2) 2012.02.23
Git Server - Local  (0) 2012.02.22
Protocol - Git Server  (0) 2012.02.20

이번에는 가장 많이 사용하는 프로토콜인 SSH !!!


1. clone


$ git clone ssh://chani@10.0.2.15:/srv/repository/BareRepo.git
$ git clone chani@10.0.2.15:/srv/repository/BareRepo.git

ssh 프로토콜을 사용하여 clone을 하는 방법은 2가지가 있다.

   - git clone ssh://계정@서버주소:리포지토리주소
   - git clone 계정@서버주소:리포지토리주소

하지만, 위의 스크린샷을 보면 에러가 발생한다!!!
그 이유는 ssh server가 없어서이다 ^^



2. install ssh server


$ sudo apt-get install openssh-server

Ubuntu의 경우에 가장 많이 사용하는 'openssh-server'를 설치하자.



3. clone


$ git clone chani@10.0.2.15:/srv/repository/BareRepo.git

실제로 해보면 "ssh://"를 명시하는 방법은 에러가 나곤 한다.
그냥 밑의 방법을 사용하는 것을 추천한다.






SSH를 사용하여 Git의 계정 관리를 하는 것이 가장 일반적이다.
앞에서 언급한 바와 같이 가장 대중적이며 안정적이며 유연한 프로토콜이다.

단점은 SSH를 사용할 경우, anonymous 접근을 허용하기가 난해하다.
그래서 open source project 에는 적용하지 않는다.

 

실제 계정 정책을 적용할 때 어떻게 해야하는지 등에 대한 부분은 다음에 별도로 다루겠다~

퇴근하고, 아가랑 놀고, 씻고....그리고 정리하려면 너무 졸려서리...... ㅠㅠ

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - push + 한글  (1) 2012.02.26
Git Server - Remote Connect  (0) 2012.02.25
Git Server - Local  (0) 2012.02.22
Protocol - Git Server  (0) 2012.02.20
Add last commit - git commit --amend  (0) 2012.02.16

작업을 위한 repository가 아닌 서버의 역할을 하기 위한 repository에 대해서 한동안 알아보도록 하겠다.

우선 가장 첫번째로 그냥 바로 사용할 수 있는 Local Protocol 이다!


1. git init --bare

 

$ mkdir  BareRepo.git
$ cd BareRepo.git/
$ git init --bare

Bare repository를 생성하는 것에 대해서 작성한 다음 글을 참조하기 바란다.
   - http://whatwant.tistory.com/328

전에 이야기한 적이 있는 것 같은데, 다시 한 번 말하면
Bare repository는 일반적으로 디렉토리명 꼬리에 '.git'을 붙이곤 한다.


그리고 생성 후에 원활한 테스트를 위해서는 파일 하나는 넣어놓는 것이 좋다.
빈 저장소(empty repository)인 경우에는 테스트할 때 이상 증세를 보일 수도 있다.

예를 들어서 Redmine에서 저장소 셋팅을 제대로 하여도 empty repository인 경우에는
마치 에러가 난 것과 같은 화면을 보여준다.



2. clone


$ cd clone /srv/repository/BareRepo.git
$ cd BareRepo/

Local Protocol을 사용하는 경우에는 repository 주소를 그냥 절대경로로 디렉토리를 적어주면 된다.

   - git clone [directory]

물론 해당 디렉토리에 대한 읽기 권한이 있어야 한다.

repository의 디렉토리명에 ".git"이 붙어 있음에도 생성된 repository를 보면
이름에서 ".git"이 제외되고 생성된 것을 볼 수 있을 것이다.


3. Usage

전에 간단히 언급은 했지만,
Local Protocol은 NFS로 공유 파일 시스템을 셋팅하여서 팀원들끼리 같이 사용하는 형태로 종종 사용은 된다.

권한 문제는 파일시스템의 계정 권한을 그대로 따른다.
물론 push 역시 계정 권한에 따라 허용된다.

혼자서 git을 구성해서 사용할 경우에는 간단히 Local Protocol을 사용하면 된다.

하지만, 일반적으로 사용할 경우 별 문제는 없지만,
만약 원격지에서 접근을 해야하는 경우에는 치명적으로 난감한 상황에 빠지게 된다.

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - Remote Connect  (0) 2012.02.25
Git Server - SSH  (2) 2012.02.23
Protocol - Git Server  (0) 2012.02.20
Add last commit - git commit --amend  (0) 2012.02.16
Log - gitk  (0) 2012.02.15

작업을 위한 Repository가 아닌 소스 배포(?)를 위한 진정한 Server Repository에 대해서 알아보고자 한다.

자고로 Server라 함은 어떤 방식으로 파일을 주고 받을지를 정해야 한다.
바로 Protocol 이다!


Git 에서 사용할 수 있는 Protocol 은 총 4가지 방식이다.

   - Local
   - SSH
   - Git
   - HTTP/S
 


1. Local

아무것도 하지 않아도 사용할 수 있는 가장 기본적인 Protocol이다.
NFS 와 같은 것을 사용하여 공유 디렉토리 같은 것을 사용하여 그냥 막 접근하여 사용하는 방식이다.

개인 사용자가 혼자서 사용할 경우에나 추천하는 방식이며,
팀 작업을 할 경우나 일반 인터넷망에서 사용하는 경우에는 절대 추천하지 않는 방식이다.

폐쇄된 내부에서 같은 망에 물려있는 팀 내에서만 사용하는 경우에나 적용할 수 있을 것이다.



2. SSH

리눅스 환경에서 대부분 사용하는 터미널 접근 방식이다.
telnet과 달리 어느정도 보장된 보안 프로토콜이며, 가장 대중적인 프로토콜이다.

Git을 리눅스 환경에서 사용하고 있다면, 가장 추천하는 방식이다.
물론 윈도우 환경에서도 적용은 할 수 있다.

단, SSH 프로토콜을 사용할 경우 anonymous 접속을 허용하기가 조금 난감해진다.



3. Git

기본적으로 포함되어 있는 Git 데몬을 띄우면 사용할 수 있는 'Git의 Git에 의한 Git을 위한 프로토콜'이다.
일반적으로는 9418 포트를 사용하며, SSH 프로토콜과는 유사한 방식이지만, 인증은 빠진 형태이다.
 
Git 프로토콜의 가장 큰 장점은 '속도'이다. 가장 빠르다!!!
만약 인증이 필요없지만 용량이 큰 프로젝트를 제공하는 상황이라면 무조건 Git 프로토콜을 사용해라!
SSH와 같은 방식이지만, 암호화와 인증이 없기에 자료 전송에 있어서는 짱이다.

다만, 인증 과정이 없기에 읽기 전용으로나 사용해야한다.
그래서 실제로는 push는 SSH 프로토콜을 사용하고, clone 등의 작업은 Git 프로토콜을 사용하곤 한다.



4. HTTP/S

최근 들어서 형상관리 도구를 포함한 많은 분야에서 상당히 일반화되고 있는 HTTP/S 프로토콜이다.

HTTP 문서의 root 디렉토리 밑으로 repository를 넣어놓고,
Git의 hooks 설정만 살짝 해놓으면 되는 간편한 사용법의 프로토콜이다.

HTTP/S의 가장 큰 장점은 대중적인 HTTP/S 포트를 사용하기에, 방화벽 등의 문제에 걸릴 위험이 없다!
또한 HTTPS의 경우에는 SSH 프로토콜과 같이 맞물려서 재미있게(?) 사용할 수도 있다.

다만, 가장 큰 단점은 속도가 느리다는 점이다.
또한 그닥 다이나믹한 기능을 제공하는 프로토콜도 아니다.
그다지 똑똑한 프로토콜이 아니기에 완벽한 전송을 보장한다고 보기에도 어렵다.(하지만 대부분 잘 되긴한다!)






각 프로토콜을 어떻게 설정을 해서 어떻게 사용을 하는지 하나 하나 살펴보고 싶기는한데,
일단 오늘은 지금 졸리기에 여기서 마무리 짓고~

나중에 기분이 어떤지에 따라서.... ^^


개인적으로는 SSH 프로토콜을 사용하는 gitolite를 적용하는 것을 추천하기에
그에 대해서 알아볼 것 같다. ^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - SSH  (2) 2012.02.23
Git Server - Local  (0) 2012.02.22
Add last commit - git commit --amend  (0) 2012.02.16
Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14

이전 작업으로 돌아가는 실행취소가 아니라,
commit을 했는데, 미처 추가하지 못한 작업이 있어서 나중에 추가를 하고 싶은 경우에 대해서 설명하고자 한다.


1. Ready


오늘 설명할 기능을 위해서 상황을 준비했다.
위 스크린샷을 보면 알겠지만, 파일 2개를 수정한 상황으로 준비했다.


2. commit


2개의 파일 중에서 1개만 staging해서 commit을 했다고 해보자.

그런데, 나머지 파일도 방금 진행한 commit에 집어넣고 싶다면 어떻게 해야할까!?


3. git commit --amend


대상 파일을 'add' 하고선 'git commit --amend' 명령어를 실행하면,
comment 입력 에디터 화면이 뜨고, 저장을 하고 종료하면 마무리 된다.


4. log


로그를 확인해보면, 2개의 commit이 아니라 기존 commit에 반영이 되어있다는 것을 확인할 수 있다.

그리고 commit 기록 시간이 중요한데,
처음에 commit 시간이 그대로 반영 되어있다. 변화하지 않는다!




사용자가 실수를 했을 경우에 이를 만회할 수 있는 명령어들 중 하나에 대해서 설명을 하였다.
이미 commit을 한 것을 수정할 수 있다는 것은 살짝 논란거리가 될 수도 있다.

하지만, 나중에 살펴볼 Remote Server와의 관계를 생각하면 별 문제가 아닐 수도 있다.

중요한 것은 우선 실수를 하지 않는 것이다.
하지만, 만약 commit 할 때에 실수를 했다면 'git commit --amend'를 기억하면 더 좋겠지...!? ^^
반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - Local  (0) 2012.02.22
Protocol - Git Server  (0) 2012.02.20
Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13

앞에서 'git log'를 통해서 로그를 확인했는데,
git 에서 로그를 보다 편하게 볼 수 있는 도구를 제공해준다.

바로 "gitk"


1. Error


$ gitk

'gitk'를 실행하면, 에러가 발생할 수도 있다.
'gitk'는 Tcl/Tk 기반의 프로그램인데, 'Tcl/Tk'가 설치되어있지 않아서 발생하는 에러이다.


$ sudo apt-get install tk

관련 패키지를 설치하면 위 에러는 해결이 된다.


2. gitk


$ gitk

'gitk'는 기본적인 비주얼 'git log' 도구이다.

앞에서 살펴본 커맨드 환경에서의 'git log'에서 했던 대부분의 것들을 GUI 환경에서 확인할 수 있다.


가볍게 여기까지~

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Protocol - Git Server  (0) 2012.02.20
Add last commit - git commit --amend  (0) 2012.02.16
Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13
Upgrade GIt (in Ubuntu)  (0) 2012.02.13

열심히 코멘트를 적어가며 commit을 했는데,
그렇게 열심히 기록한 것들을 보려면 어떻게 해야할까?


1. git log


$ git log

그냥 아무런 옵션 없이 'git log'를 하게 되면 지금까지의 기록들을 전부 보여준다.
화면 단위로 끊어서 계속 보도록 하여주는 것이다.


$ git log -2

전부가 아니라 최근 2개만 보고 싶다면 '-2'와 같이 옵션을 붙이면 된다.


2. git log -p


$ git log -p -2

단순히 기록을 보는 것이 아니라 무엇이 변경되었는지를 알고 싶다면 '-p' 옵션을 사용하면 된다.
물론 너무 많은 기록을 보는 것이 아니라 최근의 것을 보고 싶다면 '-2'와 같이 옵션을 붙이면 된다.


3. git log --stat


$ git log --stat -2

'diff' 내용이 너무 많아서 보기 너무 힘들다거나,
빨리 review를 하고 싶을 경우에 사용하면 좋은 옵션이 바로 '--stat'이다.

몇 개의 파일이 변경되었고, 몇 줄이 추가되었으며 몇 줄이 삭제되었는지 계산해서 보여준다.


4. git log --pretty


$ git log --pretty=format:"%h - %an, %ar : %s"

log 결과를 원하는대로 보고 싶을 때 사용하는 옵션이 바로 "--pretty" 이다.

이는 실제로는 로그를 파싱해서 다른 용도로 사용할 때 종종 사용한다.
즉, 파싱하기 좋은 모습으로 출력을 하도록 해서 이를 가지고 응용 프로그램에서 정규식 등을 적용하곤 한다.


5. git log --since


$ git log --pretty=format:"%h - %an, %ar : %s" --since=2.days

최근 2일간의 기록만 보고 싶다면!?
"--since" 옵션을 사용하면 된다!



6. git help log

이 외에도 엄청나게 많은 옵션과 그 사용법이 있다.

$ git help log

사용하다가 잘 모르겠거나, 아니면 제대로 사용하고 싶다면 위의 명령어 처럼 help를 외치면 된다!

너무 많은 옵션과 너무 많은 그 응용으로 인해서 여기에서 소개하는 것은 한계가 있기에.... ^^

(실은 나도 잘 모른다는... ㅋㅋㅋ)

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Add last commit - git commit --amend  (0) 2012.02.16
Log - gitk  (0) 2012.02.15
Move file - git mv  (0) 2012.02.13
Upgrade GIt (in Ubuntu)  (0) 2012.02.13
Remove file - git rm  (0) 2012.02.12

앞에서 'rm'에 대해서 알아보았고, 이번에는 'mv'에 대해서 알아보도록 하겠다.
'mv'와 'rm'이 비슷하게 사용될 것 같지만, 좀 다르다!


1. mv


$ mv ./mv_test.txt ./mv_test_action.txt
$ git status

Git으로 관리를 하고 있는 파일의 이름을 바꿨을 뿐인데, 'git status'를 하면 뭔가 많이 바뀌어 있다.

   - 기존 파일은 삭제가 되고,
   - 변경한 파일 이름으로 새로운 파일이 등록


2. git mv


$ git mv ./mv_test.txt ./mv_test_action.txt
$ git status

'git mv'를 통해서 파일명을 변경하게 되면,
위 스크린샷에서 확인할 수 있는 것처럼 'renamed'로 인지하게 된다.



하지만, 'git mv'를 하게 되어도 그 과정은 결국 3단계로 수행이 된다.
   - [ mv A파일 B파일 ]
   - [ git rm A파일 ]
   - [ git add B파일 ]

이렇게 3단계로 처리를 하는 것도 나쁘지는 않지만,
그냥 한 번에 'git mv'로 처리하는 것을 추천한다!



Git 은 위와 같이 파일명을 변경하여도 rename에 대한 metadata로 저장되지는 않지만,
위와 같이 처리가 될 경우 이를 rename이라고 알아챈다.

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14
Upgrade GIt (in Ubuntu)  (0) 2012.02.13
Remove file - git rm  (0) 2012.02.12
Git Remote Repository (git init --bare)  (0) 2012.02.11

+ Recent posts