[깃] 터미널로 깃허브에 내 파일+폴더 올리기

unu·2021년 5월 17일
3

git/github

목록 보기
1/1

첫 프로젝트를 어느정도 마무리하고 깃허브에 올리려고 하는데 , 이럴수가 왜 파일만 업로드 되는거지..? 폴더 째로 업로드도 안되고 파일 이름도 바꿀 수 없다.
'깃허브는 정말 저장소의 역할을 하는구나' 하고 깨달았다.(아닐 수 있다)
터미널을 몇번 다뤄보고 소스트리로 옮겨가려 했으나 키체인이 어쩌고 저쩌고 하는 문제가 발생해서, 일단은 터미널에서 해결을 해보려했다.

우선 본인은 mac 환경임을 밝힌다.

1. 초기 설정

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

2. 로컬저장소와 깃 생성

디렉토리를 만들거나(make directory = mkdir), 깃을 만들 디렉토리로 이동(change directory = cd)한다.

1)로컬저장소 생성/ 이동

mkdir (폴더 경로)
ex) mkdir /Users/a./instagram
경로이름을 복사해서 적당히 붙여넣었다.

cd (폴더 경로)
ex) cd /Users/a./instagram
또는 vscode에서 해당 폴더를 열고 새 터미널[⌃⇧`]을 연다.`

2)깃 생성

git init
이 명령은 .git 이라는 하위 디렉토리를 만든다. .git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어 있다. 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지 않는다.

3. 업로드 할 파일 준비

1) 파일 상태확인

git status
수정된 파일이 있는지, 작업 내역 없이 깨끗한 디렉토리인지 등.. 파일의 상태를 볼 수 있는 명령어다.

2) Staging Area에 파일 올리기

git add (올릴 파일)
git add 뒤에 스테이지에 올릴 파일 이름을 적는다.

git add: 가장 기초적, rm 명령으로 제거된 파일은 add되지않음

git add --all
git add .
: status에 나온 변경사항을 모두 스테이지에 올려준다.

git add -u :  하나 이전의 스테이지와 비교해서 변경된 부분만 add. 새롭게 만들어진 파일은 add 하지않음.
git add -A : 새로만든 것, 수정, 삭제 등 모든 변경된 파일을 add 해준다.

3) 커밋하기

git commit -m '메세지'

4. Github에 push하기

1) 원격저장소 확인

git remote -v
혹시 이전에 원격저장소를 연결한 경우가 있다면, 원격저장소가 있는지 이 명령어로 확인한다.
-v는 좀더 상세하게 알아보고 싶을 때 덧붙인다.

2) 원격저장소 제거

git remote remove (기존 저장소 별명)
ex) git remote remove origin
기존의 원격저장소를 삭제하고 싶다면 위 명령을 써보라. 참고로 origin은 자동으로 등록되는 원격저장소 이름이다.

3) 원격저장소 추가

git remote add (단축이름) (url)
ex) git remote add origin https://github.com/idid/instagram-clone.git

단축이름은 origin 말고 다른 이름도 가능하다.
이렇게 추가 되었으면 이제 파일을 집어넣을 일만 남았다.

4) 원격저장소에 push 하기

git push (원격저장소 이름) (브랜치 이름)
git push origin main

(디폴트 브랜치가 최근에 master에서 main으로 바뀌었다고 한다. )


완성!😝

💣error!

한편 git push origin main으로 했음에도 아래와 같이 에러가 계속 떴다.

➜ instagram git:(main) git push origin main

To https://github.com/idid/instagram.git
 ! [rejected]        main -> main (fetch first)
error: 레퍼런스를 'https://github.com/idid/instagram.git'에 푸시하는데 실패했습니다
힌트: 리모트에 로컬에 없는 사항이 들어 있으므로 업데이트가
힌트: 거부되었습니다. 이 상황은 보통 또 다른 저장소에서 같은
힌트: 저장소로 푸시할 때 발생합니다.  푸시하기 전에
힌트: ('git pull ...' 등 명령으로) 리모트 변경 사항을 먼저
힌트: 포함해야 합니다.
힌트: 자세한 정보는 'git push --help'의 "Note about fast-forwards' 부분을
힌트: 참고하십시오.

구글링하면git push origin master이라고 다들 그러던데, 내가 master가 아니라 main으로 해서 이러나 싶었다. 하지만 막상 git push origin master으로 하면 새로운 브랜치가 생겨서 기존에 삭제했었던 파일들을 포함한 변경사항이 적용되지 않은 어느 과거시점 상태의 파일들이 올라가서 계속 저장소를 지우기를 반복했다.

해결

그런데 멘토가 -f를 덧붙여 줘서 해결 됐다.
강제적으로 push 하는 방법인데 f는 force의 f다.

➜ instagram git:(main) git push origin main -f

오브젝트 나열하는 중: 81, 완료.
오브젝트 개수 세는 중: 100% (81/81), 완료.
Delta compression using up to 12 threads
오브젝트 압축하는 중: 100% (78/78), 완료.
오브젝트 쓰는 중: 100% (81/81), 1.78 MiB | 2.89 MiB/s, 완료.
Total 81 (delta 14), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (14/14), done.
To https://github.com/idid/instagram.git
 + 63892f2...3ba7433 main -> main (forced update)
➜  instagram git:(main) 
profile
나 미대 나온 개발자야~

0개의 댓글