일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- appspec.yml
- WeNews
- AuthenticationEntryPoint
- docker명령어
- 커밋메세지수정
- 네이티브쿼리
- 컨테이너실행
- 적용우선순위
- 테스트메소드
- appspec
- 추후정리
- 예약
- 메소드명
- EC2
- 참조키
- querydsl
- MySQL
- 외부키
- 메세지수정
- ubuntu
- ㅔㄴ션
- Query
- subquery
- 서브쿼리
- 2 > /dev/null
- application.yml
- 테스트
- 검색
- foreignkey
- 포트
- Today
- Total
제뉴어리의 모든것
[Section1][Git] 기초 [추후 보완] 본문
Git이란?
프로젝트의 백업, 버전관리, 협업을 가능하게 해주는 형상관리 프로그램.
GitHub란?
Git과 소통하여 데이터를 올리고 공유할 수 있는 클라우드 기반의 사이트.
Git의 영역 구분
Git에서 사용되는 영역의 개념에는
WorkSpace, StagingArea, LocalRepository, RemoteRepository 가 존재한다.
- Work Space (Working Tree)
현재 내가 작업중인 공간이다.
물리적으로 보면 git 관리를 받는 디렉토리 자체를 의미한다. - Staging Area
Local Repository 로 데이터가 넘어가기 전 단계에 영역 - Local Repository
실제 버전이 저장되고 git의 버전관리를 받는 영역의 저장소 (내 pc내의 저장소) - Remote Repository
github와 같은 외부에 존재하는 저장소 (외부 저장소)
Git의 기본 개념
Git이란것은 그냥 내 PC에 설치하는 프로그램이고 버전관리, 백업, 롤백 등을 가능하게 해준다.
내 PC에서만 사용도 가능하고, 내 PC 이외의 외부에 데이터를 저장하고 싶을때 GitHub (외부 저장소)를 사용한다.
Git을 처음 사용할때의 경우는 2가지이다.
1. 외부 저장소에 있는 데이터를 복제(Clone) 해와서 사용하는 방법
2. 형상관리를 할 폴더에 git 초기화(init) 을 해서 사용하는 방법
위에 두가지 경우의 차이점은,
Remote Repository의 지정 유무 이다.
즉, GitHub에서 Clone을 해왔다는 것은 이미 외부 저장소가 존재하는것이다.
그러므로 Clone을 해왔을 경우 기본적으로 Clone 해온 외부 저장소가 origin이란 이름의 외부저장소로 설정이 되어있다.
(확인 방법 : git remote -v)
그리고 git init을 사용하여 초기화만 한 디렉토리는 당연히 아무런 외부 저장소도 등록 되어 있지 않으므로
내 pc 뿐만 아니라 외부에도 저장소를 만들어 버전 관리하고 싶다면 원격 저장소를 등록해 주면 된다.
Git 사용의 기본적인 큰 흐름
1. git 폴더에서 작업을 한다
2. 작업할 내용을 add, commit 하여 내 local repository에 버전을 저장한다. (내 로컬내에서만 관리 하겠다면 여기까지만 수행한다)
3. local repository의 내용을 git hub에 있는 내 remote repository에 push 하여 저장한다.
4. 협업하는 동료가 내 remote repository에 올라간 최신 소스를 pull 하여 자신의 local repository에 가져온다.
5. 내가 작업한 최신 소스에 동료는 자신의 소스를 더 추가하여 자신의 local repository와 remote repository에 올린다
6. 동료가 자신의 Remote Repository에 올려놓은 소스를 내가 pull하여 내 Local로 가져와 작업한다.
위에 있는 일련의 과정들이 계속 반복되고 상황에 따라는 조금씩 다를 수 있다.
Git으로 인한 협업 과정의 큰 흐름
1. 협업 대상 프로젝트는 클론 해온다. (현재 상황에선 나와 동료 작업자들의 소스 코드가 똑같은 상황이다)
2. 내 Local에서 소스코드 작업을 진행한다.
3. 작업이 완료된 소스를 add, commit 하여 내 Local Repository에 저장한다
4. 내 Local Repository의 소스를 내 Remote Repository로 push 하여 저장한다
5. 다른 작업자가
Git 용어 정리
- commit
스냅샷을 만들어줌 - contribute
오픈소스에 기능들을 추가하고 개선하는 행위를 말함 - git repository
git으로 관리되는 폴더
- Fork
remote repository (원격저장소) 에 있는 데이터를 내 원격 저장소로 가져오는 행위 - clone
remote repository에 있는 데이터를 내 local repository로 가져오는 행위 - commit
로컬에서 수정한 내 변경 사항을 commit을 통해 내 local repository에 반영하는 행위 - push
local repository에 commit 되어 저장된 수정버전의 데이터를 remote repository에 올리는 과정 - pull request
내가 push 하여 올린 데이터를 모두가 공유하는 repository에 반영시켜달라고 요청하는 행위 - pull (다운 + 병합)
remote repository 에 있는 소스를 다른 사람이 수정하였을때 변경사항들을 내 local로 가져오는 행위로 내 소스와 병합까지 해줌 (push와는 반대 개념) - fetch (다운만)
원격 저장소로부터 필요한 파일을 다운 (병합은 따로 해야 함) - HEAD
가장 최신 커밋을 의미 (Repository에 기록된 가장 최신버전) - git 디렉토리내에 존재하는 파일들의 상태
- Tracked(관리 대상)
- Unmodified (수정되지 않음)
- modified (수정됨)
- staged (커밋 되기 전 staging area에 올라가 있는 상태) - Untracked(비관리 대상)
Untacked 인 파일이나 디렉토리는 checkout으로 특정 브랜치로 이동하던지,
Reset, Revert로 특정 Commit으로 되돌아가더라도 상관없이 존재한다.
Git이 관리하지 않는 존재들이기 때문에이다.
- Tracked(관리 대상)
- pull requeset (pr)
내 remote repository에 push 해 놓은 변경 사항을 공동작업하는 repository에(작엽하기 위해 clone하여 가져온 소스)
반영해 달라고 요청하는 행위
Git 명령어
- git remote -v : 단축이름과 url까지 보여줌
- git config --list : 깃의 현재 설정 정보 확인
+ git config user.name : 현재 유저 이름 확인
+ git config user.email : 현재 유저 이메일 확인 - git remote add <단축이름> <url>
ex : git remote add pb https://github.com/paulboone/ticgit - git remote remove [저장소 이름] : git에 등록된 원격저장소를 삭제함
- 사용자 정보 global로 설정 (어떤 git 폴더든지 자동으로 해당 값들 설정됨)
git config --global user.name "나의 사용자 이름"
git config --global user.email "내 이메일 주소"
수정하고 싶다면 똑같은 명령어에 값들만 바꿔주면 된다.
참조 : https://choiiis.github.io/git/how-to-remote-project/ - cat ~/.gitconfig : global 설정된 값 확인. (git 명령어가 아니고 linux 명령어로 단지 git의 config 파일을 확인해보는것이다) ~의 의미는 /home/사용자명 경로의 줄임말이다. 리눅스에 git을 설치하면 기본적으로 해당 경로에 .config 파일이 생성된다.
윈도우는 기본적으로 C:\Users\사용자명\ 경로에 .gitconfig 파일이 숨겨져 있다.
참조 : 참조 : https://leeborn.tistory.com/entry/git-config-%ED%8C%8C%EC%9D%BC-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EB%B3%80%EA%B2%BD - git init : 현재 위치를 git 영역으로써 지정 (하위 데이터를 모두 포함) 하는것으로 해당 폴더에 .git 폴더가 생성된다.
git bash에는 (master)라는 표기가 생긴다. master는 가장 최초에 생기는 기본 브랜치이다. - git status : 현재 위치의 존재하는 파일, 디렉토리들의 상태를 확인
- git add [파일명] : 파일을 staging area 에 올림
+ git add . : 현재 위치의 모든 파일 add 함 - git commit -m '메모내용' : staging area에 있는 파일들 commit
- restore
변경사항을 폐기하는 명령어.
git restore [파일명] : staged 되기 전 상태의 파일 중 수정이 발생한 파일 되돌리기
git restore --staged 파일명 : staged 된 파일을 unstaged 상태로 되돌리기 (commit이 한번도 되지 않은 상태에서는 작동하지 않는다.
그때는 git reset . 으로 해주면된다!) - git clone [git허브 url] : 외부 레포지토리의 내용을 내 로컬 레포지토리로 가져 옴
- git pull [원격 저장소 명] [branch 명] : 원격 저장소의 내용을 현재 내 브랜치로 가져 옴
git pull origin master - git branch [새브랜치명] : 현재 브랜치 (현재까지의 commit 상황) 에서 새로운 브랜치를 분기시킴 (새로 분기된 브랜치로 자동 이동되지 않으므로 새 브랜치에서 작업을 하고 싶다면 새 브랜치로 이동을 해서 작업을 해야한다)
- git checkout (브랜치명) : 해당 브랜치로 이동함 (브랜치를 이동하는것 자체로도 해당 브랜치의 소스 상태로 되돌려줌)
- git branch -d [브랜치명] : 해당 브랜치를 삭제함
- git merge [병합대상브랜치명] :
해당 명령어를 사용하기 위해서는 git checkout [병합주체브랜치명] 을 사용하여 일단 병합을 할 브랜치로 이동한다
그리고나서 git merge [병합대상브랜치명] 을 입력해주면 "병합할주체브랜치"에 "병합대상브랜치"의 내용들이 들어와 있다. 즉, 쉽게 말해
"A(주체)국가는 B(대상)국가를 병합하려고 한다. 그래서 A국가는 B 국가에게 병합을 강요하여 결국 병합을 이루었다.(merge) 그럼 그 순간부터 B국가의 역사(Commit기록)는 A국가에 편입되버리는 것이다. 그러므로 A국가는 B국가의 역사까지도 자신의 역사가 되는것이다.
한가지 주의할점, merge를 당하는 branch가 사라지진 않는다. 단지 merge를 진행하는 브랜치가 대상 branch의 데이터와 commit 이력 모두를 가져오는 것이다. - git stash : 현재 작업내용 임시 저장
- git stash list : 현재 임시 작업 리스트 확인
- git log : 현재브랜치의 commit 내역 확인
- git push [원격저장소명] [브랜치명] : 두번째 인자값으로 들어가는 브랜치를 첫번째 인자값인 원격저장소에 올린다. (원격 저장소에 저장)
- $ git config --global core.editor nano : git의 기본 에디터를 나노로 바꾸는 명령어
- $ git branch -m [현재브랜치명] [새브랜치명] : 브랜치명을 바꿔준다 (1번은 commit이 되있어야 가능하다)
- reset 명령어
아직 remote repository에 저장되지 않은 내 local repository의 내용(commit이 된 데이터)을 reset을 통해 적절히 롤백할 수 있다
+ 옵션은
hard, soft, mixed(기본값)가 존재한다.
ex :
git reset HEAD^ : 가장 최신의 commit을 취소 가능
git reset HEAD^^ : 가장 최신의 이전 commit까지 취소?
git reset [커밋해쉬값] : git log 명령어로 보여지는 여러 commit 기록들 중 되돌아갈 commit의 hash값을 넣어주면 된다. - git commit -am : add없이한번에commit
기타내용
- ssh 란?
Secure SHell,
보안이 강화된 shell 접속을 뜻한다.
원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다.
기존에 사용됬던 텔넷 방식이 암호화가 이루어지지 않아 암호화 기능을 추가하여 생겨남.
+ 동작 방식
키를 생성하면 공개키와 비공개키가 생성되고
로컬에 비공개 키를 저장하고 원격 머신(서버)에 공개키를 저장한다. 이때 어떤 ssh 클라이언트가 원격머신에 접속할때 갖고있는 비공개키와 원격에 있는 공개키를 비교하여 일치하면 접속을 허용한다.
+ssh 주요 기능
-보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 제공.
-IP spoofing (IP스푸핑, 아이피 위/변조 기법중 하나)을 방지하기 위한 기능을 제공.
-X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩을 제공.
- 실전에서는 충돌 예방을 어떻게 하는가.
실전에서는 어떻게 사용해야할까? [충돌예방법]혼자 개발하는 것이 아니기 때문에 충돌을 줄이기 위해 프로젝트의 큰 흐름인 master브랜치로 내맘대로 merge할 수는 없다.그렇다고 merge 없이 1개월이든 6개월이든 내 branch안에서 개발만해서도 안된다.-merge 때 conflict 수정이 엄청나게 많아지기 때문.따라서 내 브랜치에 충돌을 최대한 예방하는 방법을 사용해야 한다.즉, master 브랜치의 변화를 지속적으로 내 브랜치로 가져와서 충돌나는 부분을 매번 제거하면서 내 브랜치를 만들어야 먼 훗날에 master 브랜치로 병합할 때 충돌이 적게할 수 있다.
출처: https://jeong-pro.tistory.com/106 [기본기를 쌓는 정아마추어 코딩블로그:티스토리] - 최초 Commit 되돌리기 [추후 보완]
구글링을 하다보면 Commit을 되돌리는 방법으로 항상 나오는것이
git reset [해시값]
git reset HEAD
뭐 이런 내용일것이다.
하지만 최초 커밋에 대해서는 해당 명령어들이 작동하지 않는다.
최초 커밋은
git update-ref -d HEAD
git rm --cached -r .
위에 두 명령어로 취소 할 수있다.
추후 자세히 내용을 알아보야겠다...
참조 : https://velog.io/@jakeseo_me/git-%EC%B2%AB%EB%B2%88%EC%A7%B8-%EC%BB%A4%EB%B0%8B-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0
참조 사이트 :
https://leeborn.tistory.com/entry/git-config-%ED%8C%8C%EC%9D%BC-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EB%B3%80%EA%B2%BD
https://www.lainyzine.com/ko/article/how-to-set-git-repository-username-and-email/
https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95
https://chris.beams.io/posts/git-commit/
https://www.lainyzine.com/ko/article/summary-of-how-to-use-git-for-source-code-management/ (매우 유용)
'코드스테이츠 > 정리 블로깅' 카테고리의 다른 글
[Section1][JAVA] 기초 - 2 (0) | 2022.07.05 |
---|---|
[Section1][JAVA] 기초 (0) | 2022.07.05 |
[Section1][Linux] 기초 [추후 보완] (0) | 2022.06.30 |
[Section1][Publishing] HTML, CSS - 2 [추후 추가 정리 필요] (0) | 2022.06.30 |
[Section1][Publishing] HTML, CSS (0) | 2022.06.27 |