달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'Git'에 해당되는 글 2건

  1. 2016.12.29 git, github 이용하기#2
  2. 2016.12.29 git, github 이용하기#1

이전 포스팅에서 깃과 깃헙을 이용해 첫 저장소를 생성해보았다.

이번엔 좀더 진보한 사용법을 익혀보자.


앞선포스팅에서는 커맨드라인을 이용해 status를 확인하고 commit, push 했지만 깃을 좀 더 편하게 GUI에서 사용할수있도록 지원하는 툴들이 있다.

개인적으로는 회사에서 처음 사용해본 source tree 라는 툴을 사용하고있는데 이 툴을 중점으로 포스팅하겠다.


일단 소스트리를 설치하자.

https://www.sourcetreeapp.com


설치가 완료됐으면 실행하자. 다음과 같은 화면을 볼수있다. 윈도우는 살짝 다른걸로 알고있는데 진행에는 큰 무리가 없을것이다(나도 회사에선 윈도우로 사용중이다.).



로컬저장소는 존재하지않고 원격저장소만 존재할경우(기 진행중인 프로젝트를 다운받는경우가 이에 해당할 것이다.) URL에서 복제를 선택해 진행하면 된다.

우리는 이전 포스팅에 이어서 진행할것이고 이미 커맨드라인을 통해 로컬저장소와 원격저장소를 모두 보유중이니 다시 원격에서 받을 필요는 없다. 로컬 저장소 추가하기를 선택한 후 지난 포스팅에서 깃 로컬저장소로 설정했던 디렉토리를 열면 된다.


해당 디렉토리를 선택하면 로컬저장소가 추가될것이다. 우클릭-열기 혹은 더블클릭을하자.


이런 창이 뜰것이다. 아마 윈도우는 소스트리를 처음 실행하면 이 창이 뜰텐데 위에서 말한것 그대로 진행하면 된다. 로컬저장소 추가하기를 진행하여 로컬저장소를 열어주자.


왼쪽이 가장 많이 클릭할 메뉴들인데 간단히 설명하겠다.


파일상태 - 전 포스팅에서 말한 파일의 상태를 확인할 수 있다. 변경된 파일, 커밋할 파일을 확인할 수 있으며 커밋을 진행할 수 있다.


히스토리 - 깃의 커밋로그들을 확인할 수 있다.


그리고 그 아래 branches 라는게 있는데 말 그대로 브랜치들이다.

깃은 프로젝트를 브랜치로 관리하게되는데 동일한 프로젝트에서 여러 개발자들이 동시에 작업을 하게되면 충돌이 날 확률이 높아지게 되고 문제가 생겼을때 롤백하기도 쉽지않을것이다.

그래서 각자 개발자들이 새로운 브랜치를 생성해 개발을 진행하고, 개발이 완료된 후 브랜치들을 합치는 방식으로 개발을 하게된다. 이런 브랜치들을 좀 더 의미있게 사용하자는 의미에서 브랜치전략들이 많이 나왔고 git flow라는 전략이 매우 유명하다. 이는 잠시 후 다시 설명하겠다.


저장소가 원격, 로컬로 나뉘어 있는만큼 브랜치도 원격 브랜치와 로컬브랜치가 존재한다. 보통 로컬브랜치와 원격브랜치가 1:1로 대응되게하고 명칭도 같은 명칭으로 하는 경우가 대부분이지만 꼭 그렇게 해야하는것 아니다.


가장 초기에 생성되는 브랜치는 master 브랜치이며 현재 원격과 로컬에 모두 master가 존재하는것을 볼 수 있을것이다.


이전 포스팅에서 파일 수정 후 git commit, push 명령어로 원격저장소에 올렸던것처럼 이번엔 소스트리를 이용해서 해보자.

매우 직관적인 인터페이스를 가지고있고 툴자체도 거의 완벽한글화를 지원하기때문에 특별한 설명은 필요없을것이라고 본다.


지난 포스팅에서 pull 명령어에 대해서는 설명하지않았는데 원격저장소에서 변경된 파일을 로컬저장소로 내려받는 기능이다. 혼자 개발할땐 나말고 변경하는 사람이 없으니 당연히 쓸일이 없을테고, 동료개발자의 작업내용을 받을때 사용한다. 소스트리에서 해당 브랜치에 변경된부분이 있다고 표시해주면 그때 브랜치 우클릭 후 pull을 받으면 된다.


커맨드를 사용하는것보다 훨씬 편하기때문에 소스트리 자체에 대한 설명은 크게 필요한게 없을것이다. 10~20분 혼자 클릭하다보면 대충 손에 익게될것이다.


이제 위에서 뒤로 짬시킨 git flow에 대해서만 간략히 알아보고 마치겠다.


http://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html

해당 주소에서 매우 자세하고 쉽게 설명하고있으니 참고하자.


위에서 말했지만 브랜치는 브랜치일뿐 특별한 의미가 있는 브랜치는 없다. 하지만 그 브랜치에 역할을 입혀 논리적인 의미를 입히고 그 전략대로 브랜치를 사용하는것이 브랜치 전략이며 git flow가 그 중 하나다.


git flow는 브랜치를 크게 몇가지로 나누고 있는데 이런식이다.


develop - 개발의 중심이 되는 브랜치이다. 해당 브랜치에서 직접 작업하는것은 지양해야하며 추가기능을 개발할때 해당 브랜치에서 feature 브랜치를 생성해 진행한 후 작업이 완료되면 해당 브랜치를 develop에 머지한다.


feature - 직접적인 개발이 진행되는 브랜치이다. 해당 브랜치에서 각각 개발자들이 작업을 하게된다.


master - 최신으로 운영에 배포된 상태의 브랜치이다.


release - delveop에서 각자의 브랜치를 생성해 개발을 진행한 후 개발이 완료되면 다시 develop 브랜치에 머지하게된다. 그리고 새로운 배포가 나갈때 develop 브랜치에서 release 브랜치를 생성하게된다. release 브랜치를 이용해 배포전 테스트를 진행하며 이미 큰 틀의 개발은 feature에서 진행된 후이기떄문에 해당 브랜치에서는 배포전 테스트에서 발생하는 버그들을 주로 수정하게된다. 테스트가 완료되면 해당 브랜치에서 변경된 사항들은 develop, master 브랜치에 머지되며 이후 master브랜치의 배포가 진행된다.


hotfix - 운영에 배포된 상태에서도 긴급한 수정사항이 발생할 수 있다. 이때 master 브랜치에서 hotfix 브랜치를 생성하게되며 해당 브랜치에서 수정된 사항은 다시 delvelop, master에 머지하게된다.


소스트리에서는 툴 자체에서 git flow를 지원하고있다. 메뉴에서 git flow 시작하기버튼을 누르면 develop과 feature 브랜치를 생성해주며 그 이후엔 깃플로우 버튼을 누르면 따로 브랜치생성할 필요없이 필요한 브랜치를 GUI를 이용해서 생성해준다.


마지막으로 깃헙에서 지원하는 풀리퀘스트에 대해 알아보도록하겠다.


굳이 깃 플로우일필요는 없지만 위에서 브랜치의 역할에 대해 설명했으니 깃 플로우관점에서 설명을 하자면 delvelop 브랜치에서 내가 추가개발하고자하는 개발을 진행하기위해 feature 브랜치를 생성하게된다.

이후 작업이 완료되면 해당 브랜치를 delvelop에 머지해야하는지 그 이전에 코드리뷰를 진행하는 단계가 풀리퀘스트다.

개발을 진행한 feature 브랜치를 원격으로 푸시해주고 깃헙 사이트에 접속하자.



풀리퀘스트 메뉴에가면 new pull request라는 버튼이 보인다. 클릭하자.




클릭하면 base branch와 compare branch가 있는데 compare를 base에 머지하겠다 라는 뜻이다.

그대로 풀리퀘스트를 생성하게되면 해당 프로젝트를 진행중인 개발자들에게 알람이 가게되고 코드리뷰를 진행할 수 있게된다.


코드리뷰를 진행한 후 해당 페이지에 있는 merge 버튼을 클릭하면 자동으로 브랜치가 머지되며 반대로 내가 로컬에서 수동으로 develop에 머지한후 푸시하게되면 풀리퀘스트가 종료되게된다.


이로 깃 포스팅을 마치겠다.

회사를 이직한 후 가장 당황했던건 여태 SVN만 쓰던 내가 깃을 접하게 됐던것이다.

지금와서 생각해보면 배우기가 힘들었던것도 아니고 그리 어려운것도 아닌데 그때는 가장 힘들었던게 깃이었다.

도움이 될진 모르겠지만 나같은 상황을 맞닥뜨린, 혹은 깃을 써보고싶은데 뭐가뭔지 모르는사람들에게 조금이라도 도움이 될수 있었음 좋겠다.

Posted by 한설림
|

개발자라면 git을 이용하든, 이용하지않은 얘기는 여기저기서 참 많이 들을것이다.

깃헙에 소스를 올려두라는둥 오픈소스에 참여하라면 깃헙을 가라는 둥... 사용법도 어렵지않다고하는데 쌩초보입장에서는 쉽지않은게 사실이다. 형상관리는 넘어가고 초간단 깃헙 사용법에 대해 포스팅을 하고자한다.


먼저 깃을 설치하자.

https://git-scm.com/book/ko/v1/시작하기-Git-설치

한글로 자세히 설명되어있다.


설치를 마쳤으면 terminal 혹은 cmd 창을 열어 깃이 설치됐는지 확인하자. 버전을 확인하는 커맨드명령어는 다음과 같다.


git --version


숫자로 이루어진 버전이 뜨면 정상적으로 설치된것이다.


형상관리를 해주는 기술의 이름이 git이고 깃을 이용해 서비스를 해주는 업체가 github다. 기본적으로 공개된 저장소에 대해서는 무료로 저장소를 제공하고있고 너무나도 유명하기때문에 많이들 사용한다. 심지어 회사에서도 따로 형상관리 서버를 구축하는것이 아니라 그냥 깃헙을 사용하는 경우가 많다. 깃을 설치했으면 깃헙도 이용해보자.


https://github.com

먼저 깃헙 홈페이지에 접속한 후 sign up 버튼을 눌러 회원가입을 진행하자.

회원가입을 진행하게되면 인증 이메일이 날아오니 인증을 해주면 된다.


자 이제 깃을 설치했고 깃헙 회원이 됐으니 준비는 다 끝났다. 이제 본격적으로 시작해보자.



로그인을 한 후 우측 상단에 보면 +버튼이 있다. 클릭한 후 new repository 를 클릭하자.


repository에 원하는 주소를 적고 아래 create 버튼을 클릭하자.

public 계정은 무료제공이지만 private 계정은 유료다. 중간 readme 체크박스는 README.md 파일을 처음부터 만들지 말지를 선택하는건데 깃헙에 익숙해지면 크게 신경쓸필요 없어지지만 초기엔 체크하는게 설정에 좀더 편함이 있다. 우리는 궂은 길을 가기위해 체크하지않고 넘어간다.


create 버튼을 누르면 저장소가 생성된것이다. 이게 끝이다. 그 이후에 영어로 뭔가 막 써져있는걸 볼수있는데 영어라고 겁먹고 그냥 끄지말고... 어려운 부분은 없다. 정말 친절하다.

제일 위에 new repository on the command line 만 따라하면 된다.



terminal이나 cmd를 다시 열어 깃헙으로 관리하고자하는 디렉토리로 이동하자.

해당 디렉토리를 깃으로 관리하기위해 깃 초기화를 해줘야한다. 다음 명령어를 입력하자


git init


깃 초기화를 했으면 이후 해당 디렉토리를 포함한 하위 디렉토리는 깃의 관리하에 들어가게되고 로컬저장소가 된다. 이제 이 로컬저장소와 방금 깃헙에서 생성한 원격저장소를 연결해야한다. 테스트용으로 원격저장소에 올릴파일을 생성하자. 기존에 해당 디렉토리에 파일이 존재한다면 그 파일을 이용해도 된다.


파일을 생성했으면(혹은 기존파일이 존재하면) 다음 명령어를 입력해보자.


git status


깃은 파일을 세가지 상태로 관리하는데 변경되지않은 파일, 변경(추가)된 파일, 커밋할 파일 로 관리한다.

아직 커밋을 한번도 한적이 없으니 어떤 파일이 존재하든 변경된파일 상태일것이다. 해당 파일을 커밋할 파일 상태로 만들어야한다.

위 스샷에있는 샘플코드는 README.md 파일을 추가하고있는데 이런식으로 파일을 추가해주면 된다.


git add README.md


README.md 외에 다른 파일을 올릴거면 파일명만 변경해서 올려주면 된다.


다시 git status 를 입력해주면 파일이 stage에 올라왔다고 할것이다. 해당 상태가 커밋할 파일상태이다.

이제 커밋을 해주자


git commit -m "commit"


""는 커밋메세지이며 자유롭게 작성하면된다.

이제 로컬저장소내에 파일이 커밋된것이며 원격저장소와는 연결되어있지않으므로 협업하는 동료는 해당 파일의 변화를 알수가없다.(물론 원격저장소와 연결되어있다 하더라도 커밋만으로는 아무것도 모른다.)

깃에서 커밋은 로컬저장소에 저장한다는 의미이므로 내 로컬에서만 변화하는 것이다.


이제 원격 저장소에 연결하자. 깃헙에서 새로운 저장소를 생성했을때 생기는 .git 주소가 있을것이다. 해당 주소를 복사해오고 다시 커맨드창으로 오자.


git remote add origin [url]


원격저장소를 추가하는 명령어이다. origin은 원격저장소의 alias 라고 보면 된다. 굳이 origin일 필요는 없고 자유롭게 적어주면 되나 대부분 origin을 사용한다.

이 명령어가 실행되면 로컬저장소와 원격저장소가 연결된것이며 원격저장소는 꼭 1개일 필요는 없다. 하지만 하나의 로컬저장소를 2개 이상의 원격저장소로 연결해서 사용하는 경우는 한번도 본적이 없다.


원격저장소를 연결했지만 지금도 저장소끼리만 연결했을뿐 실제 로컬에서의 변화를 원격으로 올린적은 없다. 이제 원격저장소에 올리는것을 해보자.


git push -u origin master


push가 원격 저장소로 로컬의 커밋을 올리는 명령어이며 origin은 위에서 설명한 alias다. 어떤 원격에 올릴지를 적는것이다. 위에서 origin이 아닌 다른 명칭을 사용했다면 다른 명칭을 적어주면 된다.


master는 브랜치명을 뜻하며 origin 원격에 있는 master 브랜치에 로컬 커밋을 푸시하겠다는 뜻이다.

브랜치는 다음에 설명하겠다.


이렇게되면 이제 원격저장소에 내 로컬에서의 커밋이 푸시가 됐고 동일저장소를 사용하는 다른 동료들도 이 변화를 알수있게된다.


글로 설명을 덧붙이고 중간중간 status 같은 명령어를 쳐서그렇지 사실 여태껏 한걸 요약하면 저~ 위에 repository를 처음 생성했을때 깃헙 홈페이지에 나온 new repository on the command line에 나온걸 순차적으로 했을뿐이다.

이제 해당 페이지를 새로고침해보자.

처음 생성했을때의 설명이 사라지고 내가 푸시한것이 올라와있는걸 확인할 수 있다.


만약 README.md 파일을 추가했다면 해당 마크다운 파일이 출력되는것까지 볼 수 있을것이다.

계속 변경하고 커밋, 푸시를 해보도록하자.


아까 원격 저장소를 생성할때 README.md 파일을 자동으로 추가해주는 체크박스에 '좀 더 궂은길을 가기위해' 체크하지말고 넘어가자고했다. 해당 체크박스를 선택하고 진행할 경우 README.md 파일이 생성된 상태로 시작하게되며 이상태에서 README.md 파일이 존재하는 디렉토리를 로컬저장소에 다운받은 후 진행할수도있다. 이런경우엔 이미 깃으로 관리하고있는 디렉토리를 다운받게되는것이기때문에 git init과 같은 작업을 해줄필요가없다.

훨씬 편한거 아닌가 라고 생각할수도있는데 위에서 말했듯 해당작업이 그리 어려운부분이 없기에 몇번 하다보면 사실 무의미하다.

'Programing' 카테고리의 다른 글

[MyBatis] Parameter NULL 처리방법  (1) 2020.06.22
Posted by 한설림
|