프로그램을 만들었습니다. a.txt 파일을 수백번 수정하고 난 뒤
지금 수정한 파일을 원복해야 겠다는 생각을 하게 됩니다.
문제는 그때 백업을 하지 않았습니다.
이 때 사용하는 것이 git 입니다.
이는 프로젝트마다 파일을 관리하며
그 프로젝트의 상태를 버전으로 관리하는 것이 가장 큰 목표입니다.
이렇게 되면 협업을 할 때 아주 큰 이점을 가지고 있죠.
먼저 깃허브(GitHub) 에 가입합니다.
깃허브에는 수많은 개발자의 프로젝트 자료가 존재합니다.
이 때 사용되는 단어가 레포지토리(repository) 입니다.
Github 계정에 파일이나 폴더를 저장해두는 저장소 라고 생각하시면 됩니다.
이 자료를 내 컴퓨터에 가져와 자료를 수정하거나 삭제하고 추가하여 관리할 수 있고
권한이 없다면 다운로드 받은 뒤 나만의 프로젝트로 만드는 과정 (포크 : Fork) 를 할 수 있습니다.
깃허브는 커뮤니티일 뿐 PC에서 활용하려면 git 을 설치해야 합니다.
설치를 진행한 뒤 로컬 환경을 세팅해야 합니다.
자료를 다운로드 받기 위해서는 clone 이라는 작업을 해야 합니다.
zip 파일로 다운받는 방법도 존재하지만 우리는 가져와서
파일을 수정하고 깃허브에 올리거나 다운받는 과정을 해야 하기 때문에
git clone 을 하여 가져온다. 라고 생각하시면 됩니다.
Repository name 에 레포지토리 명을 입력합니다.
이 레포지토리를 공개(Public) 으로 할 지 비공개 (Private) 로 할 지 결정합니다.
https://github.com/rit245/wp_rading_theme.git
생성이 완료되었다면 레포지토리 경로가 생겼을 겁니다.
이 경로가 제 레포지토리 경로입니다,
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/계정명/레포지토리명.git
git push -u origin main
자 이제 내 컴퓨터 터미널에 돌아옵니다.
파일 복사 예정인 폴더를 만든 뒤 우측 마우스 클릭 후 Git Bash here 를 누르거나
터미널 (VS Code 도 있음) 를 통해 경로를 들어가 명령어를 입력합니다.
(위의 명령어는 참고만 해주세요)
git remote add origin https://github.com/계정명/레포지토리명.git
git branch -M main
git push -u origin main
요약만 한다면 위의 명령어만 입력해도 작동됩니다.
조금 더 이해할 수 있도록 다른 예제를 설명해보겠습니다.
이는 따라하실 필요는 없으며 이렇게도 활용될 수 있구나 라고 이해하신 뒤 넘어가주시면 되겠습니다.
이번에는 다른 사람의 깃 레포지토리를 가져와보는 법을 만들어보겠습니다.
참고로 다운은 받을 수 있지만 해당 레포지토리의 권한은 없기 때문에
수정은 불가능합니다.
깃헙에 있는 프로젝트에 들어갑니다. 우리는 원격저장소 주소가 필요합니다. 우측의 Code
를 클릭한 다음 SSH
를 클릭하여 원격 저장소 주소를 복사합니다. git@github.com:아이디/프로젝트명.git
으로 되어있을겁니다
$ cd c:\ # C: 에 접근합니다
$ mkdir newProject # 폴더를 생성합니다
$ cd c:\newProject # newProject 폴더에 접근합니다
$ git clone {원격 저장소 주소} # 내가 있는 폴더에 git 자료를 다운받습니다
c:\에 newProject 폴더를 만들고 c:\newProject 로 이동한 다음 git 자료를 다운받는 과정입니다.
모든 명령어를 숙지하면 좋겠지만
당장은 위의 명령어만 숙지하신 뒤
아래의 명령어들을 이해하시면 됩니다.
명령어 | 설명 |
---|---|
git -init | 현재 위치에서 지역 저장소를 만듭니다 |
git config git config -l git config –global user.name “사용자명” git config –global user.email “사용자이메일” | 환경설정 명령어 보기 환경설정 리스트 보기 깃 환경에서 사용자 이름을 설정 깃 환경에서 사용자 이메일을 설정 |
git help | 도움말을 봅니다 |
git status | 변경상태를 확인합니다 |
git add . git add {파일명.html} | 모든 파일을 스테이지에 올립니다 파일을 스테이지에 올립니다 |
git commit -m “설명” git commit -a -m “설명” | 커밋 메세지를 붙여 커밋합니다 모든 파일을 커밋합니다 |
git branch git branch {브랜치명} git branch -M main | 브랜치를 조회합니다 {브랜치명} 이라는 새로운 브랜치를 생성합니다 마스터 브랜치의 이름을 main 으로 변경합니다 |
git merge {브랜치명} git merge {브랜치명} –edit git merge {브랜치명} –no-edit git merge –abort | 브랜치명을 main 와 병합합니다 ++ 병합 후 vi 편집기로 커밋 메세지를 수정합니다 ++ 병합 후 아무것도 하지 않습니다 merge를 취소합니다 |
git switch {브랜치명} git switch -c {브랜치명} | {브랜치명}으로 이동합니다 {브랜치명}을 생성하면서 이동합니다 |
[switch, restore 사용 권장] git checkout {브랜치명} git checkout -b {브랜치명} | {브랜치명} 으로 이동합니다 {브랜치명} 이름의 새로운 브랜치를 만들고 이동합니다 |
git clone | 원격 저장소를 복제합니다. fork 와는 다릅니다 |
git push git push origin main git push origin {브랜치명} (주의) git push -u –force | 작업중인 자료를 업로드합니다 작업중인 자료를 origin/main에 업로드합니다. 작업중인 자료를 origin/{브랜치명} 에 업로드합니다. (주의) 현재 커밋된 자료를 강제로 올려버립니다. |
git difftool | 서버와 차이점을 알 수 있습니다 |
git pull git pull origin main | 원격 저장소 자료를 다운받습니다 원격 저장소 main 자료를 다운받습니다 |
git fetch | 원격 저장소의 커밋을 가져오기만 하고 merge하지 않습니다. 가져온 브랜치 내용은 origin/{브랜치} 로 저장됩니다 |
git stash git stash save git stash list git stash apply git stash apply stash@{1} git stash drop git stash drop stash@{1} git stash pop | 작업 트리의 수정 내용을 보관합니다 작업 트리의 수정 내용을 보관합니다 보관중인 수정 내용 목록을 출력합니다 보관한 내용을 적용합니다 보관한 내용 1번째를 적용합니다 보관한 내용중 가장 최근 항목을 삭제합니다 보관한 내용중 1번째를 삭제합니다 보관한 내용을 apply하고 삭제합니다 |
git log git log –pretty=oneline git log –online –all | 커밋 내역을 보여줍니다 커밋 내역을 한줄로 표기합니다 커밋 내용을 짧게 보여줍니다 |
touch .gitignore | 스테이징 추적&푸시를 제외할 파일을 생성합니다 |
git clean -f | Untrackd files 를 삭제합니다 |
git reset {파일명} git reset . | 스테이지에 올라간 파일을 내립니다 스테이지에 올라간 모든 파일을 내립니다 |
$ pwd : 내가 있는 경로 출력
$ cd (Change Directory) : 경로 변경
$ mkdir (Make Directory) : 폴더 생성
$ ls : 현재 경로에 있는 자료를 보여줍니다
$ ls -a : 숨김 파일을 포함한 모든 자료를 출력
$ ls -l : 세부 정보까지 출력
$ ls -d : 특정 파일이나 디렉토리를 지정하여 정보 확인
$ ls -R : 현재 경로의 하위 정보까지 확인
$ clear : 터미널 창의 내용을 삭제
$ exit : 터미널 창을 종료
$ vim {파일명.html}
# 주석 #
{제외하고싶은폴더}/
{빼고싶은 폴더}/
.gitignore 는 깃허브에 업로드 되는 것을 원하지 않는 파일을 차단하여 효율성을 높일 수 있는 파일입니다.
일반적으로 자주 차단하는 파일을 자동으로 만들어주는 사이트 를 통해 도움을 받을 수 있습니다.
• 저장소 ( 리포지토리 : Repository | repo ) 쉬운 말 : 패키지 저장소 어려운 말 : 버전 관리 시스템에서 파일이나 디렉터리 구조의 집합을 위해 메타데이터를 저장하는 자료 구조입니다. |
• 버전관리 ( Version Control ) 우리는 컴퓨터 자료를 저장할 때 최종본, 진짜 최종본 등으로 여러 버전을 나누어 저장합니다. 깃을 사용하면 프로젝트 히스토리의 모든 시점의 스냅샷을 보관하고 있기에 잃어버리거나 겹쳐쓰지 않을 수 있습니다. |
• 커밋 ( Commit ) 책갈피를 만듭니다. |
• 브랜치 ( Branch ) 프로젝트에서 자신만의 버전을 만들어 수정합니다. 작업이 완료되면 프로젝트의 메인 디렉토리인 마스터 에 브랜치를 머지 하게 됩니다 |
• pull 원격 저장소로부터 필요한 파일을 다운 + 병합합니다. 지역 브랜치와 원격 저장소 origin/main 가 같은 위치를 가르킵니다. (단순함) |
• Fetch : 가져오다 원격 저장소로부터 필요한 파일을 다운만 받습니다. 병합(Merge)은 따로 해야합니다. 이것을 써야하는 이유는 협업 때문인데, 같은 팀원이 먼저 변경사항을 커밋하고 push 하는 상황이 생깁니다. 그 때는 원격 저장소의 업데이트 된 내용이 나의 로컬 저장소에는 최신화가 되어있지 않을 것이기에 직접 파일을 확인하고 병합하는 과정이 필요합니다. <특징> 원래 내용과 바뀐 내용과의 차이를 알 수 있습니다 : git diff HEAD origin/main 커밋이 얼마나 되었는지 알 수 있습니다 : git log --decorate --all --oneline git merge origin/main 를 하면 git pull 상태와 같아집니다 |
• 포크 ( Fork : 🍴 ) 다른 사람의 리포지토리(원본) 을 그대로 복제하여 자신의 새로운 리포지토리(복제본) 를 만드는 기능입니다.포크한 복제본은 원본과 연결되어있습니다. 그렇기에 원본에 새로운 커밋이 생기면 복제본에 반영할 수 있습니다 복제본이라 해도 자신의 리포지토리이기 때문에 pull, push 모두 가능합니다 원본에 복제본의 코드를 건의 할 수 있습니다. Pull Request 를 하면 됩니다. |
• 클론 ( Clone ) 원격 저장소의 커밋을 가져오기만 하고 merge하지는 않습니다 가져온 브랜치 내용은 origin/{브랜치} 로 저장됩니다 |
• 스태시 ( Stash : 따로 떼어두다 ) 로컬에서 작업한 자료를 임시저장하여 둡니다. 커밋할 정도는 아닌데 작업을 도중 멈추어야 할 때 씁니다. 사용 예 : 현재 작업하고 있는 자료가 있는데 급하게 처리해야 할 요청이 있어 현재 내용을 저장해야 할 때 사용 예 : A 브랜치에서 작업해야 했는데 B 브런치에서 작업중이었을 경우 (임시저장) |
체크아웃 (Checkout)
독자적인 브랜치를 만듭니다. main 이 아닌 영역에서 작업하는 것이기 때문에 아무리 Push를 해도 문제가 생기지 않습니다 여기서 Push 를 하게 되면 Pull request 에 승인을 기다리게 됩니다.
Maser / Slave / blacklist / whitelist 라는 예명은 더이상 사용하지 않습니다.
나타니엘 프리드먼 – Github CEO
새로 프로젝트를 생성할 때의 메인 브랜치명이 master에서 main으로 변경되었습니다.
기존에 있던 프로젝트는 그대로 사용되고 있습니다.
그 외의 리스트는 다음과 같습니다
기본 브랜치 명을 더이상 master 로 사용하지 않기 때문에
이름을 main 브랜치로 수정하려면 위와 같이 진행해야 합니다
파일을 올리고 싶지 않다면 git ignore 파일을 생성하여 관리하면 됩니다.
git init
git status
git clone [clone copy SSH/HTTPS]
git add .
git commit -m 'description 작성'
git remote add origin [clone copy SSH/HTTPS]
git remote -v
git fetch origin
git pull origin master
git push -f origin master(<--강제실행 명령어 또는 git push -u origin master)
위에도 설명했듯이 서버의 깃 레포지토리에 따라 메인 레포지토리 명이 다를 수 있습니다.
보통은 main 을 기본으로 사용하고 있으며 오래된 레포지토리일수록 master 를 사용할 가능성이 높습니다.
git 처음 등록할 때 명령어 입력 과정에 대한 내용도 작성해주면 좋을 것 같아요