빗버켓 (https://bitbucket.org/)
: 여러개의 원격저장소를 쓰면 내 코드를 가져와서 수정해도 원래 원격저장소를 해치지 않으므로 좋음.
Repositories -> create repository -> 5명까지 프라이빗 저장소 공짜이므로 팀플할때 좋음.
개발자들의 컨벤션 : git commit -m “modify README.md” 이런식으로 ~~해라 같은 명령형식 쓰는게 관례임.
# git remote 명령어 알아야할것들 ($ git remote --help)
# 1.
git remote [-v | --verbose] # 어디에 로컬 자료들을 올릴 것인지?
$ git remote -v
origin https://start6666@bitbucket.org/start6666/bitbucket_test.git (fetch)
origin https://start6666@bitbucket.org/start6666/bitbucket_test.git (push)
# 2.
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>
# 여태까지는 origin에만 넣어줬는데 이제 다른곳에도 넣어주고싶어.
# 매개변수 : 원격저장소의 별명(처음 만든 저장소는 origin이 별칭임) + 저장소의 주소
$ git remote add second https://github.com/start6666/git_pract.git
$ git remote -v
origin https://start6666@bitbucket.org/start6666/bitbucket_test.git (fetch)
origin https://start6666@bitbucket.org/start6666/bitbucket_test.git (push)
second https://github.com/start6666/git_pract.git (fetch)
second https://github.com/start6666/git_pract.git (push)
$ git push second master
# 3,4
git remote rename <old> <new>
git remote remove <name>
SSAFY 컴퓨터와 내 컴퓨터의 싱크를 맞추는 방법
항상 생각해야 하는 것 : 원격 저장소의 코드가 가장 중요하다, 무결성을 확보하기
가상으로 home_computer 디렉토리를 만들어서 실습해보자.
-
bitbucket에 있는 코드를 집으로 받아오기(동기화 : git clone 저장소 주소)
-
그래서 코드 디렉토리로 들어가서 git log를 하면 SSAFY 컴퓨터와 내 컴퓨터의 로그가 완전 동일함.
-
집컴퓨터 기준으로 코드를 수정하고, 애드/커밋/푸시를 해보자.
-
이제 다시 SSAFY컴퓨터로 왔을때는 집컴에서 업데이트된 코드가 들어가있지 않다.
-> 이것을 받기 위해서는 pull(push의 반대개념)이라는 명령어를 쓴다.
-> git pull origin master
-
가장 중요한 것
1) 항상 작업 완료 후 원격에 업로드
2) 내 컴퓨터와 원격을 비교해서 pull을 땡겨서 업데이트.
3) 만약 이걸 하지 않고 내 코드를 따로 업데이트하면 conflict때문에 꼬인다고함.
-> 이럴 때 내가 작업한 코드만 남겨두고 원격저장소에서 clone해서 합치는 무식한 방법을 생각할 수 있지만, 다른 방법이 있다.
-
branch
커밋을 할 때 평행세계를 만들어서 관리를 함.
checkout를 통해서 이런 branch들을 왔다갔다 할 수 있음 : complete를 해결가능함.
근데 어려우니 일단 나중에..
Git을 통한 협업
branch라는 개념을 모를 때 협업을 어떻게 할 것인가?
협업상황에서는 fault rate가 높아지므로 아마 conflict문제가 생김.
이런 문제 때문에 git에서는 프로젝트를 관리하는 대장이 꼭 필요함.
-
일단 repository를 만든다.
-
팀원을 초대한다. (setting -> collaborators -> 아이디 추가)
-
대장이 팀원에게 오더내리는 것을 github issue(게시판이라 생각)탭에서 할 수 있다.
- 이슈 발급 (New issue 클릭) : 마크다운이 작동한다.
-
이슈가 잘 해결됬으면 Close issue를 통해서 닫을 수 있음, 물론 Closed issue를 볼 수 있음.
- 팀원이 코드를 수정해서 커밋하고 다시 대장은 반영된 저장소에서 pull하면됨. (git pull)
Conflict 문제
Git은 아주 스마트하므로, 동일하지 않은 파일을 독자적으로 작성하고 따로 커밋하면 그것도 잘 반영한다. 그러나, 동일한 파일을 독자적으로 수정하고 pull을 하면 pull이 되지 않는 모습을 확인할 수 있다.
심지어 만약 수정한 걸 add를 하고 다시 pull하면 conflict문제가 발생할 것이다.
예) 1. 원격 저장소의 내용
-
내 저장소의 내용은 (III. 프로젝트 역할 분배)로 다르게 저장해놓고 add한 다음에
원격 저장소를 pull하면 merge conflict 문제가 발생한다.
- 그래서 이걸 VSCODE에서는 몇가지 선택지로 잘 병합할 수 있다.(Accept Incoming Change)
- 이 상태에서 git status를 하면 unmerged path라는 알림이 뜬다.
이걸 다시 add -> commit(메시지는 알기쉽게 꼭 merge conflict 적기!) -> push 하고 issue에서 그 상태를 알려주기.
- 다른 컴퓨터(대장)에서도 git pull origin master를 해서 merge conflict 오류가 있었다는 로그조차 일치시키는것이 필요하다.
그런데 이게 매우 불편하므로 branching을 하는것이 좋다.
협업상황에서는 github flow를 사용하는게 좋음. (git flow랑 다름, git flow보다 더 간편함.)
항상 진실은 remote - origin - master라고 생각하고 얘는 잘 건드리지 말자.
왜냐하면 master코드는 서버에서 계속 돌아가고 있기 때문이다.
작업을 낮은 branch에서 작업하다가 잘 되었다 싶으면 master branch를 건드려줌.
branching
원본 코드를 훼손하지 않은 상태에서 작업을 하기 위해서 branch가 필요하다.
상황) branch_test 폴더에 a.py와 b.py를 작성했으나 a.py에만 커밋이 되어있음.
즉, a.py는 master 가지에 있는 파일인것인데 b.py는 다른 branch에서 작성하고싶다.
-
git branch
=> 지금 현재 존재하고 있는 세계들 (master)
-
git branch [만들고자 하는 branch 이름]
ex) git branch new_world => new_world branch를 생성함.
=> git branch를 누르면 현재 branch가 master에 있다는 것을 알 수 있음.
-
git checkout [가고자 하는 branch 이름]
ex) git checkout new_world
-
여기서 다시 add commit하면 git log에서 (HEAD -> new_world)가 확인된다.
다시 master branch로 돌아오면 b.py가 존재하지 않는다!
-
그러면 서로 다른 branch를 합치는 방법도 존재한다.
git merge [합치고자 하는 branch 이름]
(주의!! 인수하는 곳에서 불러와야함 : master에서 merge를 해야한다는 말씀.)
즉, 무언가를 작업할때는 새로운 branch를 만들고 거기서 임시로 작업하는 습관을 들이자.
그래도 git에 대해서 제대로 알고 싶다면?! 유다시티 강의링크1강의링크2를 참고하자.
결론
- 작업 시작 전
- 작업을 하기 위해서 현재 나의 리포지토리와 master branch를 항상 일치시켜라! ex) - 지욱님 이제 작업시작할게요, 지욱님 버전까지 마스터로 받아들일게요 라고 서로에게 명시를 해줘야함
- master branch로 이동한 다음에 pull을 통해서 origin master를 확인하라!
- 이전에 작업을 마쳤던 branch를 지워준다! ex) git branch -d donchan
- 작업 시작
- 다시 작업할 branch를 만든다.
- 작업 이후에 내 branch에 그대로 올린다. ex) git push origin dongchan (master branch에 커밋을 올리면 안됨!)
- 동시에 작업한 것들이 다 끝나면 우선 팀장이 compare & pull request버튼을 깃허브에서 클릭 ex) base:master <-> compare:dongchan -> this branch has no conflicts with the base branch 와 같은 메시지가 뜸.
- 팀원들도 pull request를 보내주고, 팀장이 Merge pull request를 클릭해서 여러 브랜치의 결과를 합쳐준다!
리눅스 키워드 복습
-
루트 디렉토리와 홈 디렉토리의 차이
홈 디렉토리가 권한설정이 자유롭기 때문에 보통 여기를 기준으로 작업하자.
-
현재경로 : pwd
-
프린트 : echo
-
환경변수 저장
NAME="Dong Chan"
echo $NAME # 변수는 $ 표시를 붙여야 프린트할 수 있다.
- echo를 통해서 프린트한 것을 파일에 넣을 수도 있다.
# terminal
echo 'hello' > a.txt
echo 'world' > a.txt
# a.txt
world
그러나 새로 써지기 때문에 추가하려면 »를 사용해야한다.
- ls -al : 숨김파일까지 볼 수 있다.
start666:~/workspace $ cd ..
start666:~ $ ls -al
total 92
drwxr-xr-x 17 ubuntu ubuntu 4096 Jan 7 05:38 ./
drwxr-xr-x 15 root root 4096 Jan 7 05:38 ../
-rw-r--r-- 1 ubuntu ubuntu 314 Aug 31 2017 .bash_aliases
-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 2014 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 1651 Aug 31 2017 .bashrc
drwxr-xr-x 4 ubuntu ubuntu 4096 Jan 7 05:38 .c9/
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 31 2017 .cache/
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 31 2017 .config/
drwxrwxr-x 3 ubuntu ubuntu 4096 Aug 31 2017 .gem/
-rw-r--r-- 1 ubuntu ubuntu 52 Aug 31 2017 .gemrc
-rw-r--r-- 1 ubuntu ubuntu 223 Jan 7 05:38 .gitconfig
-rw-r--r-- 1 ubuntu ubuntu 494 Aug 31 2017 .gitignore
drwx------ 2 ubuntu ubuntu 4096 Aug 31 2017 .gnupg/
-rw-r--r-- 1 ubuntu ubuntu 494 Aug 31 2017 .hgignore
-rw-r--r-- 1 ubuntu ubuntu 62 Jan 7 05:38 .hgrc
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 31 2017 .local/
-rw------- 1 ubuntu ubuntu 15 Aug 31 2017 .npmrc
drwxr-xr-x 7 ubuntu ubuntu 4096 Aug 31 2017 .nvm/
-rw-r--r-- 1 ubuntu ubuntu 1258 Jan 7 05:38 .profile
-rw-r--r-- 1 ubuntu ubuntu 860 Aug 31 2017 .profileE
drwxr-xr-x 2 ubuntu ubuntu 4096 Jan 7 05:38 .ssh/
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 31 2017 lib/
drwxrwxr-x 3 ubuntu ubuntu 4096 Jan 7 06:13 workspace/
bash : bornagain shell - 굉장히 기본적인 shell (윈도우에서도 지원)
왼쪽에 있는 이상한 문자들은 파일 권한에 해당하는 것이다.
- 환경변수 편집
c9 .bashrc/
-> shell script : 일종의 스크립트 언어로 작성된 파일이 나타남. 여기서 환경변수입력
alias gs="git status"
alias gcm="git commit -m"
alias gp="git push"
alias gl="git log"
alias p3="python3"
-> source ./bashrc
- 환경변수 편집
c9 .bashrc/
-> shell script : 일종의 스크립트 언어로 작성된 파일이 나타남. 여기서 환경변수입력
alias gs="git status"
alias gcm="git commit -m"
alias gp="git push"
alias gl="git log"
alias p3="python3"
-> source ./bashrc
그외 명령어들
- man : help문서를 볼 수 있다.
- rm : 파일제거 -> 매우 강력한 방법이니 cat로 확인해보고 지우자.
-
- 디렉토리는 제거할 수 없다.
- 디렉토리를 제거하기 위해서 rm -r을 사용함 (재귀적으로 remove를 쓰는것.)
- rm -rf에서 f는 force를 의미하며 그냥 귀찮으니 강제로 해줘 같은 뜻이다.
- touch : 파일생성
- mkdir : 디렉토리 생성
- tree : 디렉토리를 트리형식으로 보여줌.
start666:~/workspace (master) $ mkdir templates
start666:~/workspace (master) $ ls templates/
start666:~/workspace (master) $ cd templates/
start666:~/workspace/templates (master) $ touch index.html
start666:~/workspace/templates (master) $ touch show.html
start666:~/workspace/templates (master) $ tree
.
├── index.html
└── show.html
mv (이동할 폴더) (이동할 위치) : 파일을 이동함.
mv (지금 파일 이름) (바꿀 파일 이름) : 파일이름을 바꿈
cp (카피할 대상) (카피할 곳) : 파일을 카피한다.
cp -r (폴더) (카피할 곳) : 폴더를 복사한다.
*(asterisk) : 이걸로 해당하는 모든 파일을 옮길 수 있다.
(ex : *.html -> html로 끝나는 모든 파일이 가져와짐.)
플라스크 복습
C9서버의 역할 : 유저가 요청을 보내면 유저에게 응답을 반환해주는것
- port : 파일이나 정보를 주고받는 통로
- ex) 443포트 : https (안전한 포트)
- 80포트 : 일반적인 http 전송
- 우리가 만든 Flask 서버가 C9서버 안에 있는데 걔는 응답을 8080포트로 무언가를 보내면 80번 포트(외부)로 연결해준다 -> 어플리케이션을 외부와 연결하는 역할을 한다.
나머지는 배웠던 내용이라 따로 적지는 않겠습니다
나중에 생각할 것들
윈도우 실행 -> check 입력 : check라는 환경변수를 확인함-> windows batch(스크립트파일)들을 넣음 + 파이썬 코드 -> 메커나이즈 : 자동로그인, 출석체크
FLASK : 마이크로 프레임워크, 쟝고에 비해서 훨씬 많은 코드가 필요할 수 있음.
평소에 만들고자했었던 서비스, 불편한점을 시정할 수 있는 MVP(minimul viable product)
예전에는 waterfall model(document에 기능들 전부 짜놓고 제작)을 통해서 오랫동안 소프트웨어를 개발했는데, 요즘은 에자일방법론같은 방식을 통해서 서비스를 구현함 : 일단 구현하고 피드백을 받아보면서 점진적으로 프로젝트 발전시킴.
비즈니스 이론 - 고객들은 자기가 뭘 원하는지 모른다 : 만들어놓고 이게 잘 되는지 평가받는게 중요함.
Vue.js , React.js, Angular.js(큰 회사에서 선호)
React : 자유도가 커서 원하는걸 만들 수 있음, 100명이 같은 기능을 짜면 100명이 다 다름. (플라스크에 가까움)
Angular : 프레임워크가 만들어놓은 convention만 잘 지키면 그럴듯하게 만들 수 있음.(쟝고에 가까움)
Vue.js는 자바스크립트만 알면 어느정도 할 수 있다고 함.