Eclipse에서의 Git 활용 - 6: 협업
- -
협업
이번 포스트에서는 다른 팀원과의 협업에 대해 알아보자.
이제까지의 작업은 개별 개발자가 자신의 local repository에서 리소스를 관리하는 것이었다. 대규모의 프로젝트를 진행하는 상황이라면 여러 개발자가 코드를 공유해야 하는 상황이 발생하는데 이때는 git의 remote repository를 사용한다.
git을 사용하기 위해서 먼저 remote repository를 만들어보자. remote repository는 일반적으로 상용의 서비스들을 사용하는데 대표적으로 gitlab.com, github.com, bitbucket.org등이 유명하다.
여기서는 private 저장소를 무료로 사용해보기 위해 gitlab.com을 사용하기로 한다.(어떤 서비스를 사용하건 상관없다.)
remote repository 연동
local repository와 remote repository를 연동하기 위해서는 local을 먼저 생성 후 remote를 만들 수도 있고 반대로 할 수도 있다. 여기서는 먼저 local을 생성한 후 이를 remote에 등록하는 순으로 처리해 보자.
remote repository에 프로젝트 생성
gitlab.com 등 가입한 서비스에 로그인 후 새로운 프로젝트를 생성한다.
친절하게 여러 형태로 프로젝트를 만들 수 있는데 [Create blank project]를 선택해 준다.
[project name]에 적절히 이름을 주면 자동으로 프로젝트 URL이 생성된다.
Project Configuration 항목에서 [Initialize repository with a README]가 체크된 것을 볼 수 있다. 이 파일을 빼면 훨씬 절차가 단순해지는데 일반적으로 포함하기 때문에 default로 두자. 주의할 점은 이 README 파일이 이미 remote repository에 존재하기 때문에 remote의 버전이 기본적으로 더 높다는 점이다.(나중에 서버로 push 하기 전에 pull 절차가 필요해진다.)
마지막으로 하단의 [Create Project] 버튼을 클릭하면 생성이 완료되고 overview 화면으로 이동한다.
여기서는 [Clone] 버튼을 클릭해서 [Clone with HTTPS]에 있는 경로를 복사해 두자.
또 하나 눈여겨볼 부분은 기본적으로 만들어진 remote branch의 이름이다. 여기서는 [master]가 사용되고 있는데 요즘의 git 들은 [main]을 많이 사용하고 있다.
remote repository 연동 및 pull
이제 local project를 remote repository와 연동시켜 보자.
일단 local의 master branch가 모든 내용을 취합하고 있으므로 master로 checkout 한다.
git 사용의 단계는 언제나 commit --> pull --> push 임을 명심하자. 따라서 모든 변경 사항을 commit 한 후 pull을 먼저 진행해 보자. [Team]의 메뉴를 살펴보면 [Pull]과 [Pull...]이 있는데 아직 어떠한 pull 설정도 한 적이 없기 때문에 [Pull...]을 선택한다.
서버 화면에서 [Clone with HTTPS] 주소를 복사해 두었다면 아래처럼 location 정보가 설정되어 있을 것이다.
원격 저장소의 이름은 origin이 default로 사용되고 있다. Location 정보를 분석하여 host, repository path 등이 자동 설정되어 있다.
하단의 Authentication 정보는 gitlab.com과 같은 서비스에 로그인하는 계정 정보이다. 정보를 저장하지 않으면 서버를 사용할 때마다 계정정보를 입력하기가 너무 번거롭기 때문에 저장하기를 권장한다.
[Next]를 클릭하면 Pull 설정이 가능하다. 여기서는 Remote의 어떤 branch를 당겨올 것인가 설정한다. [New Remote...] 버튼을 클릭하면 다시 한번 remote repository 정보가 설정된다. [Reference] 항목에서는 기본적으로 [x] 표시가 되어있는데 ctrl + space를 입력하면 사용 가능한 원격지의 repository가 표시된다.
이제 [finish]를 클릭하면 앞서 remote에서 생성했던 README가 local에 다운로드된 것을 볼 수 있다.
command line
command line에서 remote를 등록하기 위해서는 git remote를 사용한다.
먼저 현재 remote 이름과 주소를 확인하려면 git remote -v를 사용한다.
❯ git remote -v
origin https://github.com/quietjun/gittest.git (fetch)
origin https://github.com/quietjun/gittest.git (push)
remote를 지울 때는 git remote remove <remote-name>를 사용하고 추가하려면 git remote add <remote_name> <remote_url>을 사용한다.
❯ git remote remove origin
❯ git remote -v
❯ git remote add origin https://github.com/quietjun/gittest.git
❯ git remote -v
origin https://github.com/quietjun/gittest.git (fetch)
origin https://github.com/quietjun/gittest.git (push)
remote에서 자료를 가져오기 위해서는 git pull <remote> <branch>를 사용한다.
❯ git pull origin master
From https://github.com/quietjun/gittest
* branch master -> FETCH_HEAD
Already up to date.
만약 언제나 같은 branch에서 pull 한다면 git branch --set-upstream-to=origin/<branch> <대상 branch>로 지정하고 git pull 만 사용할 수도 있다.
❯ git branch --set-upstream-to=origin/master master
branch 'master' set up to track 'origin/master'.
❯ git pull
Already up to date.
remote repository에 push
이제 local의 내용을 remote에 저장해 보자. [team]-[Push Branch 'master'...]를 클릭한다. (현재 master로 checkout 되어있기 때문에 'master'가 표시되어 있다.)
source(local repository)의 master brance를 destination(remote repository)의 master branch에 push 하겠다는 내용이 표현된다. 물론 앞서 생성한 branch 이름이 main이라면 이 부분이 main이 될 것이다.
Push 버튼을 클릭하면 local의 내용이 remote에 반영된다.
이처럼 push라는 행동은 local repository의 특정 branch 내용을 remote repository에 저장하는 역할을 한다.
이제 원격 저장소에서 프로젝트를 확인해 보면 local에서 작업했던 내용이 잘 등록되어 있는 것을 확인할 수 있다.
command line
command line에서 push 하기 위해서는 git push <remote-name> <branch-name>을 사용한다.
❯ git push origin dev2
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'dev2' on GitHub by visiting:
remote: https://github.com/quietjun/gittest/pull/new/dev2
remote:
To https://github.com/quietjun/gittest.git
* [new branch] dev2 -> dev2
member 등록
다음으로 협업을 진행하려는 동료를 프로젝트에 추가해 보자.
프로젝트 좌측 하단의 [Members] 메뉴를 선택하면 동료를 추가할 수 있는 화면을 볼 수 있다. GitLab member or Email address 항목에 동료의 아이디를 입력한 후 Choose a role Permission에서 적절한 권한(여기서는 maintainer로 하자.)을 부여한 후 [invite]를 클릭한다.
remote repository clone 해오기
clone
이제 팀원의 입장에서 프로젝트를 가져와 보자. 이 과정은 clone이라고 한다.
편의상 이제까지 작업자를 manager라고 하고 새로운 팀원은 팀원 A라고 하자. 팀원은 manager로부터 clone 할 https 주소를 전달받아야 한다.
Eclipse에서 [import] 메뉴를 이용해 보자. git 부분을 살펴보면 Projects from Git과 Projects from Git(With smart import) 메뉴를 볼 수 있다.
두 번째 메뉴는 .project가 없는 상태에서도 파일들을 보고 프로젝트를 구성해 주는 smart 한 녀석인데.. 가끔 꼬일 때가 있는 것 같다. 지금은 .project를 repository에 포함시켜 두었기 때문에 어떤 메뉴를 써도 상관없지만 Projects from Git을 이용하자.
다음 화면에서 clone uri를 선택하고 [Next]를 클릭한다.
앞서 push를 했던 화면과 유사하게 source git repository 즉 remote repository를 설정하는 부분이 나오고 git 주소를 복사해 놓은 경우라면 Location 부분이 자동 완성으로 채워져 있다.
다음으로 가져올 branch를 체크한다. 별일 없으면 모든 branch를 다 가져온다.
다음으로 프로젝트를 저장할 경로를 확인한다.
다음 화면에서 프로젝트를 가져오는 3가지 방식을 체크할 수 있다.
- import existing exlipse projects: repository에 .project가 포함되어 있는 경우 그 파일을 이용해 프로젝트를 구성한다.
- import using the New Project wizard: 주로 프로젝트가 비어있을 때 사용하며 새로운 프로젝트를 생성한다.
- import as general project: 단순 파일 저장소처럼 특별한 nature를 갖지 않는 project로 가져온다.
우리는 .project가 포함되어 있기 때문에 첫 번째 옵션을 선택 후 Next를 선택한다.
마지막으로 import 할 프로젝트 정보를 확인하고 Finish를 클릭하면 프로젝트가 잘 복제돼서 생성된 것을 확인할 수 있다.
command line
command line에서 clone 하기 위해서는 git clone <remote-url>을 사용한다.
❯ git clone https://github.com/quietjun/gittest.git
Cloning into 'gittest'...
remote: Enumerating objects: 49, done.
remote: Counting objects: 100% (49/49), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 49 (delta 15), reused 44 (delta 13), pack-reused 0
Receiving objects: 100% (49/49), 4.47 KiB | 4.47 MiB/s, done.
Resolving deltas: 100% (15/15), done.
팀원 A의 작업
이제 팀원A는 master branch를 clone해온 상태이다. 팀원A 도 자신의 branch로 member_a를 만들어서 작업할 수 있다.
member_a로 checkout 후 아래와 같이 코드를 수정한 후 commit 해보자.
package gittest;
public class Test {
// Test reset by member a
}
다음은 팀원 A의 git History이다.
이제 팀원 A는 작업을 서버에 반영하기 위해서 push 한다. [Team]-[Push Branch 'member_a']를 이용해서 자신의 branch에 push 해주자.
merge request
이제 팀원 A의 작업을 master에 merge 해야 한다. 물론 팀원 A가 바로 merge를 진행할 수 있지만 여러 명의 팀원이 master에 merge를 진행하다 보면 코드에 대한 관리가 어려울 수 있다. 따라서 코드에 대한 merge권한을 전담자에게 주고 팀원들은 전담자에게 merge를 요청하는 것이 일반적이다. 이 과정을 merge request라고 한다.
자신의 branch에 push 작업을 마친 팀원은 서버의 [Repository]-[Branches] 항목에 가보면 member_a 브렌치에서 Merge request 메뉴를 확인할 수 있다.
[Merge request]를 클릭하면 상세한 요청을 작성할 수 있다.
title과 description 그리고 merge 요청을 받을 Assignee를 입력한 후 하단에서 source branch와 Target branch를 선택한다.
표현 그대로 member_a의 branch를 master branch로 병합해 달라는 요청이다. 설정 후 [submit merge request]를 클릭하면 Assignee에게 요청이 날아간다. 여기서는 이 사람을 manager라고 가정하자.
manager의 작업
이제 manager의 Merge Requests에서 merge 요청을 확인할 수 있다.
내용을 검토한 후 Merge를 클릭하면 코드 병합은 완료된다.
이제 remote의 master branch가 변경되었기 때문에 manager를 포함한 모든 개발자들은 변경된 master를 참조할 필요가 있다. remote에서 변경된 내용을 받아오는 작업을 pull이라고 한다.
Pull을 위한 메뉴는 두 가지가 제공되는데 [Pull]은 현재 사용 중인 branch를 가져온다. [Pull...]은 특정 branch를 지정해서 가져올 수 있다. 현재 사용중인 branch, 가져올 branch를 고려해서 선택하면 된다.
[Pull..]으로 master를 가져와보자. reference 항목에 가져올 master를 입력하면 자동으로 remote에서 이름을 가져오고 마지막 commit 내용도 보인다.
이후의 동작은 동일하다.
'tools & libs > git' 카테고리의 다른 글
[git]Eclipse에서 git clone timeout 설정 (0) | 2021.06.02 |
---|---|
Eclipse에서의 Git 활용 - 7: 자주 발생하는 문제 (3) | 2021.01.07 |
Eclipse에서의 Git 활용 - 5 : branch (0) | 2021.01.07 |
Eclipse에서의 Git 활용 - 4: history와 되돌리기 (0) | 2021.01.05 |
Eclipse에서의 Git 활용 - 3: local repository와 commit (0) | 2021.01.05 |
소중한 공감 감사합니다