명령어&실습14_reset
아래 reset명령어의 차이점
> git reset --soft
> git reset --mixed
> git reset --hard



명령어&실습15_merge방식
git은 3way merge방식으로 처리해야할 중첩부분을 최소화한다.(아래 빨간?부분만 처리하면됨)




명령어&실습16_Remote Repository(원격저장소)개념&실습
local repository(지역 저장소) < - > Remote Repository(원격 저장소)
원격저장소의 큰 의미 2가지: 백업, 협업
프로젝트가 커질수록 중요한 개념.
만약 혼자하는 프로젝트라면 원격저장소를 쓸 필요 없음.

Git Bash 열기
> cd c:/developGit

git 프로젝트 이동


> git init local
local 이란 프로젝트(폴더)생성하고, git 시작


> cd local
local 폴더로 이동


> ls -al
local 폴더내용 확인


> vim f1.txt
insert키 누름
a 입력
esc키 누름
:wq


> git add f1.txt
f1.txt를 staged 시킴


> git commit -m 1
메세지 1과 함께 commit하기


> cd ..
상위폴더로 올라가기



> git init --bare remote
remote(원격저장소)라는 프로젝트(폴더)만들기
--bare 쓰기가 불가능하게 하는 옵션
수정 등의 작업불가능한 저장소로의 역할만 하도록 설정하는 것임.
원격저장소의 특성상 수정권한이 있으면 안되기에 이렇게 설정


> cd remote
remote 폴더로 이동


> ls -al
remote폴더내에 --bare 방식의 git init하면 생성되는 기본폴더들을 볼수 있음.


이제 원격저장소가 생겼기에, 다시 local 폴더로 이동하여, 원격저장소로 push 해보자!
> cd ..
> cd local


> pwd
현재 경로를 확인하기. remote프로젝트의 경로를 확인하기 위함.
remote 폴더의 경로는 /c/developGit/remote임을 확인


> git remote add origin /c/developGit/remote
최초 설정시 remote 저장소를 등록해주어야함.
remote의 옵션으로 add가 있음.
'/c/developGit/remote'는 경로를 가리킴.
origin은 해당경로를 네이밍하는 것으로 별칭이라고 볼수 있음.
즉, 이렇게 설정해두면, local의 'master' branch는 앞으로 git push를 하게 될경우 remote 저장소인 origin('/c/developGit/remote')로 이동하게됨.


참고사항
> git remote remove 닉네임.
등록한 연결된 원격저장소를 없앨수 있음.

> git push --set-upstream origin master
최초 설정시에 upstream 방식을 setting 해주어야함.
origin 원격저장소의 'master' branch로 push함을 뜻함.




명령어&실습17_GitHub회원가입
git이란 분산버전관리 툴을 사용하는 프로젝트를 지원하는 웹서비스.
가장 인기있는 오픈소스 코드 저장소이기도 함.
이러한 오픈소스 코드 저장소를 원격저장소로 사용하기 위해서 github을 알아야함!

1.github 계정-회원가입
sign up for GitHub클릭 또는 Sign up 클릭


Step1내용을 기재 -> Create an account 클릭


Step2 무료사용클릭 -> Continue 클릭


Step3 내용 선택 -> Submit 클릭



아래 화면이 나옮.
하지만, Start a project를 누르면 진행이 안됨.
이메일 인증부터 해야함.
등록했던 이메일로 들어가서 인증확인을 클릭 -> 다시 아래 화면에서 Start a project


2.github 기본 화면 설명




명령어&실습18_GitHub의 git / git 오픈소스 활용 fork 해보기
 github 사이트 들어가기 -> 'git' 키워드 검색


git / git 프로젝트 클릭



공부하고 있는 git도 마찬가지로 오픈소스프로젝트임.
아래 그림이 바로 git의 오픈소스 내용임.
-프로젝트 소스코드
- commit


watch: 이 프로젝트의 진행상황을 볼수 있는 사람 수
star: 좋아요를 누른 사람의 수
Fork: 복제버튼. 해당 프로젝트를 fork를 누른 개발자가 복제하여 가져갈수 있음.
fork의 개수가 높다는 것은 이것을 가지고, 개발한 것들이 많다는 것을 뜻함.

commits:지금까지의 commits 개수
branches: 지금까지의 branch 개수, 현황
contributors: 1145명의 기여자들


contributors(기여자)가 아니여도, 해당 프로젝트를 fork 할수 있음.
Github에서 Fork를 하게되면, github계정 / fork한 프로젝트명 으로 repository가 fork한 사람의 계정아래로 생성되게됨.
나중에, fork한 개발자가 작업해당 프로젝트를 좀더 나은 방향으로 수정후, commit한 다음 push/pull request를 git 프로젝트 관리자에게 요청할수 잇게됨.



github 사이트 들어가기 -> 'git' 키워드 검색


git / git 프로젝트 클릭



공부하고 있는 git도 마찬가지로 오픈소스프로젝트임.
아래 그림이 바로 git의 오픈소스 내용임.


watch: 이 프로젝트의 진행상황을 볼수 있는 사람 수
star: 좋아요를 누른 사람의 수
Fork: 복제버튼. 해당 프로젝트를 fork를 누른 개발자가 복제하여 가져갈수 있음.
fork의 개수가 높다는 것은 이것을 가지고, 개발한 것들이 많다는 것을 뜻함.

commits:지금까지의 commits 개수
branches: 지금까지의 branch 개수, 현황
contributors: 1145명의 기여자들






명령어&실습19_GitHub의 git / git 오픈소스 활용 Clone 해보기
 github 사이트 들어가기 -> 'git' 키워드 검색


git / git 프로젝트 클릭




Clone or download 클릭



Clone with HTTPS의 경로 복사



> cd c:/developGit
git 실습할 상위 프로젝트로 이동


> mkdir gitsrc
gitsrc폴더(프로젝트)를 생성
> cd gitsrc
gitsrc폴더로 이동


해당 폴더에 https://github.com/git/git.git 원격저장소의 git 프로젝트를 다운받아서 git버전관리 시작을 뜻함.
추가 설명:
git 을 치면 나오는 메뉴얼에는 프로젝트 시작하는 2가지 방식이 나옮.(git init / git clone)

- git init방식: 로컬에서 작업한 것을 git을 이용하여 버전관리할고자 할때
- git clone 방식: 원격저장소의 자료를 다운받아서 설치후 git을 이용하여 버전관리할고자 할때


> ls -al
> cd git
> ls -al
gitsrc프로젝트 아래 git폴더가 생성된것을 확인할수 있음.
git 폴더아래에 git프로젝트관련 내용들이 생성된것을 확인할 수 있음.


> git log --reverse
log기록을 거꾸로 볼수 있음.
리누스 토발즈님의 최초 commit을 확인할 수 있음.
from hell....


> git checkout e83c5163316f89bfbde7d9ab23ca2e25604af290
최초의 commit으로 업데이트
> git log
log 내용이 최초 commit 한개밖에 없음을 확인


> ls -al
최초 프로젝트 commit 할 당시의 구조는 단순하였다는 것을 확인 가능






명령어&실습20_GitHub저장소 만들기
github 사이트 접속 -> 로그인 -> start project 클릭


저장소 이름, 설명, public(공개/무료)선택, ReadMe.md 파일생성여부 체크 -> Create repository 클릭

아래의 원격저장소가 생성됨.

그다음 로컬로 이동하여 git bash 열기

> cd ..
> mkdir repotest
c:/developgit/repotest라는 프로젝트 생성
> cd repotest
repotest로 이동
> git init
repotest에 git을 시작
> vim f1.txt
a를 입력한 f1.txt를 만들기
> git add f1.txt
f1.txt staged 시키기
> git commit -m '1'
메세지 1과 함께 commit하기


잠깐 설명 push와 pull은 어떤 것을 기준으로 생각해야하까?
push와 pull의 개념은 로컬/원격저장소의 유무와 상관없이, 현재 사용자가 장소하는 곳을 기준으로 push, pull 한다고 생각하면됨.
ex) local에서 작업하는 사람이 원격저장소로 upload하고 싶을때는 push   <=> 원격저장소에서 작업하는 관리자입장에서 원격저장소로 가지고 올때는 pull

> git remote
현재의 remote로 등록된 원격저장소를 보여주는 명령어이지만, 현재 등록된 원격저장소가 없음.


이제 github 사이트에서 만들었던 원격저장소를 등록하자.
origin이라는 명칭으로 등록하게됨.
https~는 원격저장소의 위치를 의미

> git remote -v
remote 확인을 해보면 등록되어진것을 확인할 수 있음


원격저장소는 여러개를 등록할 수도 있고, 지울수도 있음.
origin2 라는 원격저장소를 등록함.


> git remote -v
remote에 origin, origin2가 등록되어있음을 확인할 수 있음.


> git remote remove origin2
origin2를 지울수도 있음


> git remote -v
확인한 결과 지워진것을 확인할 수 있음


> git push -u origin master
로컬저장소를 기준으로 봤을때, 로컬에서 원격저장소의 'master' branch로 push한다는 것을 설정하는 것을 뜻함.(로컬 -> 원격)

만약에 계정 아이디, 이메일, ssh가 현재 이프로젝트를 만든 사람 즉 'FROMHANBIT'이 아닐경우, 원격저자아소에 접속하고 자하는 계정을 Collaborator로 등록해주어야함.
아래 그림처럼 github의 설정 이동 -> Collaborators등록 -> 초대하고자하는 사람 이메일 또는 아이디 입력 -> add collaborator 클릭 -> Copy invite link 클릭 -> 링크url 복사후 초대하고자하는 사람에게 보내기


초대받는 사람은 보내준 url을 브라우저에 입력해서 이동하면 아래의 화면 -> accept invitation 
이로써, FROMHANBIT계정을 가진 관리자가 가지고 있는 repositorytest라는 원격저장소에 koreacoderider라는 사람도 접속할 수 있음.


다시 git bash로 이동(헷갈릴까봐 다시 기재. 현재의 로컬사용자의 아이디는 koreacoderider라는 사람임)
> git push -u origin master
origin 원격서버의 'master' branch에 이제 방금 작업하고 commit한 repositorytest 작업방의 commit 1이 push 되었음.



실제 Github사이트의 repositorytest 원격서버에 1개의 commit과 f1.txt가 올라와 있음을 확인할 수 있음.




이제부터는 github에서 제공하는 원격저장소('repositorytest')를 이용하여 언제 어디서든 백업이 가능함.




명령어&실습21_git config
git config를 통해서 계정관련 정보들을 입력 확인할 수 있음.
git을 실행할때, 최초에 하는 거지만, remote관련 기능을 보낼때, 계정때문에 push, pull이 안될수가 있기에, 확인을 위해 필요
프로젝트별로 config가 있고, 전체 global config가 있음

> git config --global --list
글로벌 config(설정)을 확인가능

> git config --global user.name "사용자아이디"
글로벌 사용자 아이디 등록

> git config --global user.email "사용자이메일"
글로벌 사용자 이메일 등록


> git config --list
해당 프로젝트의 config(설정)을 확인가능

> git config user.name "사용자아이디"
해당 프로젝트 사용자 아이디 등록

> git config user.email "사용자이메일"
해당 프로젝트 사용자 이메일 등록




명령어&실습22_원격저장소이용 협업 
협업 tip: 협업하는 프로젝트를 진행하고자 할때, 항상 원격저장소로부터 pull을 한다음에 작업을 시작할 것!!
위의 설정을 다 할수 있다는 전제로 이제부터는 github에서 제공하는 원격저장소를 이용 프로젝트를 로컬에 동기화 할수 있음
> git pull

코드 변경 작업진행 -> 저장

> git add 변경된 파일명

> git commit -m 'commit메세지'

> git push




명령어&실습23_SSH 이용 원격저장소 활용
Secure Shell을 줄여서 SSH라고 함.
장점: 로그인하지 않고도 이용할수 있음.
git bash를 열기
> ssh-keygen
ssh 생성
엔터
엔터
엔터


c/Users/ALEXKIM/.ssh/ 로 이동하면,
id_rsa와 id_rsa.pub가 생성됨을 확인할수 있음.


id_rsa는 private key, id_rsa.pub는 public key임


생성된 publickey를 원격저장소에 저장하게되면, 로그인 여부 없이 작업이 가능



원격저장소를 github을 쓰고 있으므로, github을 열어서 public key를 등록하자.
>cat id_rsa.pub
만들어진 ssh키값을 선택 복사하기


github 사이트 접속 -> 로그인 -> settings -> SSH and GPG keys -> New SSH key 클릭 -> title 넣기, 복사한 public 키값을 넣기 -> add SSH key 누르기



이미 만들어둔 repository로 이동 -> clone or download 클릭 -> use ssh 클릭 -> 경로 복사하기


> cd cd:/developGit
> git clone git@github.com:koreacoderider/coderiderweb.git gitsshtest
git 프로젝트를 만들어줄 경로로 이동하기
방금 복사한 경로를 git clone 다음에 넣기, 만들어질 프로젝트명 넣기
이렇게 하면, 노트북으로 원격저장소의 데이터를 가져오기
정말 다운 받을 건지 묻는데, yes를 클릭하기


> cd gitsshtest
> ls -al

제대로 clone이 설치되었다면, 미리 만들어둔 README.md가 있음을 확인할 수 있음.

> cat README.md
> vim README.md
README.md 파일에 있는 내요이 "# coderiderweb"인데, 여기에 ssh success를 추가하기



> git add README.md
> git commit -m 'sshtest'
> git log
> git push
수정된 README.md파일을 staged 시키고 로그기록확인 후 push하기
정상적으로 ssh인증이 이루어진다면, push가 성공할 것임.


원격저장소(github)에 push가 제대로 이루어졌음을 확인할 수 있음.






명령어&실습24_프로젝트관리방법 크게 3가지
중앙집중식 워크플로, Integration-Manager 워크플로, Dictator and Lieutenants 워크플로
중앙집중식 워크플로

변경사항을 모두 중앙저장소에 집중해서 작업.
개발팀이 작거나 이미 중앙집중식에 적응한 상황이라면 이러한 워크플로에 따라 일하면 됨.
중앙 저장소를 만들고, 모든 개발자에게 push권한을 부여.
각자가 작업을 하기전에 pull을 먼저하기
같은 부분을 수정한다고 하더라도, 먼저 push한사람과 충돌이 생긴 뒤에 push한사람이 merge하여 push하게 하기



Integration-Manager 워크플로

여러개의 저장소를 운영할때 쓰는 워크플로우
주로 github, gitlab에서 사용하는 방식(프로젝트를 fork, 수정, pull요청)
관리자이외의 개발자는 읽기만 가능. 관리자만 쓰기가 가능한 원격저장소
일반개발자의 역할
로컬에 원격저장소 프로젝트 clone -> 추가 작업 진행 -> commit -> 일반개발자의 저장소에 push -> 관리자에게 자신의 저장소의 내용을 pull 요청
통합관리자의 역할
요청받은 일반개발자의 저장소를 리모트 저장소로 등록 -> 자신의 로컬에서 테스트 -> 로컬 git작업방의 메인 브랜치에 merge -> 메인원격저장소에 push



Dictator and Lieutenants 워크플로

저장소를 여러개 운영하는 방식을 변형.
수백명의 개발자가 참여하는 아주 큰 프로젝트를 운영할때 사용 ex) Linux 커널 프로젝트
dictator 밑에 lieutenants가 있고, lieutenants 밑에 개발자들이 있음.
일반개발자의 역할
최상위 원격저장소의 master 브랜치를 기준으로 자신의 토픽 브랜치를 Rebase
코드 수정
lieutenants의 역할
일반개발자들의 작업한 내용들의 자신이 관리하는 저장소의 master 브랜치에 merge
Dictator의 역할
lieutenants들의 저장소의 master 브랜치에 merge된 내용을 확인하고 자신의 로컬 작업 메인 브랜치에 merge -> 최상위 원격저장소의 master 브랜치에 push





+ Recent posts