Profile picture

[Git] Simple Git Workflow 실습하기

JaehyoJJAng2022년 03월 07일

타겟 레포지토리 Fork하기

image

위 사진처럼 타겟 레포지토리에서 fork 하여 내 깃허브로 가져오도록 함.

타겟 레포지토리 로컬로 가져오기

  • me: 나
  • you: 협업하는 사람

'me'와 'you'는 각각 자신의 로컬(작업폴더)로 fork한 레포지토리 clone

'me'

$ cd ~/git
$ git clone https://github.com/doosik-is-cute/me.git

'you'

$ cd ~/git
$ git clone https://github.com/doosik-is-cute/you.git

페어 간 레포지토리 연동

나('me')의 로컬에서 'you'의 리모트 레포지토리를 연결

git add remote pair https://github.com/doosik-is-cute/you.git

'you'의 로컬에서 'me'의 리모트 레포지토리를 연결

git add remote pair https://github.com/doosik-is-cute/me.git

코드 동기화하기

해당 파트에서 중요한 점은

push 할 때는 내 원격 레포지토리로

pull 받을 때는 pair의 원격지로부터

'me'의 로컬에서 파일 생성 후 자신의 리모트 레포로 Push

$ echo "Hello" >| hello.txt

$ git add hello.txt
$ git commit "Create hello.txt"
$ git push -u origin main

'you'의 로컬에서 'me'의 리모트 레포지토리를 pull

$ git pull pair main

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 266 bytes | 88.00 KiB/s, done.
From https://github.com/doosik-is-cute/driver-pair
 * branch            main       -> FETCH_HEAD
 + 94e7c02...4090216 main       -> pair/main  (forced update)
Updating 3944777..4090216
Fast-forward
 hello.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

정상적으로 코드가 동기화 되었는지 확인

$ cat hello.txt

Hello

이번에는 'you'의 로컬에서 파일 생성 후 자신의 리모트 레포로 Push

$ echo "I'm 'you'" > you.txt
$ git add you.txt
$ git commit -m "Create you.txt"
$ git push -u origin main

'me'의 로컬에서 'you' 리모트 레포지토리를 pull

$ git pull pair main

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 296 bytes | 98.00 KiB/s, done.
From https://github.com/doosik-is-cute/navigator-pair
 * branch            main       -> FETCH_HEAD
 + a5d384e...48d4ef2 main       -> pair/main  (forced update)
Updating 4090216..48d4ef2
Fast-forward
 you.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 you.txt
╭─jaehyolee@Jaehyoui-MacBookAir ~/git/dr

정상적으로 코드가 동기화 되었는지 확인

$ cat you.txt

I'm 'you'

코드병합 충돌 해결

  • git conflict 실습

강제 conflict 상황 만들기

'me' 로컬에서 아래와 같은 파이썬 파일을 작성하기

# git.py
class Git:
    @staticmethod
    def say_hello()-> None:
        print("Hello Mother")

'me'의 원격 레포지토리로 Push 하기

$ git add git.py
$ git commit -m "[ADD]: say_hello 메소드 구현]"
$ git push -u origin main

'you'의 로컬에서 'me'의 리모트 레포지토리 pull

$ git pull pair main

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 430 bytes | 143.00 KiB/s, done.
From https://github.com/doosik-is-cute/driver-pair
 * branch            main       -> FETCH_HEAD
   4090216..9a887e2  main       -> pair/main
Updating 48d4ef2..9a887e2
Fast-forward
 git.py | 4 ++++
 1 file changed, 4 insertions(+)
 create mode 100644 git.py

받아온 git.py 파일 수정

# git.py
class Git:
    @staticmethod
    def say_hello()-> None:
        print("Hello Father")

변경사항 Commit

$ git add git.py
$ git commit "[UPD]: say_hello 출력문 변경"
$ git push -u origin main

그 상황에서 'me'가 git.py 파일을 아래와 같이 수정

class Git:
    @staticmethod
    def say_Mather()-> None:
        print("Hello Mother")

'me' 에서 수정사항 커밋

$ git add git.py
$ git commit -m "[UPD]: 메소드명 변경"

그 상태에서 'me'가 'you'의 리모트 레포지토리를 pull

$ git pull pair main

❗️ 병합 충돌 발생!

remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 2 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 391 bytes | 130.00 KiB/s, done.
From https://github.com/doosik-is-cute/navigator-pair
 * branch            main       -> FETCH_HEAD
   48d4ef2..148b4d9  main       -> pair/main
Auto-merging git.py
CONFLICT (content): Merge conflict in git.py
Automatic merge failed; fix conflicts and then commit the result.

충돌파일 목록 확인하기

$ git status | grep "both"

both modified:   git.py

충돌 코드확인

class Git:
    @staticmethod
<<<<<<< HEAD
    def say_Mother()-> None:
        print("Hello Mother")
=======
    def say_hello()-> None:
        print("Hello Father")
>>>>>>> 148b4d943474e84e3e81514ae8a176e603ca8e88

충돌 해결하기 (아래코드로 변경)

class Git:
    @staticmethod
    def say_hello()-> None:
        print("Hello Father")

merge Commit

$ git add git.py
$ git commit

[main 0e1fb13] Merge branch 'main' of https://github.com/doosik-is-cute/navigator-pair

마무리

'me'의 원격 레포지토리로 수정사항 Push

$ git push -u origin main

'you' 로컬에서 'me'의 리모트 레포지토리로 pull

$ git pull pair main

Loading script...