백업해둔 프로젝트를 내 컴퓨터로 받아오거나 협업을 위해 새로운 개발자가 프로젝트를 로컬 저장소로 받아와야하는 경우가 있다. 이때 clone을 통해 로컬 저장소에 원격 저장소에 있는 프로젝트를 가져올 수 있다.


STEP01.

GitHub에 있는 가져올 원격 저장소에 접근하여 HTTPS 값을 복사한다.


STEP02.

SourceTree에서 왼쪽 하단의 "Add Repository"버튼을 누른다.


STEP03.

"Clone Repository"탭에서 "Source Path/URL"에 복사해둔 HTTPS값을 붙여넣고 "Destination Path"에 받아온 프로젝트를 저장해둘 경로를 지정해준다. 마지막으로 "Bookmarks"에 SourceTree에 표시할 저장소의 이름을 지정해주고 "Clone"버튼을 누른다.


STEP04.

아래와 같이 SourceTree에 원격 저장소에 존재하던 프로젝트가 생성되었으며 지정해둔 프로젝트 생성 경로에 해당하는 프로젝트 파일이 생성되었다.

<BranchMerge Git 저장소가 생성>


<설정한 경로에 GitHub의 원격 저장소에 존재하던 프로젝트가 저장됨>


Posted by gangju
,

GitHub에 로컬 저장소의 프로젝트를 최초로 동기화한 이후 로컬 저장소 프로젝트에 변경 사항이 발생하여 수정을 하였다. 이 경우 다시 push를 통해 로컬 저장소와 원격 저장소를 동기화 해주어야 한다.


STEP01.

프로젝트의 소스코드를 수정하고 commit과정을 거친다.

<printMessage 메소드 추가>


<commit을 통해 새로운 버전 생성>


위의 그림과 같이 새로운 버전이 생성이 되었다. 여기서 버전 목록을 보게 되면 최신 버전이 master 브랜치로 되어있고 그 바로 밑의 버전에 origin의 master 브랜치로 표시 되어있다. 이것은 아직 로컬 저장소와 원격 저장소를 동기화 하지않아 두 개의 저장소 사이에 하나의 버전이 차이난다는 것을 보여주는 것이다. 또한 상단의 "Push"버튼에 1이라는 숫자가 보이는데 이것 또한 로컬 저장소와 원격 저장소가 하나의 버전이 차이난다는 것을 보여주는 것이다.


STEP02.

마찬가지로 로컬 저장소와 원격 저장소를 동기화하기 위해 SourceTree의 상단에 있는 "Push"버튼을 누르고 아래의 화면에서 push할 브랜치를 선택하고 "OK"버튼을 누른다.


STEP03.

push과정이 끝나면 두 개의 저장소가 동기화되어 아래와 같이 master 브랜치와 origin/master 브랜치가 같은 버전으로 존재하게 된다. 또한 GitHub 사이트에 접속하여 원격 저장소를 확인해보면 소스코드가 동기화되어 있다.

<master 브랜치와 origin/master 브랜치가 똑같은 버전으로 되어있다.>


<업데이트된 원격 저장소>

Posted by gangju
,

앞서 GitHub를 통해 생성한 원격 저장소를 내 컴퓨터에 존재하는 로컬 저장소와 연결을 하였다. 이렇게 연결한 원격 저장소에 내 컴퓨터에서 작업하던 프로젝트를 백업 또는 협업하기 위해 프로젝트를 동기화할 수 있다. 이것을 push라 한다.


STEP01.

SourceTree에서 해당하는 로컬 저장소를 선택한 뒤 상단 메뉴의 "Push"버튼을 누른다.


STEP02.

상단의 선택 메뉴에서 프로젝트를 올리고자 하는 원격 리포지토리를 선택하고 (origin 또는 또 다른 원격 저장소) 다음으로 올리고자 하는 branch를 선택한다. 마지막으로 "OK"버튼을 누른다.


STEP03.

Username과 Password를 입력하라는 창이 나오면 자신의 GitHub 계정을 입력하면 된다.


STEP04.

push가 완료되면 아래 그림과 같이 원격 저장소 origin에 push과정에서 선택한 master 브랜치가 등록 되어있다. 또한 GitHub 사이트에 접속하여 해당 원격 저장소를 확인해보면 로컬 저장소의 프로젝트가 동기화되어 있다.

<원격 저장소 origin에 등록된 master 브랜치>


<GitHub의 원격 저장소에 동기화된 프로젝트>


Posted by gangju
,

프로젝트를 다른사람과 협업하기 위해, 또는 자신의 프로젝트를 안전하게 유지하기 위해 자신의 컴퓨터가 아닌 다른 곳에 저장을 해두어야 한다. 이러한 기능을 GitHub에서 제공하는 저장소를 사용할 수 있는데 이러한 자기 자신의 컴퓨터에 있는 로컬 저장소가 아닌 외부에 있는 저장소를 원격 저장소라고 한다. GitHub에 원격 저장소를 생성하고 자신의 컴퓨터에 있는 로컬 저장소와 연결하는 방법은 아래와 같다.


STEP01.

GitHub(https://github.com)에 접속하여 회원가입을 하고 로그인을 한다.


STEP02.

화면 우측에 있는 "New repository" 버튼을 누른다.


STEP03.

"Repository name"란에 저장소의 이름을 쓰고 하단의 "Create repository" 버튼을 누른다.

※ new repository의 옵션

- Description : 생성하는 저장소에 대한 설명

- Public or Private : 해당 저장소가 공개 저장소인지 비공개 저장소인지 설정. GitHub의 경우 비공개 저장소일 경우 유료이다.

- Initialize this repository with a README : 생성하는 저장소가 신규 저장소일 경우 저장소를 초기화하고 프로젝트에 대한 설명을 입력하기 위한 README.md 파일을 생성. 기존 저장소를 복제하기 위한 경우 체크하지 않아도 된다.

- Add .gitignore : Git에서 관리하지 않을 파일의 목록을 관리하는 .gitignore 파일을 작성한다.

- Add a license : 작성하는 코드의 라이센스를 관리하는 LICENSE 파일을 작성한다.


STEP04.

생성된 저장소에 자신의 컴퓨터에 저장되어 있는 저장소를 복사하기 위해 상단의 "HTTPS" 항목의 주소 값을 복사한다.

※ 아래 "or create a new repository on the command line" 이하의 항목은 SourceTree와 같은 그래픽 유저 인터페이스 기반이 아닌 텍스트 기반 인터페이스에서 원격 저장소를 추가하기 위해 사용된다.


STEP05.

SourceTree 상단 메뉴의 "Repository-Add Remote" 를 누른다.


STEP06.

"Add Remote"에 들어가게 되면 아래의 그림과 같이 해당 로컬 저장소의 원격 저장소를 관리하는 창이 나온다. 이 곳에서 "Add" 버튼을 눌러 준다.


STEP07.

앞서 복사해두었던 GitHub의 원격 저장소 "HTTPS" 항목의 값을 "URL / Path"란에 적어준다. 또한 원격 저장소가 로컬 저장소의 첫번째 원격 저장소일 경우 "Default remote"를 체크하여 기본 원격 저장소(origin)로 지정해준다. 마지막으로 "OK" 버튼을 누른다.

STEP08.

아래와 같이 원격 저장소 목록에 금방 연결한 "origin"이 생성되었다. "OK" 버튼을 누른다.


STEP09.

SourceTree의 메인화면 Remotes 항목에 원격 저장소 origin이 표시된다.

<로컬 저장소에 추가된 GitHub의 원격 저장소>

Posted by gangju
,

Git/GitHub 개념

Git&GitHub 2015. 11. 5. 06:28

* 버전 관리 시스템 (Version Control System)

소프트웨어의 코드를 추가 또는 변경하는 과정을 모두 기록하여 특정한 시점으로 돌아가거나, 문제가 생긴 파일을 복원하는 등, 소프트웨어 개발 현장에서 사용하는 프로그램(시스템) 이다. CVS(Concurrent Versions System, 동시 버전 관리 시스템), SVN(Subversion), Git 등이 있다.



우리가 보통 프로젝트를 작업 할 때 프로젝트 진행과정에서 발생하는 수정사항이나 백업이 필요한 부분을 저장하기 위해 위와 같이 여러 개의 파일을 폴더 내에 복사하고 파일명을 구분되게 하는 방법을 사용한다. 이것을 버전 관리라 볼 수 있다. 하지만 이러한 방법은 프로젝트가 진행될수록 어떠한 파일이 어떤 부분이 변경된 것이고 왜 복사를 해두었는지 파악하기가 어려워진다. 최악의 경우 실수로 파일을 삭제해버리는 경우도 있다. 이러한 문제를 해결하기 위해 소스코드를 효율적으로 관리하기 위해 만들어진 것이 Git와 같은 버전 관리 시스템이다.


* 로컬 버전 관리 시스템

처음 버전 관리 시스템이 등장했을 때 간단한 데이터베이스에 해당 파일의 변경 사항을 아래와 같이 기록하였다. 유명했던 VCS 도구들 중 현재에도 널리 쓰이는 것으로 RCS라 불리는 시스템이 있다. RCS의 기본적인 동작 방식은 각 리비전들 간의 패치 세트(patch set)라고 하는 데이터의 차이점들을 특별한 형식의 파일에 저장, 특정 시점의 파일 내용을 보고 싶을 때 해당 시점까지의 패치들을 모두 더하여 파일을 만들어내는 것이다.



* 중앙집중식 버전 관리 시스템 (Centralized Version Control System)

또 다른 문제는 시스템 외부에 있는 개발자들과 함께 작업하는 것이다. 중앙집중식 버전 관리 시스템은 이 문제를 해결하기 위해 개발되었다. CVS, Subversion, Perforce와 같은 시스템들이 여기에 속한다. 서버에 저장소(Repository)를 집중시켜 배치. 하나의 소프트웨어를 개발할 때 하나의 리포지토리만 존재한다. 이 중앙 서버에서 다수의  개발자가 파일들을 가져옴으로써(checkout) 위의 문제를 해결한다. 또한 데이터가 중앙 서버에 집중되므로 관리하기가 매우 단순해진다. 하지만 서버에 접속할 수 없거나 서버가 고장나면 최신 소스 코드를 받아올 수 없는 문제점이 있다.


* 분산 버전 관리 시스템 (Distributed Version Control System)

분산 버전 관리 시스템은 앞서 말한 문제를 해결하기 위해 개발되었다. Git, Mecurial, Bazaar, Darcs 등 분산 버전 관리 시스템에서는 클라이언트가 파일들의 마지막 스냅샷을 가져오는 대신 저장소(repository)를 통째로 복제한다. 따라서 서버에 문제가 생겨도 어느 클라이언트든 복제된 저장소를 다시 서버로 복사하면 서버가 복구된다. 체크아웃(checkout)을 할 때마다 전체 백업이 일어나는 셈이다.



집중형과 달리 여러 개의 저장소(Repository)가 존재한다. 서버에 있는 저장소를 원격 리포지토리라고 하며 개인마다 자신의 PC에 로컬 리포지토리라고 한다. 이로인해 사용자는 서버에 있는 저장소에 접속하지 않아도 개발이 가능하다. 하지만 중앙집중식 버전 관리 시스템에 비해 다소 복잡해진다. 아래의 그림의 Fork(포크)는 GitHub에 있는 특정 리포지토리를 자신의 계정으로 복제하는 것이고, 이렇게 복제된 리포지토리는 원래 리포지토리와 완전히 다른 리포지토리가 된다. 또한 서버(GitHub)와 사용자 만의 push, pull이 아닌 다른 사용자 사이에도 직접 push, pull이 가능하다.



* Git와 GitHub의 차이

Git은 Git 리포지토리라고 불리는 데이터 저장소에 소스 코드 등을 넣어서 이용하는것으로, 이러한 Git 리포지토리를 인터넷상에서 제공하는 서비스(호스팅 서비스)가 GitHub이다. GitHub에서 공개되는 소스 코드는 모두 Git으로 관리된다.


<출처 : https://git-scm.com/book/ko/v1/, https://backlogtool.com/git-guide/kr/, https://opentutorials.org/course/1492>

Posted by gangju
,