GitHub로 안드로이드 스튜디오 파일을 옮기던 도중...
위 사진과 같이 마구잡이 파일로 올라가거나
자꾸 main이 아닌 master에 파일이 올라가는 문제가 발생했다.
이거 찾으려고
구글링을 며칠을 했는지...;;
까먹지 않기 위해!! 기록으로 남긴다.
(허무함..무지 쉬움...)
먼저 새 폴더를 만든다. (그냥 의미 없는 폴더임.)
그 안에 GitHub에 올리고 싶은 프로젝트 파일을 넣어준다.
위 사진의 경우 'BMI'라는 새 폴더를 만들었고, 깃허브에 올릴 프로젝트 폴더명은 'BmiCalculator'이다.
BMI 폴더 우클릭 > 추가 옵션 표시 > Git Bash Here
그러면 이런 화면이 뜰 것이다!
[저장소를 처음 만드는 경우]
1. 깃허브에 원격 저장소(repository) 만들기
저장소에 대한 설명파일도 있는게 좋다. "Add a README file"을 체크해 주자.
2. 로컬 저장소 만들기
내 컴퓨터 폴더 중 깃허브에 올리려는 폴더에 마우스 우클릭하여 git bash를 열어주고 다음과 같이 입력한다.
//로컬 저장소 생성
$ git init
Initialized empty Git repository in D:/Android-Studio/BMI/.git/
여기서 .git 파일이 생성된다.
'.'으로 시작하는 폴더는 숨김처리 되므로 숨김 폴더 표시 설정을 하지 않았다면 보이지 않는 것이 정상이다!
3. 로컬 저장소와 원격 저장소 연결
원격 저장소의 주소를 이용해 두 저장소를 연결한다.
주소는 깃허브 저장소에서 <>Code 탭으로 이 누르면 보이는 HTTPS 탭에 적힌 주소를 사용하면 된다.
잘 모르겠으면 저장소 페이지 주소에서 뒤에 .git을 붙여주면 된다. 아래와 같은 형식이다.
: https://github.com/아이디/저장소이름.git
//원격 저장소와 연결
$ git remote add origin [원격저장소 주소]
*git bash
복사 = Ctrl + Insert
붙여넣기 = Shift + Insert
※ Tip 1
작업하다보면 폴더에 원격 저장소가 연결되어 있는지 확인하고 싶을 때가 있다.
이 경우 아래 명령어를 입력하면 연결된 저장소를 확인할 수 있다.
//연결된 원격 저장소 확인
$ git remote -v
※ Tip 2
원격 저장소를 잘못 연결해서 다시 정하거나, 기존에 연결했던 것을 삭제하고 싶을 때가 있다.
아래 명령어를 통해 원격 저장소와의 연결을 끊을 수 있다.
//기존 원격 저장소와의 연결 삭제
$ git remote rm origin
4. 파일 업로드 준비
branch 개념은 따로 설명하진 않겠지만 대충 버전이라고 이해하면 된다.
깃허브 저장소의 기본 branch 이름은 main이다. 따라서 파일도 main branch에 올려줘야 하는데,
로컬 저장소에서는 branch 이름이 기본으로 master로 되어있다.
원래 깃허브에서 기본 branch가 master였다가 노예제를 연상시킨다고 main으로 바뀌면서 이 차이가 생긴 것 같다.
그러므로 먼저 branch 이름을 master에서 main으로 바꿔줘야 한다.
//브랜치 이름 바꾸기
a9034@user MINGW64 /d/Android-Studio/BMI (master)
$ git branch -m master main
a9034@user MINGW64 /d/Android-Studio/BMI (main)
$
※ Tip 3
현재 내가 있는 branch를 확인하고 싶다면 아래 명령어를 이용하자.
위에서 브랜치 이름을 바꾸기 전에는 master라고 뜰 것이고, 바꾼 뒤에는 main이라고 뜰 것이다.
//현재 브랜치 이름 확인
$ git branch
※ Tip 4
저장소를 만들때마다 브랜치 이름을 변경하기 귀찮으니, 항상 main으로 이름짓도록 설정할 수 있다.
아래 명령어에서 브랜치 이름을 main으로 하여 입력하면, 이제 git init을 할 때마다 브랜치 이름이 main이 된다.
//브랜치 기본(default)이름 설정
$ git config --global init.defaultBranch [브랜치 이름]
이제 원격 저장소도 연결됐고, 브랜치도 main으로 바꿨으니 파일을 올리기만 하면 된다.
하지만 그 전에 할 일이 하나 더 있다!
지금 원격 저장소에는 로컬 저장소에 없는 README.md 파일이 있다. (저장소 만들 때 추가하지 않은 경우는 제외)
따라서 이걸 먼저 로컬 저장소로 가져와줘야 한다.
이렇게 원격 저장소에 있는 것을 로컬 저장소로 가져오는 것이 pull이다.
//(README.md가 있다면) 원격 저장소의 파일 가져오기
$ git pull origin [브랜치 이름]
//또는: 아래처럼 끌어오는 곳 생략 가능 (현재 작업중인 브랜치에서 pull됨)
$ git pull
main branch에서 가져올 것이기 때문에 git pull origin main 이라고 치면 된다.
이걸 하고나면 내 컴퓨터에도 원격 저장소에 있던 README.md 파일이 생긴 것을 볼 수 있다.
항상 파일을 올리기 전에는 pull을 해줘야 이후 작업이 정상적으로 처리된다.
*레파지토리 내 모든 파일을 당겨와야(pull) 한다.
$ git pull origin main
From https://github.com/mmingidan/GURU2
* branch main -> FETCH_HEAD
fatal: refusing to merge unrelated histories
$ git push origin main
To https://github.com/mmingidan/GURU2.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/mmingidan/GURU2.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
그러지 못했을 경우 위와 같은 오류가 난다.
이것은 신규로 만든 프로젝트에서 주로 발생하는데 서로 관련 기록이 없는 두 프로젝트를 병합할 때 git이 거부한다고 한다.
$ git pull origin main --allow-unrelated-histories
$ git pull origin main --allow-unrelated-histories
From https://github.com/mmingidan/GURU2
* branch main -> FETCH_HEAD
Merge made by the 'ort' strategy.
위와 같은 코드로 pull에 --allow-unrelated-histories를 붙여 진행하면 정상적으로 작동된다.
5. 파일 올리기
이제 드디어 파일을 올리는 단계다.
총 3단계로 이루어지는데, add → commit → push 순서이다.
정확한 비유는 아니지만 쉽게 얘기하자면, add는 슈퍼에서 장바구니("staging area")에 물건을 담는 거고, commit은 계산대에서 물건을 계산하는 거고, push는 구매한 물건을 들고 집, 즉 원격 저장소로 가는 거다. (그냥 느낌적인 설명이니 참고만 하자.)
먼저 add를 해보자. 추가할 파일을 "add" 뒤에 적어주면 되는데, 모든 변경사항을 추가하려면 '.'을 적는다.
나는 거의 항상 '.'를 사용한다.
//모든 변경사항을 올리는 경우
$ git add .
warning: LF will be replaced by CRLF in BmiCalculator/.gitignore.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in BmiCalculator/.idea/misc.xml.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in BmiCalculator/app/build.gradle.
The file will have its original line endings in your working directory
//특정한 파일만 올리는 경우
$ git add [파일/디렉토리]
※ Tip 5
add를 하기 전에, 현재 로컬 저장소에서 변경된 파일이 어떤 것들인지 확인해보는 것도 좋다.
아래 명령어를 입력해보자.
//현재 버전 상태 확인
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: BmiCalculator/.gitignore
new file: BmiCalculator/.idea/.gitignore
new file: BmiCalculator/.idea/compiler.xml
new file: BmiCalculator/.idea/gradle.xml
new file: BmiCalculator/.idea/kotlinc.xml
그럼 변경했거나 추가 혹은 삭제한 파일들의 목록이 빨간 글씨로 뜬다.
빨간색으로 뜨는 것은 untracked files, 즉 추적되지 않은 파일이라는 것으로
쉽게 얘기하면 장바구니에 아직 안 담았단 얘기다.
add를 해준 뒤에 다시 status를 확인해보면 추적이 되었다는 의미로 초록색으로 표시될 것이다.
※ Tip 6
만약 add를 했는데 이를 취소,즉 장바구니(staging area)에서 빼내려면?
//add한 파일 모두 취소
$ git rm --cached -r .
//특정 파일만 add 취소
$ git rm --cached [파일]
원격 저장소에 올릴 파일을 다 추가했다면 이제 commit을 할 차례다.
물건을 담는 단계에서는 물건이 맘에 안들면 다시 진열대에 내려놓을 수 있으니 비교적 자유로웠다.
하지만 한번 계산대에서 계산을 한 뒤에는, 마음이 바뀌면 번거롭게 결제 취소를 해야 하니 복잡하다.
그러니 commit은 조금 신중할 필요가 있다.
//커밋하기
$ git commit -m "commit message"
$ git commit -m "guru2"
[main (root-commit) 05b0895] guru2
47 files changed, 1045 insertions(+)
create mode 100644 BmiCalculator/.gitignore
create mode 100644 BmiCalculator/.idea/.gitignore
create mode 100644 BmiCalculator/.idea/compiler.xml
create mode 100644 BmiCalculator/.idea/gradle.xml
create mode 100644 BmiCalculator/.idea/kotlinc.xml
깃허브 저장소에서 파일 옆에 회색으로 적힌 글씨를 볼 수 있는데, 이게 바로 커밋 메시지이다.
커밋 메시지는 커밋이 어떤 변경사항을 담고 있는지 알려주는 글이니 잘 작성해주면 나중에 알아보기 좋다.
git commit -m "guru2" 이런 식으로 작성해주면 된다.
commit message (오른쪽 회색 글씨)
드디어 마지막 단계, 원격 저장소로 파일을 올릴 차례이다.
로컬에 있는 것을 밀어서, 즉 push 해서 올려준다.
main 브랜치에 올릴 것이니 git push origin main이라고 치면 된다.
//로컬 저장소에서 원격 저장소로 올리기
$ git push origin [브랜치 이름]
$ git push origin main
Enumerating objects: 82, done.
Counting objects: 100% (82/82), done.
Delta compression using up to 8 threads
Compressing objects: 100% (65/65), done.
Writing objects: 100% (82/82), 100.93 KiB | 4.39 MiB/s, done.
Total 82 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/mmingidan/GURU2.git
* [new branch] main -> main
//또는: 아래처럼 목적지 생략 가능 (현재 작업중인 브랜치로 push됨)
$ git push
이제 깃허브 저장소로 가보면, 파일이 업로드 된 것을 볼 수 있다!
[저장소가 이미 있는 경우]
이제 저장소도 만들었고 이미 업로드도 한 상태일 때 새로운 파일을 올려보자.
로컬 저장소를 만들고 연결하는 등의 과정은 이번엔 필요없고,
아래 명령어만 순서대로 입력하면 된다. (main 브랜치로 가정)
$ git pull origin main
$ git add .
$ git commit -m "commit message"
$ git push origin main
참고로 첫 번째 줄의 pull은 해당하는 경우에만 하면 된다.
예를 들어 다른 팀원이 main 브랜치에 뭔가 추가해서, 내 컴퓨터의 내용과 차이가 생겼을 수 있다. 이 경우 그 팀원이 만든 변경사항을 내 컴퓨터에도 반영하기 위해 pull을 먼저 해줘야 한다.
요약
//저장소 생성 및 연결
$ git init
$ git remote add origin [원격저장소 주소]
$ git branch -m master main
//파일 업로드
$ git pull (또는 git pull origin main)
$ git add .
$ git commit -m "commit message"
$ git push (또는 git push origin main)
//추가적인 명령어
$ git remote -v
$ git remote rm origin
$ git branch
$ git config --global init.defaultBranch [브랜치 이름]
$ git status
$ git rm --cached -r .
'개발 > Git' 카테고리의 다른 글
READ.md 작성법! (0) | 2022.11.24 |
---|---|
cmd창에서 GitHub 레파지토리 이동하기 (0) | 2022.11.24 |