YUDA't

0.

최근 오픈소스에 관심이 생겨 이것저것 찾아보다가 GitHub가 오픈소스 프로젝트에 얼마나 많이 기여하는지 알게 되었다.

언젠가 친구가 나에게 'GitHub가 뭐냐'라고 물었을 때 '코드 공유 사이트다'라고 답한 적이 있는데, 뭔가 시원찮았다.

아주 틀린 말은 아니지만 이것만으로는 Github의 역할을 전부 설명할 수 없다.

어쨌든 여차저차한 이유로 GitHub의 기능들을 차근차근 살펴보고 있다.



1.

본론에 앞서 Git과 GitHub의 차이점을 짚고 넘어간다.

Git은 분산 버전 관리 시스템(DVCS; Distributed Version Control System)이며,

GitHub는 Git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스이다.

Git을 호스팅할 수 있는 사이트는 GitHub 말고도 많으며(ex. repo.or.cs, Gitorious, Unfuddle 등) 이중 GitHub 사용률은 62% 정도로, 압도적으로 높다.



2. Star


GitHub 프로젝트 상단 오른쪽에 떠 있는 Star.

GitHub 홈페이지에서 설명한 Star의 역할은 이렇다.


Creating a bookmark for easier access

Showing appreciation to the repository maintainer for their work


간단히 말해 '북마크' 혹은 '좋아요'와 비슷한 역할을 한다. 

나는 필요한 기능을 구현하기 위해 GitHub 프로젝트들을 자주 검색하고 다운받는데, 이때 Star 개수를 통해 프로젝트의 신뢰도를 가늠하기도 한다.


하지만 Star가 많아도 프로젝트가 지속적으로 관리되지 않아서 사용이 용이하지 않거나 아예 불가능한 경우도 있다. 

이는 최근 커밋활동이나 Issue 탭을 통해 예상 가능하다. 

전에 오픈소스 관련 세미나를 들었을 때 강연자가, 많은 수의 관리자들이 1-2년 안에 오픈소스 관리를 중단/포기한다고 했는데... 나도 흐지부지된 펫 프로젝트가 많아서 이해가 간다.



3. Fork

Star 버튼 옆에 있는 Fork. Fork는 GitHub가 제공하는 기능으로, Git 명령어에는 없다.

'저장소를 복사한다'는 점에서 GitHub 저장소를 내 로컬 저장소로 복사하는 clone과 기능이 유사하지만, 다르다. 

다음은 스택오버플로우에서 가져온 'What is the difference between Forking and Cloning on GitHub?'에 대한 답변이다.


When you say you are Forking a repository you are basically creating a copy of the repository under your GitHub ID. The main point to note here is that any changes made to the original repository will be reflected back to your forked repositories(you need to fetch and rebase). However, if you make any changes to your forked repository you will have to explicitly create a pull request to the original repository. If your pull request is approved by the administrator of the original repository, then your changes will be committed/merged with the existing original code-base. Until then, your changes will be reflected only in the copy you forked.


In short:


The Fork & Pull Model lets anyone fork an existing repository and push changes to their personal fork without requiring access be granted to the source repository. The changes must then be pulled into the source repository by the project maintainer.


Note that after forking you can clone your repository (the one under your name) locally on your machine. Make changes in it and push it to your forked repository. However, to reflect your changes in the original repository your pull request must be approved.


fork는 어떤 GitHub 저장소를 내 저장소로 가져와서 '관리'할 수 있게 한다. 

다른 이의 프로젝트를 그저 사용하거나 보기만 한다면 clone을 하면 되지만, fork를 하면 소스를 '관리'할 수 있는 것이다. 

즉, 타인의 GitHub 프로젝트는 Read-only이지만 내 저장소로 fork하면 그 프로젝트에 대한 Write 권한이 생긴다.


한편 original 저장소에서 수정/업데이트가 있을 경우엔, fork한 내 저장소에도 반영이 되지만, 

내가 수정한 프로젝트는 오직 내 저장소에만 반영되며, original 저장소에는 영향이 가지 않는다.(original에 바로 반영되면 개판나니까)

만약 나의 수정사항을 original에 반영하고 싶다면 그 프로젝트의 관리자에게 자신의 pull request를 승인해달라고 부탁하자.(연락은 이메일, Issue, 커뮤니티 등 알아서)