타겟 레포지토리 Fork하기
위 사진처럼 타겟 레포지토리에서 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