본문 바로가기
터틀코딩캠프/자바스프링과정

(환경설정) GIT 설치에서 Github, Sourcetree 한번에 설정하자

by 테크한스 2023. 4. 6.

우선 GIT은 사용하면 할수록 알아야 할 것이 많은 친구이다

 

그러나 기본적으로 개발자를 시작하는 사람이 설정을 하려고 하면 환경설정부터 꼬이면서 난리가 날 수 있다. 

하여 기본적인 초기 설정 부터 sourcetree 까지 설정하는 법을 한번에 알아보자

 

우선 GIT은 두가지이다

 

1) 로컬GIT

2) 리모트GIT (Github)

 

2)번 리모트GIT이 github(또는 gitlab)이 될 수 있겠다.

 

그렇다면 로컬 GIT은 어떻게 할 것인가? 어떻게 하긴 그냥 설치하면 됨

 

https://git-scm.com/

 

Git

 

git-scm.com

 

위의 사이트에서 해당 GIT을 자신의 OS에 맞게 설치하면 끝

설치 옵션이 꽤나 많다. 모르면 그냥 디폴트 값으로 Next를 연사하자

 

설치한 후에 버전 확인  (위는 윈도우, 아래는 맥이다)

     $ git --version
     git version 2.39.0.windows.1


     $ git --version  
     git version 2.39.0

그러면 로컬GIT을 설치가 된 것이다.

 

그렇다고 지금부터 설명할 내용이 끝나는 것은 아니다. 갈길이 조금 멀다.

 

이제부터 리모트GIT과 로컬GIT은 항상 붙어다니는 자석정도로 생각하자 (아직 연동도 안했는데? 기다려보시라)

 

우리가 아는 COMMIT은 로컬GIT 까지이고, PUSH 가 되어야 리모트GIT 에 저장되는 것이다

 

즉 SVN에서 처럼 단순 하나의 레파지토리(repository, 저장수)만 존재하는 것이 아닌 개념이다.

 

자, 이제 본격 출발해 보자

먼저 다시 이클립스로 돌아온다. (소스는 당연히 소중한 것이고 GIT을 사용하는 목적이기에)

여기는 까지는 GIT에 아무런 연결이 안된 상태이다.

우선 해당 프로젝트를 선택하고 우측버튼을 누르고 팝업메뉴 중 Team을 찾아라 (아래 화면 처럼)

선택을 하면 아래 옵션 값이 나온다.

여기서 부터 잘봐야 한다.

개발자들도 GIT 설정은 자주하는 것이 아니기에 개발하다 다시 돌아와서 보면 여전히 헷갈린다.

여기서 말하는 Configure GIT Repository는 소스와 로컬GIT을 설정하는 과정이다.

 

맨위에서 로컬GIT을 설정하였지만 실질적으로 사용하는 나만(?)의 로컬GIT 저장소는 만들지 않았던 것이다

그것을 위의 옵션값으로 2가지 형태로 만든다. 그것은 내가 선택하면 된다.

 

1) GIT 폴더를 별도로 만들어주고 그곳을 저장소(GIT레포지토리)로 사용하는 것 (소스 workspace와는 분리)
2) GIT 폴더를 별도로 만들어주지 않고 소스위치에 바로 그냥 저장소(GIT레파지토리)를 만드는 것
    (소스 workspace가 동시에 GIT레포지토리 인 것)
해당 위치가 GIT레포지토리인 것을 아는 방법은 해당 폴더에 .git 이 존재하면 그것이 레포지토리(저장소)이다

 

위에서 설정하는 방법도 2가지로 진행할 수도 있다.

지금은 2) 번 항목으로 진행할 것이다. ( 1번 항목으로 하면 workspace 위치에 있는 소스가 git 저장소로 순간 이동 된다)

 

우선 해당 옵션 화면에서

가장상단의 체크박스 항목인 Use or create repository in parent folder of project를 선택

 

아래 버튼 Create Repository를 선택하면 2)번 방법으로 로컬GIT이 설정된 것이다. (우측에 .git 보이는가?)

 

 

Finish 버튼이 활성화 되었다. 얼른 Finish 하자

그러자 많은 변화가 보인다. 우선 좌측의 소스에 먼가 물음표(?)가 보이며, GIT Repositories 탭에는 원통 GIT 저장소

아이콘이 보인다.


(참고) 아직 이클립스 탭뷰에 Git Repositories 와 Git Staging이 보이지 않는다면 

이클립스상단메뉴 > Window > Show View > Other 을 선택하고 GIT을 검색해보자

 


갈길이 멀다. 얼른 해당 뷰를 클릭해서 오픈하자

 

우선 하단의 Git Repositories 의 원통저장소 (여기서는 BookMarket이라고 보임)

여기서 Remotes 라는 리스트 메뉴를 클릭해서 

Create Remote를 선택하자

우선 push 를

선택해서 진행하자.  먼가 에러가 나는 것처럼 보인다.

URI 의 Change... 을 선택하자 (리모트GIT을 설정하는 부분)

여기에 Github에서 설정한 리모트GIT의 정보를 입력하자 


(참고) github에서 리모트 저장소 만들기

 

우선 github에 회원가입을 하고 회원으로 로그인해야 한다.

누구나 자신의 메인페이지가 있다. 상단 메뉴 Repositories를 클릭하고 우측상단의 Green 버튼 New를 선택하자

 

그리고 원하는 레포지토리이름을 기술해주면 된다 (여기서는 BookMarket)

소스를 바로 올리는 경우는 중간의 Add a README file (소개 페이지)을 대개 클릭하지 않는다

(github에서 소개페이지 만들면 하루가 다간다)

 

이렇게 생성하면


이렇게 준비가 된다.

나는 위의 저장소 URL 만 기억하고 있으면 된다 (기억할 필요는 없고 카피하면 됨)

 

다시 이클립스로 돌아와서

 

Source Git Repository에 방금 만든 리모트GIT 주소를 입력해 보자

Finish 버튼을 누르면 아래와 같이 아까 보이던 에러표시가 사라진다.

그리고 Save 버튼을 누른다.

그러면 Remotes 가 아래와 같이 생성된다.

그러면 기본적인 이클립스 소스와 로컬GIT 그리고 리모트GIT까지 설정이 된 것이다.

설정에 있어서 반정도 온것 같다.

 

다시 위의 Git staging으로 가면 커밋을 할 대상 소스들이 보일 것이다.

(초기에는 unstaging 상태이므로 staging상태로 이동시킴, 물론 저장소에 이동시킬 소스만 선별해서 이동)

이동하자

그리고 commit and push 하자  (커밋 코멘트는 기본이고 나중에 커밋에 대한 히스토리 역할이 상당하므로 습관을 들이자)

첫번째 commit 이기에 아래와 같은 브랜치이름도 설정할 수 있다.

 

여기서 브랜치(branch) 이름에 대해 알아야 할 사항이 있다.

github에서는 예전에 master라는 이름의 root 저장소 주인 이름을 사용하였으나, master가 인종문제를 연상시키는 단어라서 어느순간부터 master의 주인이름이 main으로 변경되었다 (main이 default 값이 되어 버림)

 

그런데 이클립스에서는 소스 커밋을 하는 주인이 main 이 아닌 master의 예전이름을 사용함으로 이것도 변경해 주어야 함

이 화면도 디폴트 값이 master 였으나 main으로 바꾸어 준것임

다음을 선택하게 되면

이와 같이 로컬GIT은 여전히 master이고 github은 아까 말한대로 main으로 변경하게 됨

 

신규생성된 저장소의 branch 주인은 main으로 확인된다

 

그러므로 commit & push는 main으로 저장되나 2번째부터는 다시 master로 커밋되므로

github에서는 두개의 master, main 이 소스저장소의 주인이 보이게 된다

 

여전히 로컬 소스의 주인은 master로 보인다

 

이것의 원인인 로컬GIT 저장소의 master를 main으로 변경해 주어야 한다.

이것은 이클립스에서 설정하는 것보다 GIT 터미널에서 해주는 것이 빠르고 확실하다.

 

아래와 같이 해당 로컬 workspace에 있는 위치로 GIT 터미널을 이동해 보자

아래에도 BookMarket 우측에 (master)라고 선명하게 보이는 것을 확인할 수 있다.

우선 해당 변경 스크립트는 아래와 같이 4라인만 실행하면 된다.

 

git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a

그러나 위의 2라인만 성공하고 나머지는 추후설정에서 다시 확인하고 진행할 것이다.

일단 하단의 명령어를 보면 우측의 브랜치가 (master) 에서 (main)으로 변경되었다.

 

로컬GIT의 브랜치가 master -> main 으로 변경

 

에러가 발생한 refs/remotes/orgin은 아직 만들어 지지 않아서 에러가 보이며 이것은 곧 만들어 줄것이고

해당 명령어를 다시 실행할 것이다.

 

거의 다 온것 같다. 마지막으로 sourcetree를 다운받아서 설치하자

sourcetree 설치방법은 별도로 확인하고 진행하자 

여기서는 기본적으로 설치되어 있는 것을 감안하여 설정하겠다.

위와 같이 로컬GIT의 위치를 ADD 시킨다

Git 저장소 입니다. 이 확인메시지가 중요하다

사실 이시점에서는 해당 로컬GIT은 리모트GIT과 연결되어 있는 상태라고 보면 이해가 쉽다.

이렇게 추가를 하게 되면 바로 해당 소스트리가 보이게 된다.

이렇게 보이면 거의 성공이다.

GIT 소스사용은 이제 시작이다. commit, push, fetch, pull 아직도 운영하면서 알아야 할 것들이 남아있다.

여기서는 main으로 소스를 운영하지 않는다. main에서 branch를 다른 이름으로 변경하여 주로 사용한다.

나는 main ---> main_techhans로 브랜치이름을 rename하여 운영하겠다.


(참고) git 의 소스관리 전략


위의 내용처럼 main 브랜치를 중심으로 용도별로 서브 브랜치를 만들고 합치고 다시 만들고 하면서 GIT소스관리의 세계가 시작된다.

 

여기서는 간단한게 사용자별로 브랜치를 따는 것까지 보여준다.

이렇게 되면 아래와 같이 소스에 브랜치가 2개가 붙어있는 것을 보여준다.

좌측의 브랜치 중 볼드체로 되어 있는 브랜치가 현재 유효한 브랜치이므로 main_techhans가 브랜치 진행자이다

소스에 스페이스를 먹여서 수정해 주고 다시 커밋해보자

스테이지에 소스를 올린 모습(로컬)

commit 뿐 아니라 push도 진행해 준다.

이 행위를 이클립스에서도 물론 가능한다. (commit, push, fetch, pull 등) 

그러나 공동작업이 복잡해지면 복잡해질수록 해당 소스의 버전이라던지 브랜치, 머지 그리고 소스충돌시에 다시 리턴해야 하는 상황들을 한눈에 보기에는 한계가 있다. 그러므로 소스트리를 통해 관리를 하는 것이 일반적이고 편한다.

 

소스트리에서는 브랜치를 클릭으로 변경해주면 바로 브랜치 이름이 변경된다.

branch 이름이 main_techhans로 변경된 상태

 

마지막으로 fetch 관련된 설정부분을 마무리해보자

 

아래의 configure fetch >> Add 를 선택해주면

Source 빈칸에 이렇게 기술해 준다.       refs/heads/main     (또는 refs/heads/*)

 

(중요) 향후에 신규브랜치도 고려한다면 remote 상태를 가져오는 fetch 옵션은 refs/heads/* 가 좋을 것이다

 

Next 누른다.

 

remote git과 fetch관련 설정화면

Finish를 누른다.

remote origin의 fetch 설정

이제는 Save가 아니라 Save and Fetch를 선택하면 에러가 발생 안 할것이다.

fetched 완료 화면
이제 origin/main 이 보인다

아까 GIT터미널에서 에러가 발생한 나머지 명령어를 입력한다.

정상수행되는 git 관련 명령어

 

 

git branch -u origin/main main

결과는 branch 'main' set up to track 'origin/main'

git remote set-head origin -a

결과는 origin/HEAD set to main

이제 소스관련해서 GIT 명령어을 이용해 merge 등을 이용하여 소스관리를 하면 되겠다.

이정도면 현업에서 사용하는 소스관리의 시작 포인트점은 찾은 것 같다

 


(반대의 방법)

 

 

지금까지 브랜치를 master에서 main으로 변경하는 노력을 했다면

반대로 github의 디폴트 브랜치이름인 main을 master로 변경하는 방법도 있다.

사실 후자가 더 간편한긴 한다.

 

해당 github 메인페이지에서 settings에 들어가면 아래 화면이 나온다.

settings 메뉴의 좌측서버메뉴인 Repositories를 선택하면 가장 위에 Repository default branch 이름을 업데이트해 주는 기능이 보인다.  흠 훨씬 쉬워보이네요 main ---> master로만 변경해도 될 거 같은데, 그래도 main으로 변경하면서 git의 기능을 몇가지라도 더 살펴본 것은 발전적인 것 같네요

 

 

 

(참고) 신규브랜치 생성 후 사용하다 sourcetree의 커밋 후에 푸쉬항목이 안뜬다거나  fetch를 위한 orgin/신규브랜치가 안보인다면 아래 설정을 추가로 해준다.

 

최종 소스 트리의 모습은 아래와 같다

 

이제 제대로 설정된 것 같다.

 

(마지막으로) 

불필요한 파일을 git에 올리지 않기 위해서 .gitignore 파일을 추가한다.

.gitignore 파일 내용은 아래정도 설정한다.

*.bak
*.cache
*.ilk
[Tt]est/
[Tt]arget/
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
*.MF
.[^git]*
/bin/
target/

이것도 추가 commit & push 해준다

 

댓글