본문 바로가기

Progmming/git

[Git] 여러 기기(맥북 2대) 교차 작업 시 깃 히스토리/파일 권한 꼬임 해결 및 자동화 팁

집과 외부, 혹은 메인 기기(1맥)와 서브 기기(2맥)를 넘나들며 개발을 하다 보면 깃 그래프(Git Graph)상으로는 싱크가 맞는데 로컬에서 파일이 멋대로 수정되었다고 무더기로 잡히거나, 원격지 코드가 제대로 반영되지 않는 통곡의 벽을 만나곤 한다.

오늘 제대로 삽질하면서 완벽하게 정리한 원인과 해결 명령어, 그리고 터미널 단축키 자동화 방법까지 블로그에 기록해 둔다.

1. 문제 상황 및 원인 파악

❓ 상황

  • 1번 맥북에서는 로컬, 원격 서버(가비아), GitHub 모두 정상 싱크 확인.
  • 2번 맥북으로 오니 GitHub 커밋 그래프는 정상인데, git status를 치면 내가 수정하지도 않은 파일들이 무더기로 다르다고 잡히는 현상 발생.

🔍 원인

  1. 파일 권한(Permission) 불일치: 맥북 환경에 따라 파일의 보안 권한(읽기/쓰기/실행)이 미세하게 다르게 받아지면, 깃은 파일 내부 코드가 100% 똑같아도 "파일이 변경되었다"고 오해한다.
  2. 줄바꿈 문자(Line Ending) 차이: 기기마다 LF / CRLF 줄바꿈 설정이 꼬이면 눈에 안 보이는 문자 때문에 다른 파일로 인식한다.
  3. 핫스팟 통신 환경 문제: 외부에서 핸드폰 핫스팟(테더링)을 쓰면 IP가 수시로 바뀌는 유동 IP 특성 및 통신사 방화벽 때문에 서버(SFTP) 주소가 일시적으로 인식이 안 되거나 꼬여서 로컬 파편이 남을 수 있다.

2. 해결 프로세스 

로컬의 지저분하게 꼬인 상태나 권한 문제를 다 무시하고, GitHub에 올라가 있는 청정 원본을 기준으로 로컬을 100% 강제 동기화시키는 방법이 가장 확실하다.

Bash
 
# 1. GitHub 원격 저장소의 최신 정보를 강제로 새로고침(갱신)한다.
git fetch origin

# 2. 내 로컬 상태를 GitHub 원격의 최신 브랜치(main) 상태로 강제 리셋해 버린다.
git reset --hard origin/main

(※ 만약 프로젝트 메인 브랜치명이 master라면 끝에만 origin/master로 변경)

이 조합을 쓰고 나면 귀신같이 꼬여있던 무더기 파일 변경 건들이 싹 정리되고 GitHub 웹사이트와 완벽하게 싱크가 맞는다.

3. 매번 치기 귀찮으니 '단축 명령어(Alias)'로 자동화하기

기기를 바꿀 때마다 매번 터미널을 열고 저 긴 명령어를 치는 건 개발자로서 용납할 수 없다. 딱 네 글자 sync만 치면 알아서 돌도록 터미널 엔진(zsh)에 매크로를 심어두자.

🛠️ 단축키 등록 방법 (1맥, 2맥 공통 적용)

  1. 터미널을 열고 아래 명령어로 zsh 설정 파일을 연다.
  2. Bash
     
    nano ~/.zshrc
    
  3. 화살표 키를 이용해 화면 맨 밑바닥(최하단 빈 줄)까지 내려간다. (기존에 설치된 개발 툴 설정들이 많아도 절대 지우지 말고 맨 밑에 얹어야 함!)
  4. 맨 밑에 아래 알맹이 문장을 그대로 복사해서 붙여넣는다.
  5. Bash
     
    alias sync="git fetch origin && git reset --hard origin/main"
    
  6. 저장 및 탈출: Ctrl + O 누르고 ➡️ Enter (저장 완료) ➡️ Ctrl + X (편집기 종료)
  7. 변경된 설정을 현재 터미널에 즉시 반영한다.
  8. Bash
     
    source ~/.zshrc
    

4. 최종 요약 & 교차 작업 황금 루틴

이제 환경 세팅 끝! 어느 기기에서든 터미널에 sync 네 글자만 치면 1초 만에 GitHub 최신본으로 강제 동기화가 끝난다.

앞으로 다중 기기 작업 시 이 루틴만 지키자.

  1. 1맥에서 사용종료 할 때: 반드시 GitHub에 git push 해두기.
  2. 2맥에서 사용시작 할 때: 터미널 열고 sync 쳐서 완벽한 원본으로 싱크 맞추고 코딩 시작하기.

주의: 만약 터미널 켤 때 잠깐 zsh 떴다가 bash 엔진으로 강제 전환되는 현상이 있다면, ~/.zshrc 파일 안에 가독성 태그인 ```bash 같은 문자열이 실수로 같이 복사되어 들어갔는지 꼭 확인할 것! (그것 때문에 0.1초 만에 bash로 강제 전환되는 삽질을 겪었다 😂)