Remote
- Remote의 경우 On_Promise로 Server를 구성할 수도 있고, Github와 같이 Cloud와 같은 공간을 활용 할 수도 있다.
- 아래의 설명의 경우 같은 PC지만 다른 폴더를 지정하여 수행할 예정
- 현재 위치 : /d/gittest2
- Remote : /d/gittest3
// --bard라는 옵션은 현재 폴더는 Remote 역할만 한다는 명령어.
$ git init --bare
Initialized empty Git repository in D:/gittest3/
작업장소 연결 (Remote Add)
MCR007@MCR007 MINGW64 /d/gittest2 (exp)
$ git remote add origin /d/gittest3 //원격Directory를 연결한다 그 별명은 origin이라고 한다.
MCR007@MCR007 MINGW64 /d/gittest2 (exp)
$ git remote -v // List 확인
origin D:/gittest3 (fetch)
origin D:/gittest3 (push)
- 추가 : git remote add 별명 위치
- 삭제 : git remote remove 별명
- 리스트 확인 : git remote -v
PUSH, 원격 저장소에 Upload
$ git push
fatal: The current branch exp has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
메시지 : git push --set-upstream origin master // master에서 Push 할 경우 origin의 master branch로 Push 한다.
$ git push -u origin master
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (17/17), 1.24 KiB | 317.00 KiB/s, done.
Total 17 (delta 0), reused 0 (delta 0)
To D:/gittest3
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
- 원격 저장소 Log 확인, 아래와 같이 내용이 Push 됐음을 알 수 있다.
MCR007@MCR007 MINGW64 /d/gittest3 (BARE:master)
$ git log
commit 9e9729be4e34d6f208ea14127126b6308e165b27 (HEAD -> master)
Merge: 966898d 9b12941
Author: blee <blee@hist.co.kr>
Date: Fri Sep 7 15:26:22 2018 +0900
Merge branch 'exp'
commit 966898d44359a38eb9c7c9d9398aacd05db550d5
Author: blee <blee@hist.co.kr>
Date: Fri Sep 7 15:26:08 2018 +0900
6
Github 사용하기
Git 저장소를 직접 설치하지 않고 Cloud 형태로 사용이 가능한 저장공간
Open-Source Project가 활성화된 이유 중의 하나, 커뮤니티 공간으로 발전
시작하기
- github 가입 -> 신규 레파지토리 생성 -> Clone or download 선택
https url 복사
2가지 방법
- git clone 을 통해 저장소 복사 및 Remote 연결
- 신규 폴더 생성 후 remote add를 통해 원격 저장소와 연결.
- 해당 Clone 연결 시 : github의 ID와 PW정보를 입력.
MCR007@MCR007 MINGW64 ~/Downloads/test
$ git clone https://github.com/byungjun0689/gitfth.git .
Cloning into '.'...
warning: You appear to have cloned an empty repository.
MCR007@MCR007 MINGW64 ~/Downloads/test (master)
$ ls -al
total 44
drwxr-xr-x 1 MCR007 197121 0 9월 11 09:14 ./
drwxr-xr-x 1 MCR007 197121 0 9월 11 09:10 ../
drwxr-xr-x 1 MCR007 197121 0 9월 11 09:14 .git/
MCR007@MCR007 MINGW64 ~/Downloads/test2
$ git init
Initialized empty Git repository in C:/Users/MCR007/Downloads/test2/.git/
MCR007@MCR007 MINGW64 ~/Downloads/test2 (master)
$ git remote add origin https://github.com/byungjun0689/gitfth.git
MCR007@MCR007 MINGW64 ~/Downloads/test2 (master)
$ git remote -v
origin https://github.com/byungjun0689/gitfth.git (fetch)
origin https://github.com/byungjun0689/gitfth.git (push)
MCR007@MCR007 MINGW64 ~/Downloads/test2 (master)
$ vim f1.txt
$ git add f1.txt
$ git commit -m 1
$ git push -u origin master // origin remote에 master로 해당 branch일 때 push 한다는 명령
Push & Pull
Push : 작업 완료 후 저장 공간에 Upload
Pull : Remote 1에서 작업 완료한 내용을 Remote 2 지역 또는 협업자가 Update 하기 위한 명령
- 작업을 수행하기전 충돌을 방지하기 위해 Pull은 필수적이다.
2대 이상의 컴퓨터, 예를들어 같은 컴퓨터 home, office라는 각각의 디렉토리, 같은 원격 저장소에 저장 되어있다고 가정
home에서 작업
f1.txt수정 후 commit -> push
office에서 와서 git pull 을 통해서 원격 저장소의 내용을 가지고 온다. ( 집과 오피스 내용이 동일 )
push를 하기전에 Pull을 수행해야 한다.
office에서 commit -> push 후 집으로 와서 f2.txt를 생성 후 commit -> push를 하게 되면 rejected된다. => 원격 저장소에 다른 작업을 했다.
git pull 이후 다시 push하면 된다. ( merge, 충돌 해결 등을 모두 해결 후 )
git pull -> 병합이 된다.
git log로 확인 가능.
다시 office로 가서 git pull 수행
지역저장소와 원격 저장소에서 따로 관리가 가능하나 나중에는 자주 Push를 하여 전체를 관리 할 수 있도록 한다.
다른 사람들이 Push를 많이 해놨을 경우 내가 Pull을 하게 되면 충돌이 많이 생겼을 것이다.
SSH(Secure Shell)
- 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다
- Push 할때마다 자격증명이 없을 경우(Windows) 로그인을 수행해야 한다.
- 여기서 공개키, 암호키를 사용.
키생성
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/MCR007/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/MCR007/.ssh/id_rsa.
Your public key has been saved in /c/Users/MCR007/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:123123123131231241241241241241241 MCR007@MCR007
The key's randomart image is:
+---[RSA 2048]----+
| oo. .E+|
| o o. o|
|. .. . o . . o |
|.*=O.o o . o + .|
|.o%o* ..S o + . |
| = + = o + . |
|+.+ + o . . |
|.o. . . |
|.o. . |
+----[SHA256]-----+
키확인
MCR007@MCR007 MINGW64 ~/.ssh
$ ls -al
total 22
drwxr-xr-x 1 MCR007 197121 0 9월 11 09:27 ./
drwxr-xr-x 1 MCR007 197121 0 9월 11 09:16 ../
-rw-r--r-- 1 MCR007 197121 1679 9월 11 09:27 id_rsa // Private Key
-rw-r--r-- 1 MCR007 197121 395 9월 11 09:27 id_rsa.pub // Public Key
-rw-r--r-- 1 MCR007 197121 173 9월 5 15:05 known_hosts
비밀번호를 입력하지 않더라도 서로 Matching하여 자동 로그인을 한다. 원격 : .pub, 내커뮤터: private key
.pub 라는 파일을 원격 저장소에 보낸다.
cat id_rsa.pub 내용을 복사
Github의 Setting 에서 SSH- GPG keys의 New SSH Key 에 해당 키를 복사.
자가서버를 이용한 원격저장소
- 원격 저장소에 git 초기화
DEV102@DEV102 MINGW32 ~/Downloads/remote
$ git init --bare
Initialized empty Git repository in C:/Users/PC/Downloads/remote/
- 작업할 공간에서 Remote Add
MCR007@MCR007 MINGW64 ~/Downloads/test3
$ git init
Initialized empty Git repository in C:/Users/PC/Downloads/test3/.git/
MCR007@MCR007 MINGW64 ~/Downloads/test3 (master)
$ git remote add origin ssh://ID@IP/c://Users/PC/Downloads/remote
$ git remote -v
origin ssh://ID@IP/c://Users/PC/Downloads/remote (fetch)
origin ssh://ID@IP/c://Users/PC/Downloads/remote (push)
Pull & Fetch
git pull, git fetch
- 서로 다른 2개 저장소에서 한곳은 Pull, Fetch를 하고 나머지 한곳에서는 Push만 수행한다.
- 1차, push 후 git pull 수행 origin/master와 master는 같은 commit을 가리킨다.
- 다시한번 office에서 f1.txt를 수정 push
- git fetch 수행 // 지역 저장소의 master branch는 원래 가리키고있던 Commit을 가리키고 저장소의 origin/master는 가장 최신의 commit을 가리킨다.
- pull의 경우 가장 최신의 commit을 단체로 가리킬 수 있도록하고 fetch는 지역저장소에는 어떠한 작업을 하지 않고 정보만 가지고 온다. 병합을 시키지 않는다.
- git diff HEAD origin/master와 서로 비교가 가능하다.
- git merge origin/master와 병합 => 같은 Commit을 가리킨다.
Tag
git 의 github 내 release를 보게 되면 Release Version에 따라 Commit ID를 가리키고 있다. 여기서 Commit ID는 변하면 안된다.
Branch의 경우 최신 Commit은 고정되지 않고 Commit을 할 때마다 바뀌어야 한다.
Tag 또한 특정한 Commit ID를 가리키고 있지만 변하지 않는 값이다.
- 새로운 GIt 폴더 생성 후 Commit 을 2개 수행
사용자들에게 특정 Commit ID를 다운로드할 수 있도록 만들고 싶다면
git tag 1.0.0 해당 Commit ID 또는 Branch를 넣는다
- git tag 1.0.0 master
- git commit 3을 수행
이 당시 master branch는 다른 Commit ID를 가리키고 있지만 Tag의 경우 이전 Master가 있었던 Commit ID를 가리킨다.
상세항 정보를 추가하는 Tag : annotated tag vs light weight tag
- git tag -a 1.1.0 -m "bug fix" master 를 수행
- git tag -v 1.1.0 이라고 하면 해당 상세 내용이 나온다.
- tag를 원격 저장소로 보내려면
- git push -u origin master 를 수행. 이럴 경우 가지는 않는다.
- git push --tags 를 수행하게 되면 tag까지 가게 된다.
'STUDY > Git' 카테고리의 다른 글
Git_협업 (0) | 2018.09.12 |
---|---|
Git_Stash (0) | 2018.08.23 |
Git Branch (0) | 2018.08.22 |
Git 기초, Git이란? (0) | 2018.08.22 |