본문 바로가기

프로그래밍 놀이터/Tips146

[도서 정리] 10. Git 의 내부 - ProGit [도서 정리] 10. Git 의 내부 - ProGit -git 이 얼마나 유연하고 강력한지 이해하려면 이 장의 내용을 꼭 알아야 한다. -git 은 기본적으로 content-addressable 파일 시스템이고, 그 위에 vcs 사용자 인터페이스가 있는 구조다.git 초기에는 사용자 인터페이스가 훨씬 복잡했었다.VCS 가 아니라 파일 시스템을 강조했었기 때문이다. 10.1. Plumbing 명령과 Porcelain 명령 -매우 많은 저수준 명령어로 구성돼 있고 이 명령어들을 유닉스 스타일로 엮어서 실행하거나 스크립트로 만들어 사용하도록 설계되었다.이런 저수준 명령어는 Plumbing 명령어라 부르고, 좀 더 사용자에게 친숙한 사용자용 명령어는 Porcelain 명령어라고 부른다. -Plumbing 명령어.. 2020. 1. 15.
[도서 정리] 9. Git 과 여타 버전 관리 시스템 - ProGit [도서 정리] 9. Git 과 여타 버전 관리 시스템 - ProGit 9.1. Git: 범용 Client * Git 과 Subversion -git 이 자랑하는 또 하나의 기능은 git svn 이라는 양방향 subversion 지원 도구이다.git 을 subversion 클라로 사용할 수 있으므로 로컬에서는 git 의 기능을 활용하고 push 할 때는 subversion 서버에 push 할 수 있다. -git 과 subversion 을 이어주는 명령은 git svn 으로 시작한다.우리가 로컬 브랜치와 머지를 맘대로 쓸 수 있다 하더라도 최대한 일직선으로 히스토리를 유지하는 게 좋다.git 저장소처럼 사용하지 않기 때문이다.히스토리를 재작성해서 push 하지 말아야 한다. git 을 사용하는 동료들끼리 따.. 2020. 1. 14.
[도서 정리] 8. Git 맞춤 - ProGit [도서 정리] 8. Git 맞춤 - ProGit 8.1. GIt 설정하기 -git 은 내장된 기본 규칙을 따르지만 설정된 것이 있으면 그에 따른다. git 은 먼저 /etc/gitconfig 파일을 찾는다.이 파일은 시스템에 있는 모든 사용자와 모든 저장소에 적용되는 설정 파일이다.git config —system 을 이용하면 이 파일을 사용한다. 다음으로 ~/.gitconfig 파일을 찾는다.이 파일은 해당 사용자에게만 적용되는 설정파일이다.—global 옵션을 주면 git 은 이 파일을 사용한다. 마지막으로 현재 작업중인 저장소의 git 디렉터리에 있는 .git/config 파일을 찾는다.이 파일은 해당 저장소에만 적용된다. -각 설정 파일에 중복된 설정이 있으면 순서대로 덮어쓴다.즉 .git/con.. 2020. 1. 13.
[도서 정리] 7. Git 도구 #2 - ProGit [도서 정리] 7. Git 도구 #2 - ProGit 7.7. Reset 명확히 알고 가기 * 세 개의 트리 -git 은 일반적으로 세 가지 트리를 관리하는 시스템이다. HEAD : 마지막 커밋 스냅샷, 다음 커밋의 부모 커밋Index :다음에 커밋할 스냅샷워킹 디렉터리 : 샌드박스 -HEAD 는 현재 브랜치를 가리키는 포인터이며, 브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다.지금의 HEAD 가 가리키는 커밋은 바로 다음 커밋의 부모가 된다.단순히 생각하면 HEAD 는 마지막 커밋의 스냅샷이다. -HEAD 스냅샷의 디렉터리 리스팅과 각 파일의 SHA-1 체크섬을 보려면 아래와 같이 한다.$ git cat-file -p HED$ git ls-tree -r HEAD cat-file 과 ls-.. 2020. 1. 12.
[도서 정리] 7. Git 도구 #1 - ProGit [도서 정리] 7. Git 도구 #1 - ProGit 7.1. 리비전 조회하기 * 리비전 하나 가리키기 * SHA-1 줄여 쓰기 -Git 은 해시값의 앞 몇 글자만으로도 어떤 커밋인지 충분히 식별할 수 있다.중복되지 않으면 해시값의 앞 4자만으로도 나타낼 수 있다. -git show [part_of_hash] 로 특정 커밋을 조회할 수 있다.$ git show -git log 명령에 —abbrev-commit 이라는 옵션을 추가하면 짧고 중복되지 않는 해시값을 보여준다.기본으로 7자를 보여주고 해시값이 중복되는 경우 더 긴 해시값을 보여준다.보통은 8자에서 10자 내외로도 충분히 유일하게 커밋을 나타낼 수 있다. -참고로 리눅스 커널은 45만 개 이상의 커밋, 360만 개 이상의 오브젝트가 있지만, 해시.. 2020. 1. 11.
[도서 정리] 6. GitHub - ProGit 6. GitHub - ProGit -GitHub은 가장 큰 git 저장소 호스트이다. 6.1. 계정 만들고 설정하기 * SSH 사용하기 -https:// 프로토콜로도 git 저장소를 사용하는데 부족함이 없다.간단히 사용자 이름과 암호로 인증만 하면 된다.공개 프로젝트를 clone 하는 데는 인증도 필요 없다.그러나 프로젝트를 fork 하고 그 프로젝트에 push 할 때면 SSH 가 필요하다. -SSH 리모트를 쓰려면 공개키를 설정해야 한다. * 아바타 * 사용자 이메일 주소 * 투팩터 인증 (Two Factor Authentication) -2FA 는 최근 들어 인기가 높아지는 인증 매커니즘이다.암호를 도둑맞았을 때 위험을 완화하기 위해 사용한다.인증 수단을 2가지 사용하며, 둘 중 한 가지 방법만 뚫어.. 2020. 1. 10.
[도서 정리] 5. 분산 환경에서의 Git - ProGit 5. 분산 환경에서의 Git - ProGit 5.1. 분산환경에서의 워크플로 -중앙집중형 버전 관리 시스템(CCVS)에서는 각 개발자는 중앙 저장소를 중심으로 하는 하나의 노드일 뿐이다.하지만 git 에서는 각 개발자의 저장소가 하나의 노드이기도 하고 중앙 저장소 같은 역할도 할 수 있다.즉, 모든 개발자는 다른 개발자의 저장소에 일한 내용을 전송하거나, 다른 개발자들이 참여할 수 있도록 자신이 운영하는 저장소 위치를 공개할 수도 있다. * 중앙집중식 워크플로 * Integration-Manager 워크폴로 -다른 개발자는 읽기만 가능하고 자신은 쓰기도 가능한 공개 저장소를 만드는 워크플로.이 워크플로에는 보통 프로젝트를 대표하는 하나의 공식 저장소가 있다.기여자는 우선 공식 저장소를 하나 clone 하.. 2020. 1. 9.
[도서 정리] 4. Git 서버 - ProGit 4. Git 서버 - ProGit -리모트 저장소는 일반적으로 워킹 디렉터리가 없는 bare 저장소다.이 저장소는 협업용이기 때문에 체크아웃이 필요 없다.그냥 git 데이터만 있으면 된다.다시 말해 bare 저장소는 .git 디렉토리만 있는 저장소다. 4.1. 프로토콜 -Local, HTTP, SSH, Git 이렇게 네 가지 프로토콜을 사용할 수 있다. * 로컬 프로토콜 -리모트 저장소가 단순히 디스크의 다른 디렉터리에 있을 때 사용한다.팀원들이 전부 한 시스템에 로그인하여 개발하거나 아니면 NFS(Network File System) 같은 것으로 파일 시스템을 공유하고 있을 때 사용한다.이런 상황은 문제가 될 수도 있다.모든 저장소가 한 시스템에 있기 때문에 한 순간에 모두 잃을 수 있다. -$ git.. 2020. 1. 8.
[도서 정리] 3. Git 브랜치 - ProGit 3. Git 브랜치 - ProGit 3.1. 브랜치란 무엇인가 -Git 은 데이터를 변경사항(Diff)으로 기록하지 않고 일련의 스냅샷으로 기록한다.커밋하면 Git 은 현 staging area 에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메시지 같은 메타데이터, 이전 커밋에 대한 포인터 등을 포함하는 커밋 개체(커밋 Object)를 저장한다.이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준으로 바뀌었는지를 알 수 있다.최초 커밋을 제외한 나머지 커밋은 이전 커밋 포인터가 적어도 하나씩 있고 브랜치를 합친 merge 커밋 같은 경우에는 이전 커밋 포인터가 여러 개 있다. -파일을 stage 하면 git 저장소에 파일을 저장하고(git 은 이것을 blob 이라고 부른다.) staging area.. 2020. 1. 7.