git-2
git repository
git init
- local repository
(repo)
를 remote repo에 연결하는 방식이다.
git init
명령어를 입력하면 local repo가 생성된다.
- 사용자의 위치에
.git
directory가 생성된다.
- git의 repo는 directory 단위로 관리하는 것이 좋다.
git init
명령어를 사용할 때 현재 내가 위치한 directory path를 확인해야 한다.
- 잘못된 위치에서
git init
을 사용하여 local repo를 생성했을 경우, 생성된 .git
directory를 제거해주면 된다.
git remote add
: 생성된 local repo를 remote repo에 연결하는 명령어다.
$ git remote add origin https://github.com/{username}/{reponame}.git
$ git push -u origin master(main)
git에서는 master를 사용하지만 github에서는 main을 사용한다.
git clone
- remote repo를 복제하여 local repo를 생성하는 방법이다.
git clone REMOTE_REPO_URL
add, commit, push
git add FILE_NAME
- 새로 생성
(untracked)
되었거나 수정된 파일(modified)
을 staging area에 등록한다.
git commit
- staging area에 등록된 blob들을 local repo로 올린다.
git commit
명령어를 입력하면 등록된 에디터로 commit message를 등록할 수 있다.
git push
- local repe에 등록된 commit들을 remote repo에 올린다.
commit
commit 할 때 기억해야 할 것
- commit은 동작 가능한 최소단위로 자주 해야 한다.
- 해당 작업 단위에 수행된 모든 파일 변화가 해당 commit에 포함되어야 한다.
- 제목과 내용은 한 줄 띄어 분리한다.
Convetional Commits
참고 자료
- commit message를 작성할 때 다른 이용자가 보기 편하게 작성하는 것이 좋다.
- commit message의 제목은 문장이 아닌 구나 절로 작성하다.(50자 이내)
- commit message 제목에 prefix를 작성한다.
- 대표적인 prefix
- feat: feature, 기능 개발 관련 커밋
- fix: bug-fix, 오류 개선 혹은 버그 패치 커밋
- docs: documentation, 문서화 작업 커밋
- test: test, 테스트 관련 작업 커밋
- conf: configuration, 환경 설정 관련 커밋
- refactor: refactoring, 코드 개선 관련 커밋(내부 알고리즘 등)
- 그 외에 bulid, ci 등이 있다.
Convetianl Commmits example
feat: Add server.py
fix: Fix typo server.py
docs: Add README.md, LICENSE
conf: Create .env, .gitignore
refactor: Refactor user classes
branch
- branch는 가지로 git은 여러 개의 branch로 나누어 작업을 할 수 있다.
- branch 덕분에 비선형적으로 작업을 할 수 있다.
Create branch
git branch BRANCH_NAME
git branch
Switch branch
git checkout BRANCH_NAME
git switch BRANCH_NAME
git checkout
명령이 브랜치 이동과 시점 이동 두가지 기능을 하는 것이 적절하지 않아 git switch
와 git restore
두 가지 명령으로 분리 되었다.
- 브랜치를 변경하기 전에 작업 중인 브랜치의 변경사항을 모두 add, commit 후에 브랜치를 변경해야 한다.
Merge branch
- 다른 브랜치에서 작업하던 내용을 합칠 수 있다.
- 브랜치를 병합하기 위해서는 우선 현재 브랜치를 병할을 할 브랜치로 옮겨 주어야 한다.
- A 브랜치를 B 브랜치에 병합하려고 한다면 B로 옮겨야 한다.
git merge BRANCH_NAME
- 병합은 잘 될 수도 아닐 수도 있다.
슈뢰딩거의 머지
- 병합이 자동으로 이루어지지 않으면 conflict가 발생하고 해당 문자를 개발자가 직접 조정해야 한다.
- conflict 메세지를 잘 보면 어디서, 왜 conflict가 발생했는지 알 수 있다.
- conflict 된 파일을 보면 어떤 코드에서 conflict가 발생했는지 알 수 있다.
서로 원만하게 합의를 하면 된다.
Delete branch
git branch -D BRANCH_NAME
.gitignore
.gitignore
는 git이 파일을 추적(tracking)할 때, 특정 파일이나 폴더 등을 추적하지 않도록 명시하기 위해 작성한다.
.gitignore
에 작성된 리스트는 수정사항이 발생해도 git이 무시한다.
- gitignore.io에서 운영체제, IDE, 프로그래밍 언어를 선택하면
.gitignore
에 추가되어야 할 리스트를 생성해준다.
- 설정 파일 등이 주로 포함되고 다른 사람에게 보여주어서는 안되는 key 값 등도 포함된다.
LICENSE
- 해당 프로젝트를 어떻게 사용할 수 있는가 규정한다.
- 오픈 소스 프로젝트는 많은 부분에서 자유롭지만 라이센스는 신경써야 한다.
- MIT License
- MIT에서 만든 라이센스
- 모든 행동에 제약 없음
- 저작권자는 소프퉤어와 관련된 책임에서 자유로움
- Apache Licens 2.0
- Apache 재단이 만든 라이센스
- 특허권 관련 내용이 포함
- GNU General Public License v3.0
- 가장 많이 알려져 있으며 다른 라이센스에 비해 규정이 까다로움
- 해당 라이센스가 적용된 소스코드를 사용시 따라야할 의무사항 있음