7/21/2014

GITHub Site 및 Github Program 사용방법

1. Github 관한 소개

Github는 GIT를 공개 웹호스팅이며, 최근 3년사이에 사이트가 많이 변경이 되어 Manual도 다시 Update한다.
별도의 Github에서 Window Program을 제공하지만, 이것보다는 Source Tree가 더 쓰기가 괜찮은 것 같다.

2. Github의 기본구성 

더 이상 Bootcamp는 제공하지 않으며, Guide와 Start Project로 간단하게 구성되어있다.
그리고, 본인의 프로젝트와 Fork된 프로젝트가 아이콘으로 구분이 되어 표시되어진다.

  • Github  기본사이트 
  https://github.com/




  • 이전메뉴



  • 본인의 실제 Github 
  https://github.com/JeonghunLee
  1. Gist :  소스를 공개적으로 쉽게 쓸 수 있고 공개 할수 있다. 
  2. Git  :  Server를 무료로 사용해주게 해준다.  



  • GIT 기본사용서 
       http://rogerdudler.github.io/git-guide/index.ko.html
  • Github Help
       https://help.github.com/
  • Gist 의 설명 
       https://help.github.com/articles/about-gists/
  • wiki 의 설명
       https://help.github.com/articles/about-github-wikis/
  • Remote repositories
       https://help.github.com/articles/about-remote-repositories/

  • Git Command의 일반적인 작업 
모든 Command는 다 안나왔지만, 일반적인 작업순서이므로 금방이해가 된다.

https://blog.osteele.com/2008/05/my-git-workflow/


3.  Github에서 Project 시작방법  

Github 사이트가서  Start repository  한 후 하고 Repository 이름을 정하자.
그리고, git init 와 git clone으로 이를 down load를 한다.

  • Linux 에서 Git 설치 및 준비 
 $ sudo apt-get install git 

**HTTPS 할 경우, Username과 Password 입력 ( Username Github 주소 표시)

**SSH 일 경우 ssh-keygen을 이용하여 key 생성후 이를 Github에 Setting->SSH Keys 등록

나의 경우, SSH가 편하고 좋으며, 한번 Key 생성 후 등록하면 걱정할 필요없다. 

  • Window 에서 설치 (선택)
  1. Github Program  설치 
  2. Source Tree  설치 ( 다시 설명)
현재 Source Tree를 자주 사용하다 보니, Linux 명령어도 아래의 사이트를 참조해서 보면쉽게 이해가능하다.
  https://www.atlassian.com/git/tutorials/syncing


  • GIT 기본설정  (SSH/HTTPS 반드시 먼저설정)
기본으로 본인이 사용하는 Github의 계정정보를 넣어주고 설정한다. 

$ git config --global user.email "you@example.com"  //Github 설정된 email 
$ git config --global user.name "JeonghunLee"       //Github UserName 

  • GIT 설정확인 
폴더 안에 .git

$ git config --list    // 현재 설정된 부분 확인  
user.email=xxxxxxxxx    // 상위에서 설정한 Github 설정된 email 
user.name=JeonghunLee   // 상위에서 설정한 Github Username 
......
remote.origin.url=https://github.com/JeonghunLee/xxxx.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master


  • GIT Remote 확인 
$ git remote -v  // Remote Repository와 좌측 이름 확인 
origin https://github.com/JeonghunLee/Ubuntu1804_Basic.git (fetch)
origin https://github.com/JeonghunLee/Ubuntu1804_Basic.git (push)

// 상위 remote.master.remote=origin 되었으면, remote -v의 좌측역시 동일하게 되어야함 



3.1  Github에서 Remote New Repository 생성   

아래와 같이 Github Site에 로그인을 한 다음에 Repository로 가서 New or Start Project  본인이 직접 새로운 Github의 Remote Repository를 생성한다.


A. Github 사이트에서 Remote Repository 생성   

Github에서 Remote Repository 생성시 아래와 같이 간단히 사용법을 알려준다.




B. 본인이 작업한 소스를 Local Repository에 생성 및 등록 Update한다  
  1. git init :  Git Local Repository를 구성한다
  2. git add : add로  Index(Head)에 등록한다 
  3. git commit -m : Commit으로 최종적으로 Local Repository 등록.
  4. git status : 현재 GIT 상태를 파악  

  • GIT Project 생성 및 파일추가 와 Local Repository에 Commit 

echo "# ahyuo.github.io" >> README.md
git init
git add README.md               // STAGE/INDEX 에 File 등록 
git commit -m "first commit"    // Local Repository에 Commit 
git status                      // 현재 GIT 상태확인 및 다음해야할 Command 추천 



C. Remote Repository와 등록 및 Push. 
  1. git remote add orgin : 현재 만들어진 new repository를 추가등록
  2. git push -u orgin master  : Local Repository와 Remote Repository를 Sync 즉 Update 

$ git remote add origin https://github.com/JeonghunLee/test
$ git remote -v                         // 등록된 remote Repository 확인 
$ git push -u origin master


상위에서 설명한 Remote Repository 설정확인


3.2 Github에서 Remote Repository를 가져올 경우  

직접 만들지 않고 기존에 존재하는 Remote Repository에서 Source를 Download하여 사용하는 경우이다.
보통 본인이 하던 작업 or 다른 Github 사람 작업 가져오기 경우가 될 수 있겠다.


$ git clone https://github.com/JeonghunLee/test.git   //소스 가져오기  

본인 Repository를 수정을 한 후 update 하고 싶다면 상위와 동일하다.

$ git add *                                    // Local Index(Stage) 에 등록 
$ git commit -m "added my functtion commit"    // Local Repository 등록 

$ git remote -v   // 등록된 remote Repository 확인 


$ git remote add origin https://github.com/JeonghunLee/test.git
$ git push -u origin master


만약 push가 되지 않는다면, 상위에서 설명한 Remote Repository 설정확인


3.3 Web에서 Github 의 Repository를 수정/추가 한 경우

아래와 같이 본인의 작업환경에가서 Remote Repository가 변경이 되어있으므로,
Local Repository도 아래와 같이 Sync를 맞춰준다.


$ cd test                    // 본인의 Local Repository 이동
$ git pull https://github.com/JeonghunLee/test.git  // 나의 Github의 Repository와 Sync를 맞춰어주는 작업 


3.4 Remote Repository 등록 과 Update(push) 할 경우 

이제 상위에서 기본 사용법을 익혔으니, 실제 HTTPS or SSH로 이용하여 Remote Repository에 이용해보자
이미 Local Repository 가 생성이 되어있다고 가정하고, 아래 방법으로 Update만 하면된다.
git init 중요 (Local Repository 생성)

  • A. HTTPS로 했을 경우 
중요한것은 본인의 Username과 Password를 알아둬야 가능하다.

// Github에서 이미 Remote Repository를 생성 
$ git remote add origin https://github.com/JeonghunLee/test.git            // Remote Repository 등록 (Github Remote 등록)
$ git remote -v                                                            // 등록된 remote Repository 확인 
$ git push -u origin master                                                // Local Repository 와 Remote Repository Push 하여 Sync
Username for 'https://github.com': 
Password for 'https://xxxxx@github.com':

  • B. SSH로 했을 경우
SSH는 Key 기반으로 동작하기 때문에 우선 아래의 Key를 생성하여 Github에 등록하자.
// Github에서 이미 Remote Repository를 생성 
$ git remote add origin git@github.com:JeonghunLee/test.git                // Remote Repository를  origin 등록 
$ git push -u origin master                                                // origin의 등록된 Remote Repository의 master에 Push 

1. SSH Key 생성하는방법 (본인 email 사용)

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   // RSA 기반으로 나의 Github Email 기반으로 Key생성
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jhlee/.ssh/id_rsa): 
Created directory '/home/jhlee/.ssh'.

2. Password 두번 입력

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jhlee/.ssh/id_rsa.        // Private Key (Base64 Encoding)
Your public key has been saved in /home/jhlee/.ssh/id_rsa.pub.        // Public Key  (Base64 Encoding)
The key fingerprint is:
cf:bf:e0:59:f4:e5:9b:c5:6d:f9:17:df:1d:7c:f4:c0 your_email@example.com
The key's randomart image is:
+--[ RSA 4096]----+
|    .oo.         |
|.    .oo         |
|o . +o* .        |
| + + O.+         |
|  o o * S        |
|     . *         |
|      E .        |
|     .           |
|                 |
+-----------------+


3. Key를 확인하고 Github의 개인설정 Setting->SSH Key 등록


$ cat ~/.ssh/id_rsa.pub     // 이정보를 전체 입력 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLRdkIhvX5JZmRjaz6r19sdvHj+iDWskd+e8EWkFjrhuPFQdtd5KuFpgpDnchpgLNSxIYug0KzELqiiYMBk0MakVjvAlv9G5jo+VioHFsk9Hql9mAJUTQJ9sMAcu+JLY+3gGChNRbHTcnUK1Jm5SnPETmkasflA2Miv3ifhsr6Odmdc2VXtj6jqGrPGp47i21SXscszmGAdPtaUffo9xmfX9XKOOXjml2exNDPKl58Qu9OAF8Bn4Izxou34ctozA+UflJYOwCgcPf+dt3pa7SvnfpnzZpk4QsVh/ertjmUxno7Go71TgZRiwRe/lnK6xSmm0PDWjX2zquqagOaCkz/ your_email@example.com

4. 개인설정 (Setting->SSH Keys 등록) 후 확인
  https://github.com/settings/profile

Github 암호 없이  SSH Key 기반으로 접속이 가능

4. SSH-Agent 를 실행

$ eval "$(ssh-agent -s)"
Agent pid 2612

5. SSH에서 Key 추가 후 git push 실행

$ ssh-add ~/.ssh/id_rsa    
Enter passphrase for /home/jhlee/.ssh/id_rsa:             
Identity added: /home/jhlee/.ssh/id_rsa (/home/jhlee/.ssh/id_rsa)


Key 생성방법 및 추가방법 (Github 설명)
  https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Key 확인방법
  https://help.github.com/articles/checking-for-existing-ssh-keys/


추후 관리는 git tag  version 관리를 진행하고 git push remote와 sync를 맞추고새로운 file이 있을 경우 git add로 등록을 해주고 git commit으로 반영하고
remote와 sync를 맞추자.
사실 Tool로 관리하는 것이 편하긴 편하다.


3.5 Github 의 Repository Setting 

개별 Repository 의 Setting 의 기능에 대해 기본적으로 알아보자.

  1. Repository 이름 변경
  2. Repository 삭제 가능





4. 상대방과 협업 

Local repository 라는 본인의 개별 공간을 생성도 가능하지만, 상대방 Remote repository 와 나의 Remote Repository를 이용하여 협업도 가능하며,
상대방 Remote Repository에서도 협업이 가능하다.
  1. Fork는 상대방 Repository를 내 Repository로 그대로 복사해 오는 것
  2. Pull Request는 상대방 Repository 와 내 Remote Repository와 Merge하지하기 위해 요청하는 것

  • Fork
보통 상대방의 유용한 Repository를 Fork를 통하여 나의 Repository로 쉽게 가져올수 있다.
다만 이때 라이센스를 확인을 하고 가져오고 사용하자.
그리고, 이제 가져온 Repository는 내 맘대로 수정이 가능하며 권한도 내가 가지고 있다.
만약 수정을 하여 상대방이 내 소스가 좋다고 느껴 Pull Request를 할지도 모른다.
그러나, 보통 보면, 이것을 많이 거절하는 것 추세로 가는 것 같다.
그래도 반드시 참조와 라이센스는 중요하다.

  • Pull Request 
내 Repository를 상대방들이 Fork를 해서 가져가서 소스를 고치며, 내가 이제 Pull Request 가 가능하다.
이것을 이용하여 소스를 Merge하고 협업이 가능한 것이다.
Git의 pull command라는 것이 fetch하고 merge하는 기능이기에 일종의 상대방 Repository와 내 Remote Repository를 싱크를  맞추는 요청이다. (pull command)
                 
if you are hoping to contribute back to the original fork, you can send the original author a pull request    


5.  Github에서 Download 하는 방법  

Github 계정이 있다면,  상대방의 Public Github를 가져오는 방법은 Fork로 가져오면된다.
본인의 Github 소스를 Download 하고 싶다면  git clone을 이용하자.


6. Github Desktop 설정 및 기본사용법

아래 설정은 참고만 하고, 기본적으로 거의 고칠필요는 없다.
추후 이 챕터는 다시 작성.

  • 설정->Repository Setting
       현재 설정을 유지하지만, 만약 문제가 발생을 한다면, 아래의 설정을 수정한다.   
           .gitattributes 설정  // Line endings and attributes 변경
           .gitignore의설정   // Ignored files
 
  • 설정->Option 
  1. Configure git    기본환경설정 
  2. Clone Path :  my window repository path 
  3. Shell 설정 


Configure git는  GIT Command (git config --global user.name , user.email) 동일하며,  이며, 추후 여기에 설정되는 값들은 git config에 반영이 되므로, git config --list 로
확인하자.





이 Tool에서  쉽게 clone과 init을을 할 수 있는데, create 는  git init 과 동시에 폴더 생성이 되며, Clone도 git init 과 clone을 폴더 생성이다. 참 편하다.



여기서 create를 해주고, 파일들을 등록하고, 마지막에 Publish Repository를 해주면,이를 github에 자동으로 등록해주고, Github에 Remote Repository를 생성해준다.
물론 난 Public으로 생성

그런데,  Publish 하는 도중 Error  Failed to publish this branch 에러가 발생하는 경우가 발생한다. 이녀석이 https로만 통신을 하는데, 뭔가 문제가 발생을 한다.
내쪽에서 그래서 Proxy Server를 사용하면 해결이 된다고 하는데, 해보지 않았다.

지금 이 Tool이 https로만 동작하기에 , 설정에서 Repository Setting 에서 변경 불가능 해결책은 두가지다.
Proxy Server를 이용하거나, Shell을 이용하여, 직접 ssh주소로 연결하여 push하는거다.


1. Proxy Server 해결방법.

git config --global http.proxy http[s]://userName:password@proxyaddress:port

관련내용.
  http://stackoverflow.com/questions/13894387/github-failed-to-publish-this-branch-error-on-windows


2. Terminal에서 ssh주소로 직접 연결 

나는 귀찮아서, 이 방법으로 선택했으며, git command도 익힐 겸 해서  아래와 같이다 git command로 작성해서 해결을 했다.
이 문제가 발생하면,  github와 통신이 제대로 안되다 보니, Tool에서 제공하는 clone 기능과 sync기능 역시 제대로 안된다. 직접 command로 해야한다.  
다행히,Github에 자동으로 Repository까지는 생성이 되어서 귀찮게 Github사이트에 만들 필요가 없었다.



위와 같이 Github 사이트에서 나의 새로운 프로젝트를 확인을 하고, SSH주소를 확인을 한다.
지우고 싶다면, Setting -> Danger Zone의 Delete this repository 를 사용하면된다.

아래와 같이 한 이유는 origin 이미  https 주소로 사용되어있기에, ssh로 새로 사용.

$ git remote add ssh git@github.com:xxxxxx.

$ git push ssh master    // ssh remote주소에  master branch를 push한다.