본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/WEB

2/8 화

728x90

오늘은 화, 수요일 이틀에 걸쳐 송태웅 강사님의 GitHub 특강이 있는 날이다~

 

GitHub·goorm 회원 가입하고 goorm IDE에 리눅스(컨테이너) 개발환경 추가. SW stack은 Pytorch

 

<프로젝트 협업 참여 시나리오>

1. fork 프로젝트 복사

2. clone 소스코드 다운로드

3. 프로젝트 분석·경향 파악

4. commit 코드 수정 작업

5. push 작업 commit 업로드 (fork 프로젝트 O / 팀 프로젝트 X)

6. Pull-Request 나의 작업(commit) 제출

 

commit : commit message(코멘트. 수정한 이유) + diff(소스 파일의 변화분)

Merge commit : 병합 커밋. 수정 내역(diff)은 없음. 빈 깡통 커밋

 

<Git 기본 명령어>

pwd : print working directory. 현재 작업 위치 확인

ls : 폴더 안에 내용 확인

cd : 폴더 경로 이동하기. cd ..은 상위 폴더로 나가기

mv 원본 파일명 변경할 파일명: 파일명 변경하기 or 파일 경로 이동시키기

touch 파일명: 빈 파일 생성하기

rm 파일명: 파일 삭제하기

clear : 작업창 비우기

df -h / : 현재 메모리 사용 현황

 

Pytorch 예제

# 해당 오픈소스에서 "누가 제일 개발을 많이할까?"
# 참고: nl 명령은 파일의 line number 명시 (순위표시용으로 사용)
git shortlog -sn | nl

# git shortlog -s 옵션이란? "개발자별 commit 개수 요약"
git shortlog -h | grep summary
    -s, --summary         Suppress commit descriptions, only provides commit count  

# git shortlog -n 옵션이란? "개발자별 commit 개수 순위 정리"
git shortlog -h | grep number
    -n, --numbered        sort output according to the number of commits per author
    
# 전체 소스파일 수정내역(commit) 개수 세기 
git log --oneline | wc -l
# 참고: wc -l 명령은 (파일) 라인수 개수 측정

# 전체 소스파일 수정내역(commit) 리스트     
git log --oneline
git log --oneline --no-merges
# 참고: 'q' 키 눌러서 나가기

# 소스수정 내역(commit) 한가지 확인하기  
git show 6c8e2ba

# 해당 commit(6c8e2ba)의 수정한 파일들 확인하기
git show 6c8e2ba | grep "diff --git"
# diff --git a/dcgan/main.py b/dcgan/main.py
# diff --git a/fast_neural_style/download_saved_models.py b/fast_neural_style/download_saved_models.py  
# diff --git a/run_python_examples.sh b/run_python_examples.sh
# diff --git a/word_language_model/main.py b/word_language_model/main.py

# 해당 commit의 수정한 파일 개수 확인 : 4
git show 6c8e2ba | grep "diff --git" | wc -l

# 전체 소스파일 수정내역(commit) 리스트     
git log --oneline

# 전체 소스파일 수정내역(commit) 자세히 보기  
git log -p

# 특정 폴더를 기준으로 소스 수정내역(commit) 리스트 확인하기  
git log --oneline -- mnist/

# 2020년 6월 한달간 소스 수정내역(commit) 개수
git log --oneline --after=2020-06-01 --before=2020-06-30 | wc -l

# 소스파일 수정내역(commit) 옛날 것부터 살펴보기  
git log --reverse

<commit message 첫 단어>

Fix : 잘못된 것을 고침

Improve : 잘되던 것을 개선 ex) 10→5초

Add : 없던 기능·옵션을 추가

Support : ex) 윈도우→리눅스, x86→ARM

Refactor : 코드 재배치

Implement : 구현

소스파일 수정내역(commit) 내용 확인

오픈소스 개발 참여 준비

Git 설정, Git 기본 편집기(nano) 설정

git config --global user.name "Jiyeon Lee"
git config --global user.email ljy9969@gmail.com
git config --global core.editor nano
sudo apt install -y nano
git config --list # Git 설정 내용 확인하기

Branch : 같은 폴더의 다른 세상

git checkout -b fix-mnist # fix-mnist라는 이름의 Branch 생성
touch hi.txt              # hi라는 이름의 텍스트 파일 생성  
git add hi.txt            # 새로운 파일의 수정내역(commit) 생성
git commit -m "test: add hi.txt file"
git checkout master       # Branch를 master 브랜치로 변경
ls                        # 폴더 내 hi.txt 파일 존재여부 확인
git checkout fix-mnist    # Branch를 fix-mnist 로 변경 후 hi.txt 파일 존재여부 확인
ls
git checkout master
git branch -D fix-mnist   # Branch 삭제
git status                # 현재 소스파일 상태(status) 확인, nothing to commit = 커밋할게 없다

오픈소스 개발 참여를 위한 수정(commit) 작업

nano mnist/main.py    # 원하는 편집기로 mnist/main.py 파일 수정

git diff              # 수정한 내용 확인
git add mnist/main.py # 소스 수정내역(commit) 만들기 준비
git status            # Commit 할 준비완료 상태 확인
git commit -m "Correct typo in default value within help" # commit을 만든 이유 작성
git show              # 내가 작성한 commit 확인

Pull-Request : PR. 오픈소스 프로젝트에 내가 만든 commit 작업 제출

git branch                # 나의 작업 브랜치 fix-mnist 확인
git remote -v             # GitHub와 잘 연동됐는지 확인
git push origin fix-mnist # 내 commit을 나의 Fork 저장소 GitHub에 업로드해서 제출(PR) 준비

git stash : commit 임시저장

git status    # 수정한 파일 확인
git stash     # 수정한 내용 잠시 저장(stash)
git status    # 현재 소스폴더 상태 확인: 아무 수정분 없음
git stash pop # stash 내용 복구
git status    # 복구된 수정한 파일 확인

git checkout -- mnist/main.py : 파일을 지정해서 최신 역사를 기준으로 파일 내용을 복구시킴, 덮어쓰기

git add mnist/main.py # commit할 준비
git status
git reset             # add 명령 취소
git status            # commit할 준비 취소 후 상태 확인

commit 삭제

git add mnist/main.py   # 수정한 내용 기준으로 commit할 준비
git commit -m "Add import json" # commit 만들기
git show                # 생성한 commit 정보 확인
git log --oneline -3    # 위에서부터 3번째 행까지 조회
git reset --hard HEAD~1 # commit 정보 삭제. HEAD~1 은 가장 위에서 첫번째 내용을 삭제함
git log --oneline -3    # 삭제 후 가장 최신 commit 확인

라이선스 서명 넣어서 commit message 넣기

git add mnist/main.py                  # 수정한 내용 기준으로 commit할 준비
# commit 만들기. -s 옵션 포함시 라이센스 서명을 commit message 안에 포함함
git commit -s -m "Add import requests" # -sm 동일함
git show                               # commit message 안에 Signed-off-by 확인

commit b875ceb20214246a5a43c9495dcd226aced8d3b3 (HEAD -> fix-mnist)
Author: Jiyeon Lee <ljy9969@gmail.com>
Date:   Tue Feb 8 06:51:04 2022 +0000

    Add request

    Signed-off-by: Jiyeon Lee <ljy9969@gmail.com>

diff --git a/mnist/main.py b/mnist/main.py
index dc816d2..b2d9a61 100644
--- a/mnist/main.py
+++ b/mnist/main.py
@@ -6,7 +6,7 @@ import torch.nn.functional as F
 import torch.optim as optim
 from torchvision import datasets, transforms
 from torch.optim.lr_scheduler import StepLR
-
+import requests

 class Net(nn.Module):
     def __init__(self):

git commit --amend : 최신 commit 수정. commit ID가 새로 부여됨

git log --oneline -3                            # 최신 commit 조회
106d167 (HEAD -> fix-mnist) Add import requests # 첫번째 행의 commit ID 확인

git add mnist/main.py                           # 수정한 내용 commit 할 준비
git commit --amend                              # 최신 commit 수정
git log --oneline -3
9786c82 (HEAD -> fix-mnist) Add import requests # 최신 commit 수정 이후 commit ID 확인

origin : 나의 Fork 저장소 GitHub
upstream : 오픈소스 공식 GitHub(또는 팀 프로젝트)

 

오픈소스 프로젝트 개발 참여 중 Rebase가 필요한 상황 : 협업하는 사람이 많으므로 최신 역사로 베이스를 업데이트

upstream에 merge 하는 것과 upstream에서 fetch/rebase 후 origin에 force push 하는 것은 다름

# 오픈소스 공식 GitHub 프로젝트 URL를 upstream으로 등록
git remote add upstream https://github.com/taeung/pytorch-example
git remote -v                     # GitHub와 잘 연동됐는지 확인
git fetch upstream master         # 공식 upstream 저장소에서 최신 commit history 가져오기
git rebase upstream/master        # 최신 commit history 기준으로 베이스 갱신 (rebase)
git push --force origin fix-mnist # Fork한 저장소(GitHub)도 수정하기 (PR 자동 갱신)
1. 1/17 월 2. 1/18 화 3. 1/19 수 4. 1/20 목 5. 1/21 금
취업 특강 파이썬
환경 설정

(파이참, 아나콘다, 주피터 노트북)
파이썬
데이터 타입

(list, tuple)
파이썬
데이터 타입

(range, string, dictionary, set, bool)
파이썬
사용자 정의 함수,

객체지향,
사용자 정의 클래스
6. 1/24 월 7. 1/25 화 8. 1/26 수 9. 1/27 목 10. 1/28 금
파이썬
사용자 정의 클래스,

사용자 정의 모듈
DB(MySQL)
DBMS,

MySQL 환경 설정,
DB/테이블 생성,
DB 입력·활용,
Index
DB(MySQL)
View,

백업과 복원,
DB 모델링,
관계(PK, FK),
DML(CRUD),
데이터 타입

DB(MySQL)
DML(CRUD),

WHERE 조건,
패턴 매칭,
SubQuery,
정렬,
그룹핑,
집계 함수,
트랜잭션(ACID 특성)
DB(MySQL)
JOIN,

UNION,
NOT IN,
WEB
11. 2/3 목 12. 2/4 금 13. 2/7 월 14. 2/8 화 15. 2/9 수
WEB
WebStorm 환경 설정,

HTML,
CSS,
JavaScript,
jQuery CDN
WEB
jQuery 문법,

Selector,
Method
WEB
jQuery Method,

Event,
AJAX
GitHub 특강
소스코드 관리,

Fork, Clone, Branch,
Commit,
Push, Pull-Request,
Rebase
GitHub 특강
프로젝트 관리

* 협업을 위한 Git 프로젝트 경향 파악과 diff 읽는 능력 기르기!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > WEB' 카테고리의 다른 글

2/10 목  (0) 2022.02.10
2/9 수  (0) 2022.02.09
2/7 월  (0) 2022.02.08
2/4 금  (0) 2022.02.05
2/3 목  (0) 2022.02.03