-
git bash 설치
실행하면 리눅스나 유닉스에서 사용하는 운영체제 명령어 형태를 윈도우에서 제어할 수 있게 해준다.
git을 입력해서 제대로 설치되었는지 확인
리눅스 명령어
pwd - 현재 위치를 알려줌
cd - 디렉토리 이동
cd [디렉토리 경로]
이동하려는 디렉토리로 이동
cd .
현재 디렉토리
cd ..
한 단계 상위 디렉토리로 이동
cd /
최상위 디렉토리로 이동
cd $변수명
변수에 저장된 경로로 이동
cd ~
cd $HOME
cd
사용자 홈 디렉토리로 이동
cd ~계정명
입력한 사용자의 홈 디렉토리로 이동
cd -
이전 경로로 이동
mkdir - 폴더 생성
버젼관리를 하고자 하는 디렉토리를 git에게 알려주자
git을 입력하면 사용할 수 있는 명령어들을 보여준다.
git init - 현재 디렉토리를 작업환경으로 사용하겠다. .git이 생성된다
ls -al 현재 디렉토리의 파일을 보여줌
.git에는 버젼관리를 하면 여러가지 정보들이 생성되고 저장되는곳(지우면안됨)
vim - 명령어 시스템에 대부분 설치되어있는 에디터
ex) vim f1.txt를 입력하면 화면이 바뀌면서 텍스트를 편집 할 수 있다.
후에 i를 눌러 입력할 수 있는 상태를 만들자
esc를 누르면 입력이 종료된다.
그다음 :를 입력하면 밑에 따음표가 생기고 wq를 입력하면 저장과 동시에 종료된다.
cat f1.txt 를 입력하면 텍스트 내용을 볼 수 있다.
git status - 현재 파일이 버젼관리가 되어있는지 확인 할 수 있다.
git add f1.txt를 하면 버젼관리 시작
버젼관리가 필요한 새로 추가한 파일들은 git이 명확하게 추적하도록 알려줘야 한다.
git 버젼 만들기
git을 처음 사용하기 시작했을때 먼저 해야할 일이 있다.
지금부터 작성할 버젼이 자신이 만든것이라는 이름을 통해 알려주어야한다
$ git config --global user.name han
$ git config --global user.email tttck88@gmail.com
이상태에서 git commit를 입력하면 vim이 실행된다.
여기에 버젼 메시지를 입력한다.
이렇게 하면 버젼이 생성된것이다.
git log를 통해 확인할 수 있다.
f1.txt를 수정하고 git status를 입력하면 modified로 바꿘 것을 확인할 수 있다.
그 다음 git add f1.txt를 입력해야 버젼 업데이트가 된다.
즉 최초로 추적할 때도 add를 하고 파일이 수정되서 버젼을 만들기 전에도 add를 먼저 해야한다.
과제 f2.txt란 파일을 만들고 그 파일을
커밋해보자
cp f1.txt f2.txt - f1.txt파일과 똑같은 f2.txt를 만든다.
add라는 작업을 통해서 커밋할 것만 추려서 할 수 있다.
즉 git add f1.txt를 입력하면 f1.txt 파일은 커밋 대기상태(stage area)에 들어가 있는것이고 f2.txt는 들어가 있지 않은것이다.
stage(커밋대기파일들이 가는곳) repository는 커밋이 된 결과들이 저장되는 곳
git log -p 각각의 커밋사이에 변경사항을 확인 할 수 있다.
--- a/f1.txt 이전버젼
+++ b/f1.txt 현재버젼
@@ -1 +1 @@
-source : 1 이전버젼
+source : 2 현재버젼commit 244740f685d93b738a1c0b4b94b615ace0309928
각 버젼의 고유한 주소
git log 244740f685d93b738a1c0b4b94b615ace0309928 이전에 메시지만 보여준다.
$ git diff 244740f685d93b738a1c0b4b94b615ace0309928..5134d4f84ef0f3cebc24af1a2eee357cc52c3712
두 버젼 사이의 변경사항을 확인 할 수 있다.
git diff를 하면 커밋 하기전에 자신이 작업한 내용이 문제가 있는지 리뷰를 할 수 있다.
과거로 돌아가기(reset)
reset vs revert
복원하기전에 미리 백업을 해두는것이 좋다.
$ git reset 4b72a16856c5d7b4a55e5eebee558758c93871b7 --hard
4b72a16856c5d7b4a55e5eebee558758c93871b7버젼 위에 커밋이 취소가 된다.
하지만 실제로는 삭제되지 않고 복구할 수 있는 방법이 있다.
공유한 이후에는 리셋을 하면 안되고 로컬에서만 해야한다.
git commit -a 입력할 경우 수정한 파일은 자동으로 add시켜준다.
git commit -am"11 " 입력할 경우 수정한 파일은 자동으로 add시켜주고 메시지를 "11"로 해서 커밋을 해준다.
add의 원리
cd .. 상위 폴더로 이동
add를 하면 .git에 index, objects파일이 생성된다.
index에는 파일의 이름이 담겨 있고 objects에는 파일의 내용이 담겨 있다.
만약 cp f1.txt f3.txt를 통해서 복사를 했을 경우에는
인덱스에는 나뉘어져있지만 내용은 동일하기에 같은 객체(objects)만을 사용하며 파일이름이 같다.
sha1
add를 하면 sha1을 통해 변환한 해쉬코드값을 인덱스에 저장한다..? 그러기에 같은 내용이면 같은 객체를 공유한다.
objects에는 파일의 내용을 담고있는 blob과 디렉토리의 파일명과 그 파일명의 내용에 해당하는 blob에 대한 정보를 담고 있는 tree와 commit이 있다.
branch
이름 그대로 나무와 나뭇가지를 생각하면 된다.
원본파일과 클라이언트에게 커스텀된 파일이 있다 했을 경우 둘에게 변화가 생길경우
서로 독립된 개개의 버젼을 갖게 되고 후에 원본파일과 클라이언트파일을 합쳐야 할 경우가 생기면 새로운 이름을 가진 파일이 생기게 된다.
git에서는 원본파일과 클라이언트 파일이 분기될때 branch를 만든다고 하며
클라이언트에게 제공되는 문서는 새로운 브랜치고 원본파일의 브랜치는 원래 가지고 있었던 브랜치며
이 맥락에서 브랜치를 두개 가지게 되는것이다.
즉 브랜치를 하지 않았다면 하나의 브랜치를 가지고 있는것이다.
그러므로 나무 즉 원본파일과 나뭇가지 클라이언트파일이 변화가 생길때 서로 분리된 채로 진행된다.
git bracnh를 입력하면 * master가 출력되고 뜻하는 바는 현재 master란 브랜치를 사용하고 있다는 뜻이다.
git branch 이름 을 입력하면 해당 이름의 브랜치가 생성되고 다시 git brach를 입력하면
방금 생성한 새로운 브랜치와 기존의 master 브랜치가 출력되며 현재 사용하고 있는 브랜치인 master 앞에는 *가 붙어있다.
git checkout 브랜치이름을 입력하면 해당 브랜치로 들어가게 된다.
여기서 ls -al와 git log를 입력하면 기존에 master와 동일하게 출력되는데 이는 새로운 브랜치를 생성하게 되면
기존에 브랜치의 상태를 그대로 복사한다는것이다. exp브랜치에서 기존에 파일을 수정한 후 커밋을 하고
원본 즉 기존의 master브랜치에서 확인하면 변화가 반영이 안되있고 exp브랜치에서만 변화가 반영되어 있는것을 확인할수있다.
해당 작업폴더에서도 어떤 브랜치에 접속해 있느냐에 따라 파일의 변화가 있다.
브랜치간의 변화를 알아보기 위해서는 git log --branches --decorate를 입력하면
각각의 브랜치의 로그들을 확인할 수 있고 현재 접속하고 있는 브랜치에는 head -> 브랜치이름으로 표시가 되어있다.
git log --branches --decorate --graph를 입력하면 좀 더 직관적으로 확인할 수 있다.
git log --branches --decorate --graph --oneline를 입력하면 좀 더 간단하게 볼 수 있다.
git log master..exp를 입력하면 마스터에는 없고 exp에는 있는것을 볼 수 있고
git log exp..master를 입력하면 exp에는 없고 master에는 있는 것을 볼 수 있다.
git log -p exp..master를 입력하면 소스코드까지 확인 할 수 있다.
git diff master..exp를 입력하면 한꺼번에 확인이 가능
git merge 브랜치를 입력하면 현재 브랜치로 해당하는 브랜치를 합치게 된다.
git branch -d exp를 입력하면 exp브랜치는 삭제된다.
git branch 이름 - 브랜치 생성
기본은 master임
git checkout 브랜치 이름 - 해당 이름으로
브랜치를 생성하면 현재 속해있는 브랜치의 상태를 그대로 복사한다.
현재 브랜치에서 커밋을 통한 변경 사항은 해당 브랜치에만 반영된다.
git log --branches 저장소에 있는 모든 브랜치를 보여줌
git log --branches --decorate
git log --branches --decorate --graph
git log --branches --decorate --graph --oneline
괄호안에 해당 브랜치 head -> 브랜치이름 - 현재 접속중인 브랜치
git log 브랜치1..브랜치2 - 브랜치1에는 없고 브랜치2에 있는것을 보여줌
git log -p 브랜치1..브랜치2 - 소스코드 차이도
git diff master..exp 각각 브랜치의 현재상태를 비교해준다.
branch병합
git merge 병합을원하는브랜치
git branch -d 삭제원하는브랜치 브랜치 삭제merge 충돌
<<<<HEAD
function a(master) { --------------> 현재 브랜치에서의 수정사항
==== 이 경계선을 중심으로
function a(exp) { ------------------> merge할 브랜치에서의 내용)
<<<<exp
}
}
github
깃헙에서 소스 복사해오기
git clone 소스주소 저장폴더명
github 원격저장소를 만들고 사용해보자
new repository를 한 후에 이름을 설정하고 저장소를 만들자
2가지 방식의 작업
1. 원격저장소를 만들고 그것을 복제해서 로컬에서 작업하는 방법
…or create a new repository on the command line
2. 이미 작업한 로컬을 원격저장소로 올리는 방법
…or push an existing repository from the command line
git remote add origin https://github.com/tttck88/gitfh.git
현재로컬저장소에 원격저장소를 연결(add)시킨다 그리고 그 약어 origin으로 주소는 https://github.com/tttck88/gitfh.git 이다.
git remote로 확인
git remote -v 상세보기
원격저장소를 여러개의 로컬로 저장할 수 있다.
orgin -> friend
git push -u origin master
로컬의 작업을 원격으로 푸쉬 마스터 브랜치로(내마스터브랜치와연결)
연결이 된 후에는 git push로 입력
동기화
하나의 원격을 바탕으로 두개의 로컬을...
git clone 원격저장소주소 저장할디렉토리
git pull 원격저장소의 내용의 로컬저장소로(이미연결되어있기때문에)
ssh를 이용해서 로그인없이 원격저장소 사용하기
ssh-keygen -- ssh를 이용한 비밀번호 생성(굉장히 복잡한 보안굿)
Your identification has been saved in /c/Users/한영택/.ssh/id_rsa.
Your public key has been saved in /c/Users/한영택/.ssh/id_rsa.pub.에 생성
cd ~/.ssh (~은 홈디렉터리란뜻)
id_rsa --private 비밀번호
자신의 로컬에는 프라이빗키
원격에는 퍼블릭키가 저장된다(접속하고자 하는 컴퓨터에 저장해두면 자동로그인이 가능)
cat id_rsa.pub 복사
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRf+o0FHg9fGUCuP+5wWq4vM48LZrsE59yrV7Juzf/P2OwbihsNFrQ3i5sEZUiY3q9jaYNN7NkR3ut68a9XFeBuVxZX6NiHPEQnJ6IzmPQBzB91SzB6mZw0WnwimXwbhvpbD+9lWlSBEaEBuQaIMt+CexZkGHiObybEt1sGSeTtPbTYdtNZYm8HMf2TGyV94jaWH2dsMzYGzusj0xePCOcIghNspWjLs1t/pMVuyHIxnLLjj2aaRpZ26u2Z0tEhKDkbMd7U8//lglhOarIdZoUtEeENoC56E03uHW1zurmwbO1mDLw7Em3l/j1QrhFrFOUkSEAyMb0xq2pR4o8QjVP 한영택@DESKTOP-CH1IUH4
깃헙 세팅에 저장
git clone git@github.com:tttck88/gitfth_ssh.git gitgth_ssh
vim f1.txt
git add f1.txt
git commit -m 1
git push
'Git' 카테고리의 다른 글
Git SourceTree (0) 2019.10.03