프로젝트 첫 기여 도전기(2)

Nash·2022년 1월 25일
0

기여란 재미있어

목록 보기
3/3
post-thumbnail

우선 내가 Git을 얼마나 쓸 줄 아는지 파악부터했다.

git init, add, status, commit, push, pull만 할줄 알았고,
fork, clone, branch 생성과 활용, pull request 같은 기능을 한번도 써보지 않았기에
나의 선생님인 구글을 이용하여 해당 기능을 빠르게 읽어나갔다.
그리고 Readme에 있는 First-time Contribution을 참고하여 본격적인 작업에 들어갔다.


✔ 저장소 포크(Fork)하기

Fork 버튼을 클릭하면 내 github 계정 레포지토리에 프로젝트가 생성된 걸 확인할 수 있었다.


✔ 저장소 클론(Clone)하기

Code 버튼을 클릭 후 clone 주소를 복사했다.
그리고 cmd 창을 열어 원하는 디렉토리에 git clone 명령어를 입력했다.

clone에 성공한 뒤 제대로 다운로드가 되어졌는지 해당 폴더에 접근하여 다시 한번 확인했다.


✔ git branch 만들기

branch라는 개념이 '가지'인데 대충 흐름은 이해할 수 있었다.

나만의 branch를 생성하여 branch안에 git add, commit, push 등을 사용하여 fork한 계정과 동기화한다. 이후 Fork한 내 계정이 아닌, 원래 프로젝트에 Pull requests 한다. 그 다음 프로젝트의 주인이 검토하여 Merge 해주면 끝. 그리고 나의 branch는 내가 직접 삭제한다.

틀릴 수도 있지만 내가 이해한 흐름은 이거였다.

branch 를 생성하기 위해 git check -b [내가 원하는 branch 이름] 을 입력했다.

branch 생성 후 main->origin 에서 [내가 원하는 branch 이름] 으로 바뀌었다.

이제부터 작업 시작이다.


✔ 작업하기

Visual Studio 2019를 이용하여 하노이 타워 알고리즘을 만들었다.
그리고 recursion 이라는 폴더를 만들고, Readme에 나와있는 작업 규칙(소문자, '-' 사용 등)을 지키며 tower-of-hanoi.c 라는 파일을 recursion 폴더 안에 넣었다.
그리고 C 폴더 안에 있는 Readme 수정을 시작했다.

어떤 알고리즘을 추가했는지에 대한 설명과 하이퍼링크?로 해당 코드에 바로 연결할 수 있는 기능을 넣어야했다. 일종의 목차였으며, 이를 해결하기 위해서는 마크다운 문법을 알고 있어야했다.
하지만 Readme을 github 편집으로 열어보니 요령껏하면 될 수 있을 것 같았다.

cmd의 vi편집기로 Readme를 수정하고 본격적인 commit, push 작업에 돌입했다.


✔ add/commit/push part.1

git add resursion
git commit -m "add Recursion(Tower of Hanoi)"
git push origin first-branch
빛의 속도로 add/commit/push 작업을 수행했다.

근데 push하고 나서 뭔가 쎄한 느낌이 들었다.

본 프로젝트에 commit 메세지들을 봤는데 규칙이 있는 것 같았다.
그리고 Pull request 하기전 PR Checklist가 있었고, 나는 그 규칙과 체크리스트를 지키지 않은 상태에 Push했다는 걸 깨달았다.

내 commit 메세지는 add Recursion(Tower of Hanoi) 이다.
근데 C++ commit 메세지를 보면 enh(CPlusPlus): fix~~~ (MakeContribution#673)으로 적혀있다.

"무슨뜻이지?... chore는 뭐고 enh는 또 뭐여."
"그리고 MakeContribution#673은 또 뭐여..."

지금 사진은 최종 풀 리퀘스트할 때이다.
유저 친화적인 설명, 시간복잡도, 입출력 샘플을 주석으로 달지 않고 push했다.

성급한 Push로 사고가 정지되었으나, 우선 급한 불부터 꺼야했기에 PR checklist부터 맞춰나가기 시작했다. (push 는 항상 신중하게!!!)


✔ 재작업하기

  • 유저 친화적 설명
    하노이 타워의 규칙 설명이 필요할 것 같았다.
/*
	*Tower of Hanoi*
	*Rule:
	
	1. Only one disk can be moved at a time.
	2. Each move consists of taking the upper disk from one of the stacks 
	   and placing it on top of another stack i.e. 
	   a disk can only be moved if it is the uppermost disk on a stack.
	3. No disk may be placed on top of a smaller disk.

*/
  • 시간복잡도

간단한 규칙 설명과 함께 시간복잡도와 공간복잡도를 추가했다.

	* Time Complexity : O(2^n) 
	* Space Complexity: O(n) 

시간복잡도가 O(2^n)... 입력을 한 100개 넣어주면 볼만하겠어..ㅎ
공간복잡도는 굳이 필요하지 않았으나, 그래도 편의상 넣어주는 편이 좋을 것 같아서 추가했다.

  • 입출력 샘플

나름 신경을 많이 쓴 파트이다.
Input,Output 출력만 주석으로 달아주기 좀 아쉬운 것 같아서.
하노이 타워를 이미지화 해서 입출력 샘플과 함께 추가했다.

/*
                                Sample
                input             |                     output
                                  |
              disk : 3            |             Move disk 1 from A to C
                                  |             Move disk 2 from A to B
                                  |             Move disk 1 from C to B
                                  |             Move disk 3 from A to C
                                  |             Move disk 1 from B to A
                                  |             Move disk 2 from B to C
                                  |             Move disk 1 from A to C
---------------------------------------------------------------------------
                   **Image illustration for 3 disks**
        standby                                         step 1
    A      B      C                             A         B        C
    |      |      |                             |         |        |
    |      |      |                             |         |        |
   ###(1)  |      |                             |         |        |
  #####(2) |      |                           #####       |        |
_#######(3)|______|__                       _#######______|_______###_

         step 2                  step 3	                 step 4
    A      B      C        A       B      C        A       B       C
    |      |      |        |       |      |        |       |       |
    |      |      |        |       |      |        |       |       |
    |      |      |        |       |      |        |       |       |
    |      |      |        |      ###     |        |      ###      |
_#######_#####___###__  #######__#####____|___   __|_____#####__#######__

         step 5                  step 6	                    step 7
    A      B      C         A      B      C          A        B	       C
    |      |      |         |      |      |          |	      |	       |
    |      |      |         |      |      |          |        |        |
    |      |      |         |      |      |          |        |	      ###
    |      |      |         |      |    #####        |        |	     #####
___###___#####_#######_	___###_____|___#######_    __|________|_____#######__
*/

✔ add/commit/push part2

PR Checklist에 맞춰 주석처리를 마무리했다.
다시 add/commit/push 과정을 거치기만 하면 된다.

하지만 commit 메시지가 가장 큰 걸림돌이었다.

구글에 commit 메시지를 검색하여 메시지 규칙들을 읽었다.

커밋 메시지의 7가지 규칙

  1. 제목과 본문을 빈 행으로 구분한다
  2. 제목을 50글자 내로 제한
  3. 제목 첫 글자는 대문자로 작성
  4. 제목 끝에 마침표 넣지 않기
  5. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다
  6. 본문의 각 행은 72글자 내로 제한
  7. 어떻게 보다는 무엇과 왜를 설명한다

commit 한번 하기 정말 까다롭구먼....
위의 규칙은 참고만 하고 눈치를 십분 발휘헀다.
"C# 파트 commit 메시지에 add가 있고.. chore가 일종의 추가할 때 쓰는 단어인가?, ()도 빼줘야겠어."

chore(C): add tower of Hanoi using recursion

라는 메시지와 함께 commit 후 Push를 진행했다.

✔ 대망의 Full Requests & merge

사실 좀 긴장했었다. 받아주지 않을 것 같아서 ㅠㅠ ㅋㅋ.
하지만 돈 드는 것도 아니고, 자신있게 FR Checklist를 다 체크하고 나서 Full Requests 버튼을 클릭했다.

그리고 한 10분정도가 지났을까?

ming-tsai 분이 내 Full Request 제목을 빠르게 수정해주셨고,
Arsenic-ATG 분에게 코드 리뷰를 요청했다.

다음날, Arsenic-ATG 분의 승인이 받아낼 수 있었다.
그리고 main branch에 merge에 해주셨다.

별거 아니지만, 뭔가 뿌듯했다.

Merge까지 해주셨는데, 감사 인사라도 전하고싶어 코멘트를 달았다.

코드 리뷰 해주신 Arsenic-ATG님이 로켓 이모지를 달아주셨다...

그렇게 나의 작업은 끝이 났다.


✔ Fetch 그리고 branch Delete

Fork한 내 레포지토리에 있는 프로젝트를 Fetch 해보기로 헀다.
생각보다 간단했다.
github에서 해당 레포지토리에 들어가면 Fetch upstream이 있는데 그거 클릭해서 진행하면 성공적으로 Fetch가 되었다.
그리고 내 컴퓨터에도 적용해줘야하는데 좀 쉬었다가 해야겠다.


✔ 후기

맨땅에 헤딩하면서 하니까 좀 힘들었다.
git이 좀 어렵긴 하다. 커맨드로 입력하면서 하니까 스스로가 좀 있어보여서 좋은데 힘들다.
소스트리같은 편리한 툴을 사용해보는것도 나쁘지 않은 것 같다.

profile
나에게 중요한 건, 동기부여와 의지

0개의 댓글