1) git이란?
- 형상 관리 도구 = 버전 관리 시스템
- 내역을 남긴다 (= 로그를 남긴다)
- 관점별
- 1인 작업 관점 ) 어떤 부분의 코드를 언제 작성했는지 파악, 원하는 작업 상태로 돌아간 뒤 재작업, 어떤 상태에서 어떤 코드 변화를 통해 구현했는지 파악
- n인 작업 관점 ) 1인 작업 관점 + < 어떤 부분의 코드를 누가, 언제 작성했는지 파악, Conflict 충돌에 대한 컨트롤 용이, Branch라는 개념을 사용 >
+ 브랜치
한 기능 수정을 두 사람이 같이 하면 conflict가 나니까 다른 가지를 주는 거임
기능별로 다른 브랜치를 할 수도 (예 : A 로그인 B 회원가입 맡아서 로그를 쌓는 루트 브랜치 달리 )
그렇게 해서 충돌을 피하는 거임
ex)
로그인만 구현하는 브랜치 = A
회원가입을 구현하는 브랜치 = B
A에서 회원가입 하려고 하면 안되고 B에서 로그인하려고 하면 안됨
브랜치 나눠서 기능별로 나눠서 테스트 / 구현 할 수 있음
기능 합치는 거 = merge 로 합쳐서 완성시킬 수 있음
master 브랜치 = 저장소를 만들면 기본적으로 생성되는 브랜치
- git과 svn
- 공통점 : 버전 관리 도구
- 차이점
- git(Local 및 분산 형태로 버전 관리, local history O), 인터넷 안돼도 혼자서 버전관리 할 수 있음. 인터넷 됐을 때 와르르 올리는 형태.
- svn(Server 및 집중 형태로 버전 관리, local history X), 일련의 스냅샷 기록 남겨서 저장할 때마다 올려야 돼서 인터넷 안되면 못함.
1.1. ) 깃 기본 구조
- Working Directory : 현재 작업 공간
- 워킹 디렉토리에서 고치면 (2)add 명령을 통해서 stage area 로 옮겨놓음, 로그로 남겨놓을거고 그게 커밋하기 전 단계
- .git, init 형태
- Staging Area
- 변화한 거 스냅샷 로그 형태로 반영해야되기 때문에 그걸 반영하기 위해 무대 위에 오르게 한다는 개념
- 변화가 된 파일들만 올라오는 영역, 가상의 논리적 구조
- .git 디렉토리 : 어떤 파일이 어느 변화를 일으켰는지 로그형태로 저장이 되는 곳
- .git은 주목 받고 있는 파일들을 스냅샷 형태로 로그 형태로 몇시에 누가 어떤 내용으로 수정했는지 그런 것들을 스냅샷을 찍어줌
- 그 스냅샷을 하나하나 로그라고 하는데 그걸 저장하는 게 깃폴더고, 그걸 저장하는 행위를 커밋이라고 함
- .git에 쌓여진 로그 내역들을 remote server 중앙 서버에 저장함으로써 다른 외부의 사람들과 함께 볼 수 있는 거임
- 다른 사람과 연결하기 위해서는 인터넷 연결되고 서버 영역으로 넘어가서 원격 저장소에 넘어가야함 => 로컬 부분에서만 작업하는 게 1인 작업 관점
[Working Directory] - 우리가 프로젝트의 파일들을 수정하거나 작업하고 있는 디렉토리 영역(.git, init)
↑:↓
[Staging Area] - 버전 히스토리에 저장할 준비가 되어있는 파일들을 옮겨 놓는 영역
↑:↓
[.git Directory] - 버전의 히스토리를 가지고 있는 영역
↑↑: Local 영역
----------------------------------------------------------------
↓↓: Server 영역
[Remote Server] - 원격 저장소
2) 파일 및 디렉토리 기본 명령어
- 폴더 및 파일 목록 출력
ls //(List Segment)
ls -a //숨겨진 파일이나 디렉토리를 모두 표시
ls -l //파일이나 폴더의 설명을 함께 출력
ls -al //a 옵션과 l 옵션을 함께 적용, a와l 순서 상관 x
+ rwx 퍼미션
r: 읽기 권한
w: 쓰기 권한(생성 및 삭제)
x: 실행 권한(이동)
각각의 권한에 대해서 번호가 있는데 r 은 4, w 는 2, x 는 1이다.
앞의 rwx는 User, 가운데 rwx는 group, 마지막 rwx는 other(기타 사용자) 권한을 나타낸다.
권한이 없으면 -로 표시한다.
맨 앞에 d는 해당 항목이 폴더임을 나타낸다.
8진수 | 권한 | rmx |
0 | 모든 권한 없음 | --- |
1 | 실행만 가능 | --x |
2 | 쓰기만 가능 | -w- |
3 | 쓰기, 실행만 가능 | -wx |
4 | 읽기만 가능 | r-- |
5 | 읽기, 실행만 가능 | r-x |
6 | 읽기, 쓰기만 가능 | rw- |
7 | 읽기, 쓰기, 실행 모두 가능 | rmx |
ex) rw- r-- r--
=> 현재 소유자는 읽고 쓰기 권한이 있으며 실행 권한은 없다.(실행 파일이 아니다.)
소유자가 속한 그룹의 접근 권한은 읽기 권한만 있다.
기타 사람들은 읽기 권한만 있다.
=> 숫자는 644
<권한 수정 방법>
1. +, - 로 조정
chmod +x test.txt //text.txt 파일에 대해서 실행 권한 추가 부여
chmod g+w test.txt //text.txt 파일에 대해서 group에 write 권한 부여
chmod o-rwx test.txt //text.txt 파일에 대해서 others의 모든 권한 박탈

이 예시는 user 에 +x로 실행 권한을 주었다.
2. chmod 명령어
ex) chmod 000 test.txt
=> - --------- 1 yangdayeon Aug 29 test.txt

숫자로 가운데 4를 5로 바꾸어서 실행 권한을 주었다.
권한이 없는 걸 실행하려고 할 때는 Permission denied 오류가 발생한다.
+ R 옵션: 권한을 디랙토리내의 하위 경로에도 모두 적용시킨다.
ex) chmod -R 777 test
=> test 폴더 내의 모든 권한을 rwxrwxrwx로 설정한다.
이때 cd .. 으로 해당 폴더를 나간 후에 해야만 한다.
- 경로
cd [경로] //(Change Directory)
cd .. //현재 디렉토리에서 상위 디렉토리로 이동
cd - //전에 있었던 디렉토리로 이동
cd ~ //사용자 홈 디렉토리로 이동
+ 굉장히 유용한 사용법 : cd + 공백 후 tab을 누르면 경로 자동완성 & 드래그 앤 드롭

cd 공백 탭 누르면 어떤 게 있는지 보여주고

cd 하고 Doc까지 치고 탭 누르면 Doc으로 시작하는 파일 이름 자동완성 해줌!
+터미널에서 내가 가고싶은 디렉토리로 바로 가기 꿀팁 : 드래그 앤 드롭
이게 젤 편한듯 ^>^

+더 자세한 cd 명령어 사용법
- 폴더/파일 삭제
rm [삭제파일 or 삭제 디렉토리]
rm -r [삭제파일 or 삭제 디렉토리] //하위 경로의 파일을 삭제
rm -f [삭제파일 or 삭제 디렉토리] //강제로 삭제
rm -rf [삭제파일 or 삭제 디렉토리] //r, f 옵션 모두 적용
rm -v [삭제파일 or 삭제 디렉토리] //삭제 후 결과를 보여줌
- 폴더/파일 복사
cp [복사할 디렉토리/파일] [복사될 디렉토리/파일]
cp -r [복사할 디렉토리/파일] [복사될 디렉토리/파일] //하위 디렉토리까지 모두 복사
cp -f [복사할 디렉토리/파일] [복사될 디렉토리/파일] //복사될 파일(디렉토리)이름이 이미 존재할 경우, 강제로 덮어씀
cp -rf [복사할 디렉토리/파일] [복사될 디렉토리/파일]
- 위치 / 파일 생성 등
pwd //현재 디렉토리 위치 확인 (Print Working Directory)
mkdir [생성할 디렉토리명] //새로운 디렉토리(폴더) 생성
touch [생성할파일명] //새로운 파일 생성
cat [파일명] //파일의 내용을 터미널에 출력
<참조 자료>
'프로젝트' 카테고리의 다른 글
[웹 개발 환경 구축] VMware Fusion Intel칩 Mac에서 구축하기 (디스크 이미지 오류 / 공유 폴더 파일 오류 / 웹 접속 업데이트 오류) (1) | 2023.10.03 |
---|---|
[GIT] 기본 실습(1) (0) | 2023.09.04 |