더북(TheBook)

변경한 매니페스트 파일을 추가하고 커밋한다.

shinjaehun@losttemple:/etc/puppet$ sudo git add manifests/site.pp
shinjaehun@losttemple:/etc/puppet$ sudo git commit -m 'Removed file resource.'
[master d283328] Removed file resource.
1 file changed, 3 deletions(-)

git push 명령으로 원격 저장소에 바뀐 내용을 전송한다. 전송이 끝나면 깃허브 원격 저장소( https://github.com/jaehun-shin/puppet_vm에도 매니페스트 파일 manifests/site.pp가 변경된 것을 확인할 수 있을 것이다.

shinjaehun@losttemple:/etc/puppet$ sudo git push origin master
Username for 'https://github.com': jaehun-shin
Password for 'https://jaehun-shin@github.com': ********
To https://github.com/jaehun-shin/puppet_vm.git
   bd228db..d283328 master -> master

ShinJaehun 사용자는 vm01.linuxmaster에서 jaehun-shin 사용자가 변경한 내용을 반영하고자 한다. 매번 git clone한다면 전체 저장소의 파일을 받아와야 하므로 시간도 오래 걸릴 뿐 아니라 저장소를 일관되게 관리하기 어렵다. 따라서 변경된 부분만 받아와서 갱신하는 편이 바람직하다. 일단 git remote -v 명령을 실행하면 시스템에 저장된 원격 저장소 주소  https://github.com/ShinJaehun/puppet_vm을 확인할 수 있다.

administrator@vm01:~/puppet_vm$ git remote -v
origin https://github.com/ShinJaehun/puppet_vm.git (fetch)
origin https://github.com/ShinJaehun/puppet_vm.git (push)

변경된 파일을 받아올 원격 저장소를 추가한다. 이 주소는 퍼펫 설정 파일을 직접 관리하던 호스트 losttemple의 원격 저장소(원본 저장소)  https://github.com/jaehun-shin/puppet_vm으로 upstream이라는 이름으로 저장했다.

administrator@vm01:~/puppet_vm$ git remote add upstream https://github.com/jaehun-shin/puppet_vm.git
administrator@vm01:~/puppet_vm$ git remote -v
origin  https://github.com/ShinJaehun/puppet_vm.git (fetch)
origin  https://github.com/ShinJaehun/puppet_vm.git (push)
upstream    https://github.com/jaehun-shin/puppet_vm.git (fetch)
upstream    https://github.com/jaehun-shin/puppet_vm.git (push)

바뀐 부분의 내용을 받아오는 명령은 git fetch이다. 원본 저장소(upstream)에서 바뀐 부분만 받아올 것이다.

administrator@vm01:~/puppet_vm$ git fetch upstream
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/jaehun-shin/puppet_vm
 * [new branch]      master     -> upstream/master

가지 상태를 확인해보면 master 외에 원격 저장소의 주소인 origin과 upstream이 존재한다. origin은 포크한 저장소이며 upstream은 원본 저장소이다. origin과 master는 같은 커밋을 가리키고 있지만 upstream은 ‘Remove file resource’라는 새로운 커밋을 가리킨다.

administrator@vm01:~/puppet_vm$ git branch -va
* master                  bd228db Added vim_upgrade module to testserver.
  remotes/origin/HEAD     -> origin/master
  remotes/origin/master   bd228db Added vim_upgrade module to testserver.
  remotes/upstream/master d283328 Removed file resource

git merge 명령으로 upstream의 커밋을 합쳐 반영하자.

administrator@vm01:~/puppet_vm$ git merge upstream/master
Updating bd228db..d283328
Fast-forward
 manifests/site.pp | 3 ---
 1 file changed, 3 deletions(-)

매니페스트 파일 manifests/site.pp를 살펴보면 file 리소스가 삭제된 상태를 확인할 수 있다. upstream에서 수정한 내용이 로컬 시스템에 성공적으로 반영되었다.

node 'vm01.linuxmaster.com' {
   include sshd
   include vim_upgrade
}

변경한 내용을 원격 저장소 ShinJaehun/puppet_vm에 반영해서 동기화시키기 위해 git push한다.

administrator@vm01:~/puppet_vm$ git push origin master
Username for 'https://github.com': ShinJaehun
Password for 'https://ShinJaehun@github.com': ********

그림 11-24는 지금까지 한 작업을 보여준다. 먼저 원본 원격 저장소와 연결된 시스템에서 git push로 변경을 반영했다. 로컬 시스템 vm01.linuxmaster.com에서는 git fetch 명령으로 변경된 부분을 받아오고 git merge 명령으로 병합했다. 마지막으로 git push 명령으로 원격 저장소에 변경된 내용을 동기화했다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.