Git

GreenBean·2022년 7월 28일
0
post-thumbnail

Git

Tip! 순서

  • Git 사용자 정보 확인하고 등록하기
  • 리모트 저장소 확인
  • Git push!

Git 최초 설정

  • Git을 설치하고 나면 Git의 사용 환경을 적절하게 설정해 주어야 함
    • 환경 설정은 한 컴퓨터에서 한 번만 하면 됨
    • 설정한 내용은 Git을 업그레이드해도 유지됨
    • 언제든지 다시 바꿀 수 있는 명령어도 있음
  • git config라는 도구로 설정 내용을 확인하고 변경할 수 있으며 Git은 이 설정에 따라 동작하는데, 이 때 사용하는 설정 파일은 세 가지가 존재
    • /etc/gitconfig 파일
      • 시스템의 모든 사용자와 모든 저장소에 적용되는 설정
      • git config --system 옵션으로 이 파일을 읽고 쓸 수 있음
      • 이 파일은 시스템 전체 설정파일이기 때문에 수정하려면 시스템의 관리자 권한이 필요
    • ~/.gitconfig, ~/.config/git/config 파일
      • 특정 사용자(즉 현재 사용자)에게만 적용되는 설정
      • git config --global 옵션으로 이 파일을 읽고 쓸 수 있음
      • 특정 사용자의 모든 저장소 설정에 적용됨
    • .git/config 파일
      • 이 파일은 Git 디렉토리에 있고 특정 저장소(혹은 현재 작업 중인 프로젝트)에만 적용됨
      • --local 옵션을 사용하면 이 파일을 사용하도록 지정할 수 있지만 기본적으로 이 옵션이 적용되어 있음
      • 이 옵션을 적용하려면 Git 저장소인 디렉토리로 이동 한 후 적용 가능
  • 각 설정은 역순으로 우선시 됨
    • .git/config/etc/gitconfig 보다 우선됨

사용자 정보

  • Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자 이름과 이메일 주소를 설정하는 것
    • Git은 커밋할 때마다 이 정보를 사용하며 한 번 커밋한 후에는 정보를 변경할 수 없음
# 사용자 확인
$ git config user.name
$ git config user.email

# 사용자 설정 
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
  • --global 옵션으로 설정하는 것은 딱 한 번만 하면 됨
    • 해당 시스템에서 해당 사용자가 사용할 때는 이 정보를 사용하며 만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶으면 --global 옵션을 빼고 명령을 실행
    • GUI 도구들은 처음 실행할 때 이 설정을 확인

설정 확인

  • git config --list 명령을 실행하면 설정한 모든 것을 보여주어 바로 확인 가능
# 설정 확인
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
  • Git은 같은 키를 여러 파일 (예시: /etc/gitconfig~/.gitconfig) 에서 읽기 때문에 같은 키가 여러 개 있을 수도 있는데, 그러면 Git은 나중 값을 사용함
  • git config <key> 명령으로 Git이 특정 Key에 대해 어떤 값을 사용하는지 확인할 수 있음
# 사용자 확인
$ git config user.name
John Doe

Tip! 추가 자료

리모트 저장소

  • 리모트 저장소를 관리할 줄 알아야 다른 사람과 함께 일할 수 있음
    • 리모트 저장소는 인터넷이나 네트워크 어딘가에 있는 저장소를 말함
    • 저장소는 여러 개가 있을 수 있는데 어떤 저장소는 읽고 쓰기 모두 할 수 있고 어떤 저장소는 읽기만 가능할 수 있음
    • 간단히 말해서 다른 사람들과 함께 일한다는 것은 리모트 저장소를 관리하면서 데이터를 거기에 Push 하고 Pull 하는 것
    • 리모트 저장소를 관리한다는 것은 저장소를 추가, 삭제하는 것뿐만 아니라 브랜치를 관리하고 추적할지 말지 등을 관리하는 것을 말함

리모트 저장소 확인하기

  • git remote 명령으로 현재 프로젝트에 등록된 리모트 저장소를 확인할 수 있음
    • 이 명령은 리모트 저장소의 단축 이름을 보여줌
    • 저장소를 Clone 하면 origin이라는 리모트 저장소가 자동으로 등록되기 때문에 origin이라는 이름을 볼 수 있음
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
  • -v 옵션을 주어 단축이름과 URL을 함께 볼 수 있음
$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)
  • 리모트 저장소가 여러 개 있다면 이 명령은 등록된 전부를 보여줌
    • 여러 사람과 함께 작업하는 리모트 저장소가 여러개라면 아래와 같은 결과를 얻을 수도 있음
$ cd grit
$ git remote -v
bakkdoor  https://github.com/bakkdoor/grit (fetch)
bakkdoor  https://github.com/bakkdoor/grit (push)
cho45     https://github.com/cho45/grit (fetch)
cho45     https://github.com/cho45/grit (push)
defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)
  • 이렇게 리모트 저장소가 여러 개 등록되어 있으면 다른 사람이 기여한 내용(Contributions)을 쉽게 가져올 수 있음
    • 어떤 저장소에는 Push 권한까지 제공하기도 하지만 일단 이 화면에서 Push 가능 권한까지는 확인할 수 없음

리모트 저장소 추가하기

  • 기존 워킹 디렉토리에 새 리모트 저장소를 쉽게 추가할 수 있는데 git remote add <단축이름> <url> 명령을 사용
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)
pb	https://github.com/paulboone/ticgit (fetch)
pb	https://github.com/paulboone/ticgit (push)
  • 이제 URL 대신에 pb 라는 이름을 사용할 수 있음
    • 예를 들어 로컬 저장소에는 없지만 Paul의 저장소에 있는 것을 가져오려면 아래과 같이 실행
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
 * [new branch]      master     -> pb/master
 * [new branch]      ticgit     -> pb/ticgit
  • 로컬에서 pb/master 가 Paul의 master 브랜치
    • 이 브랜치를 로컬 브랜치중 하나에 Merge 하거나 Checkout 해서 브랜치 내용을 자세히 확인할 수 있음

리모트 저장소를 Pull 하거나 Fetch 하기

  • 리모트 저장소에서 데이터를 가져오려면 간단히 아래와 같이 실행
$ git fetch <remote>
  • 이 명령은 로컬에는 없지만, 리모트 저장소에는 있는 데이터를 모두 가져오는데, 그러면 리모트 저장소의 모든 브랜치를 로컬에서 접근할 수 있어서 언제든지 Merge를 하거나 내용을 살펴볼 수 있음
  • 저장소를 Clone 하면 명령은 자동으로 리모트 저장소를 origin 이라는 이름으로 추가
    • 그래서 나중에 git fetch origin 명령을 실행하면 Clone 한 이후에 (혹은 마지막으로 가져온 이후에) 수정된 것을 모두 가져옴
    • git fetch 명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 Merge 하지 않기 때문에 로컬에서 하던 작업을 정리하고 나서 수동으로 Merge 해야 함
  • 그냥 쉽게 git pull 명령으로 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 Merge 시킬 수 있음
    • 먼저 git clone 명령은 자동으로 로컬의 master 브랜치가 리모트 저장소의 master 브랜치를 추적하도록 함
      • 리모트 저장소에 master 브랜치가 있다는 가정 전제
    • 그리고 git pull 명령은 Clone 한 서버에서 데이터를 가져오고 그 데이터를 자동으로 현재 작업하는 코드와 Merge 시킴

리모트 저장소에 Push 하기

  • 프로젝트를 공유하고 싶을 때 Upstream 저장소에 Push 할 수 있는데 이 명령은 git push <리모트 저장소 이름> <브랜치 이름>으로 단순
    • master 브랜치를 origin 서버에 Push 하려면 아래와 같이 서버에 Push
$ git push origin master
  • 이 명령은 Clone 한 리모트 저장소에 쓰기 권한이 있고, Clone 하고 난 이후 아무도 Upstream 저장소에 Push 하지 않았을 때만 사용할 수 있음
    • 다시 말해서 Clone 한 사람이 여러 명 있을 때, 다른 사람이 Push 한 후에 Push 하려고 하면 Push 할 수 없음
    • 먼저 다른 사람이 작업한 것을 가져와서 Merge 한 후에 Push 할 수 있음

리모트 저장소 살펴보기

  • git remote show <리모트 저장소 이름> 명령으로 리모트 저장소의 구체적인 정보를 확인할 수 있음
    • origin 같은 단축이름으로 이 명령을 실행하면 아래와 같은 정보를 볼 수 있음
$ git remote show origin
* remote origin
  Fetch URL: https://github.com/schacon/ticgit
  Push  URL: https://github.com/schacon/ticgit
  HEAD branch: master
  Remote branches:
    master                               tracked
    dev-branch                           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
  • 리모트 저장소의 URL과 추적하는 브랜치를 출력
    • 이 명령은 git pull 명령을 실행할 때 master 브랜치와 Merge 할 브랜치가 무엇인지 보여줌
    • git pull 명령은 리모트 저장소 브랜치의 데이터를 모두 가져오고 나서 자동으로 Merge 할 것이며 가져온 모든 리모트 저장소 정보도 출력함
$ git remote show origin
* remote origin
  URL: https://github.com/my-org/complex-project
  Fetch URL: https://github.com/my-org/complex-project
  Push  URL: https://github.com/my-org/complex-project
  HEAD branch: master
  Remote branches:
    master                           tracked
    dev-branch                       tracked
    markdown-strip                   tracked
    issue-43                         new (next fetch will store in remotes/origin)
    issue-45                         new (next fetch will store in remotes/origin)
    refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    dev-branch merges with remote dev-branch
    master     merges with remote master
  Local refs configured for 'git push':
    dev-branch                     pushes to dev-branch                     (up to date)
    markdown-strip                 pushes to markdown-strip                 (up to date)
    master                         pushes to master                         (up to date)
  • 브랜치명을 생략하고 git push 명령을 실행할 때 어떤 브랜치가 어떤 브랜치로 Push 되는지 보여줌
    • 또 아직 로컬로 가져오지 않은 리모트 저장소의 브랜치는 어떤 것들이 있는지, 서버에서는 삭제됐지만 아직 가지고 있는 브랜치는 어떤 것인지, git pull 명령을 실행했을 때 자동으로 Merge 할 브랜치는 어떤 것이 있는지 보여줌

리모트 저장소 이름을 바꾸거나 리모트 저장소를 삭제하기

  • git remote rename 명령으로 리모트 저장소의 이름을 변경할 수 있음
    • 예를 들어 pb 를 paul 로 변경하려면 git remote rename 명령을 사용
$ git remote rename pb paul
$ git remote
origin
paul
  • 로컬에서 관리하던 리모트 저장소의 브랜치 이름도 바뀐다는 점을 생각해야함
    • 예시: 여태까지 pb/master 로 리모트 저장소 브랜치를 사용했으면 이제는 paul/master 라고 사용해야 함
  • 리모트 저장소를 삭제해야 한다면 git remote removegit remote rm 명령을 사용
    • 서버 정보가 바뀌었을 때, 더는 별도의 미러가 필요하지 않을 때, 더는 기여자가 활동하지 않을 때 필요
$ git remote remove paul
$ git remote
origin
  • 위와 같은 방법으로 리모트 저장소를 삭제하면 해당 리모트 저장소에 관련된 추적 브랜치 정보나 모든 설정 내용도 함께 삭제됨
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글