GIT

협업환경의 구축 (server)

중앙의 서버에 리모트 브랜치를 만들고 이를 통해서 협업하는 방법을 알아본다.

준비

이번 수업은 리눅스에 대한 약간의 지식을 요구 하지만 풍부한 경험은 필수 조건이 아니다.
리눅스에 대한 지식은 생활코딩의 리눅스 수업을 통해서 얻을 수 있다.
http://opentutorials.org/course/141/1007

본 수업은 '협업에 참여 (remote branch)'를 선행학습으로 한다.

본 강의는 아래의 문서 중 4장을 참고해서 만들었다. 
http://dogfeet.github.com/progit/progit.ko.pdf

지원하는 프로토콜

  • ssh
  •  local
  • git
  • http(s)

ssh 프로토콜의 특징

  • 대부분의 서버에서 접근가능
  • SSH가 가지고 있는 인증을 사용
  • 누가 리모트에 접근했는지 알 수 있다.
  • 설정이 상대적으로 쉽다.
  • 보안이 뛰어나다.
  • 데이터를 압축하기 때문에 효율적이다.
     
  • 익명접근이 안된다. 
    오픈소스 프로젝트인 경우 누구나 접근할 수 있도록  익명접근이 가능한 프로토콜을 별도로 제공해야 한다. 

SSH를 이용한 리모트 저장소 구축

서버에 저장소를 설치한다.

apt-get install git (ubuntu)  # git을 서버에 설치한다.
cd /opt; # /opt/projects/my_project를 원격저장소로 사용한다.
mkdir projects;
cd projects;
mkdir my_project;
cd my_project;
git init --bare --shared; # 최초로 원격저장소를 생성하는 경우
git clone --bare --shared url; # 이미 사용중인 저장소가 있는 경우

사용자 권한을 부여한다. 

sudo adduser git; # 관리자 권한으로 사용자 Git을 생성한다. 
su git; # 사용자 git으로 로그인 한다. 
chown -R git:git /opt/projects
cd; # 사용자 git 의 home 디렉토리로 이동한다. 
mkdir .ssh; # 만약 홈 디렉토리에 .ssh디렉토리가 없다면 생성한다. 

사용자의 로컬 컴퓨터에 ssh key을 생성한다.

cd ~/.ssh; # 사용자 홈디렉토리 중 .ssh 디렉토리에 id_dsa, id_rsa라는 이름의 파일이 있는지 확인한다. 
ssh-keygen; # ssh key 생성도구를 실행시킨다. 
scp id_rsa.pub git@url:/home/git/id_rsa.pub; # 공개키를 서버로 전송한다.

원격저장소의 서버에 *.pub 파일을 등록한다.

cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys

접속 테스트

아래와 같이 접속했을 때 로그인 절차가 없이 바로 로그인이 되어야 한다.

ssh git@원격저장소의 url

보안을 위해서 쉘기능을 제한

sudo vim /etc/passwd 

아래의 내용을 찾는다.

git:x:1000:1000::/home/git:/bin/sh

아래와 같은 내용으로 변경한다.

git:x:1000:1000::/home/git:/usr/bin/git-shell

이제 ssh를 이용해서 접속을 시도하면 서버가 아래와 같은 메시지를 출력하면서 거부한다.

$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.

원격저장소, 원격브랜치를 이용한 협업

http://opentutorials.org/course/303/2290

댓글

댓글 본문
  1. 병철이
    window OS PC를 Server로 구성하고 싶습니다.
    어떻게 해야 할까요..? 궁금합니다.

    위와 같이 따라해 보았으나, 사용자 권한 명령어가 미-적용 되어, 패스하고 아래 내용을 적용 하였으나, ssh 접속시, pw를 물어봅니다..

    클라이언트 pc 에서 souretree를 이용하여 푸시를 하였을 때,

    ;git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master 실험:실험 실험2:실험2 실험3:실험3
    Pushing to ssh://a2uict2@10.90.67.93:22/gitserver/projects/my_project
    'git-receive-pack'��(��) ���� �Ǵ� �ܺ� ���, ������ �� �ִ� ���α׷�, �Ǵ�
    ��ġ ������ �ƴմϴ�.
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights
    and the repository exists.
    오류가 나면서 완료됨. ;

    다음과 같이 나옵니다.
  2. 박요한
    git server 에서 ssh://git@192.168.0.103/home/git/repos/test_project.git << 이렇게 push 를 했는데. 이클립스에서요. 원격저장소에 프로젝트가 생성되야 하나요..?? 생성이 안되서요.
  3. greenyant
    SSH key 를 사용하지 않고 비밀번호로 tortoiseSVN을 통해 clone하긴 했는데요. tortoiseSVN은 설치시 같이 깔린 puttygen을 통해 키(확장자 ppk)를 생성하여 사용하네요..
    http://s2junn.tistory.com/62
  4. 엠제이
    사내 서버에 git 리파지토리를 설치하여 협업을 하려던 참에 많은 도움을 받았습니다. 감사~
  5. 별모모
    root권한으로 삭제할 수 있습니다. 하지만, 디렉토리에 접근할 때에는 user로 접근해야 합니다. 소유자:그룹을 git:git 으로 하였으면 삭제할 수는 있지만 컨트롤 권한은 git으로 접근해야 합니다.
    대화보기
    • 별모모
      [ ssh 인증키, password 물어 볼 때 ] ssh키를 발행해서, 서버의 .ssh/authorized_keys에 잘 붙여 넣었는 데도 password를 물어 볼 때 당황하셨죠? ssh서버는 보안을 위해 authorized_keys파일과 부모 디렉토리의 퍼미션을 "규정"하고 있으며, 그 규정에 맞지 않으면 동작하지 않습니다.

      su " 주석/ root로 변경
      " root 패스워드
      cd ~
      cd .ssh
      chmod 600 authorized_keys
      cd ~
      chmod 700 .ssh
    • 별모모
      [ git server, 질문입니다.. ] 리눅스 서버에서 add user한 다음 권한을 root에서 git으로 줄 때, git:git 하면 git이 사용하는 디렉토리를 root로도 지우거나 삭제할 수 없나요?

      ==> root권한으로 삭제할 수 있습니다. 하지만, 디렉토리에 접근할 때에는 user로 접근해야 합니다. 소유자:그룹을 git:git 으로 하였으면 삭제할 수는 있지만 컨트롤 권한은 git으로 접근해야 합니다.
    • koyulka
      강의 잘 봤습니다~
      생성한 원격저장소를 tortoiseGit에 추가해보려고 했는데요. 안되네요. 어떻게 추가를 해야 하나요?
    • Rags
      구글링을 해보니까 Gitorious도 Github 처럼 Git 저장소를 제공하는 서비스네요. Github에 이어서 두번째로 많이 쓰인다네요. Gitosis는 Git을 개별 서버에 설치 시 함께 설치해서 Git을 보다 편리하게(? 보안기능 강화 등등...) 사용 할 수 있게 돕는 툴이라는데요... 지금은 Gitosis 대신 Gitolite을 더 많이 사용한다는거 같아요. 물론 더 자세히 아시려면 구글링 방법 밖에는... ^^;
      대화보기
      • Rags
        Gitorious와 Gitosis는 또 뭔가요? 이것들도 Git 서버 제공 서비스들인가...
        대화보기
        • Rags
          강의 잘 봤습니다. 조만간 git 개발 환경을 구축해야 될 것 같았는데 많은 도움이 될 것 같습니다. 이제 직접 구축해보는 일만 남았군요. ^^질문을 추가하자면... 강의에서는 원격지에서 접속시 console 환경에서 작업을 하고있는데 물론 tortoiseGit을 대신 사용 할 수 있는 거겠죠? ^^
        • fofwisdom
          Gitorious와 Github, Gitosis의 차이를 정확히 모르겠어요!
        • YoungJin Shon
          팀내 문서 관리를 하려고 github 결제해야 하는가 싶었는데소중한 강의!!!음.. 리눅스를 또 공부해야 하군요.여튼 감사드려요 ㅠㅠ