n311_개발 환경

ssu_hyun·2021년 9월 9일
0

[codestates] AI Bootcamp

목록 보기
25/62
post-thumbnail

#터미널 #CLI #깃(Git) #깃헙(Github) #파이썬 가상환경


학습 목표

  • 터미널 등 CLI 를 접근하고 사용할 수 있다.
  • 파이썬 가상환경을 만들고 사용할 수 있다.
  • 파이썬 가상환경이 왜 필요한지 설명할 수 있다.
  • 에 대한 설명을 할 수 있다.
  • 깃을 사용해 프로젝트 관리를 할 수 있다.
  • 깃헙과 같은 사이트를 통해 깃 레포 관리를 할 수 있다.



아나콘다(anaconda)

  • 콘다의 버전 확인 : conda --version
  • 가상환경 만들기 : conda create -n(--name) 가상환경 이름 python=version
  • 가상환경 지우기 : conda env remove -n 가상환경 이름
  • 가상환경 이름 바꾸기 : conda create --name 변경할 이름 --clone 기존 이름 -> 새로운 환경 활성화 후 기존 환경 지우기
  • 가상환경 리스트 보기 : conda env list
  • 가상환경 활성화 : activate 가상환경 이름
  • 가상환경 비활성화 : conda deactivate
  • 폴더 들어가기 : cd
  • 폴더 리스트 보기 : dir
  • 깃허브 코드 모두 복사 : git clone 웹주소



가상환경 사용 이유

  1. 환경의 격리
  2. Conda - Data Science에 최적화 되어 있는 가상환경 tool
    **pipenv, virtualenv





git

Git 명령어 모음
Git 간단한 사용법 및 명령어


git & github 실습

  • user : 사용자 이름
  • DESKTOP-3EPR9NJ : 컴퓨터 이름
  • MINGW64 : 현재 실행중인 bash 프로그램 이름
  • ~(main) : 해당 컴퓨터 사용자의 기본 폴더 위치(git rev-parse --show-toplevel를 입력해 terminal에서 확인 가능)
  1. vscode folder & terminal(ctrl + ` ) open

  2. $ git init

    -> 해당 폴더가 Git의 관리 하에 들어갔다는 의미
    *연결된 레포지토리 주소 확인 : git remote -v

  3. $git config --global user.name "(내 이름)"
    $git config --global user.email "(내 메일주소)"

    .git 숨김 파일(폴더의 시공간 저장 파일) 보이지 않을 때

    1) 해당 파일의 '보기'에서 '숨긴 항목' 체크
    2) 해당 파일의 '보기-옵션'에서 '보기'의 '알려진 파일 형식의 파일 확장명 숨기기'체크 해제

  4. $ git clone 레포지토리 주소
    -> repository를 vscode 해당 folder에 다운로드하는 것

git에서 특정 브랜치만 clone하는 방법
git clone -b {branch_name} --single-branch {GIT URL}
ex) git clone -b javajigi --single-branch https://github.com/javajigi/java-racingcar


4. $ cd 폴더명
-> 다운로드 받은 해당 폴더로 들어가기
ex) cd github-practice

$ git log
-> 프로젝트의 내역들을 그대로 컴퓨터에 복사된 것을 볼 수 있음
5. 파일 수정 및 새로운 내용 추가한 후 아래 명령어 순서대로 입력

  • git add -A : stage area에 업로드(staging이라고 부름)
  • git commit -m "메세지" : local repository에 업로드 + message :협업 시 다른 팀원에게 이 commit에서 어떤 변화가 주어졌는지 간략히 알려주는 역할
    *git 커밋 메시지 작성법 예시 googling
  • git push : 원격 저장소/github에 업로드

  • push하지 않은 커밋 확인 : git log --branches --not --remotes
    • --branches ref/heads에 있는 모든 커밋을 보여주는 옵션(패턴을 주면 브랜치를 제한할 수 있습니다.)
    • --remotes : ref/remote에 있는 모든 커밋을 보여주는 옵션(패턴을 주면 마찬가지로 원격브랜치를 제한할 수 있습니다.)
      => --not : 원격에 없는 모든 커밋이 출력

다른 팀원의 업데이트 내역을 확인하고 싶다면!?
*pull로 새로운 변경사항을 모두 업데이트 받기 전까지는 내쪽에서 push 불가능하므로 이 과정은 필수불가결한 과정이다.
1. git fetch 입력
-> 리모트 브랜치 정보를 업데이트(로컬과 서버의 커밋 히스토리는 독립적으로 정보 동기화가 필요하다)

2. git status 입력
-> github에서 다운받아야할 사항이 있는지에 대해 알려줌

3. git pull (원격명)(브랜치명) 입력
-> 새로운 변경사항 다운로드 & commit 내역 동기화



clone

git clone (클론해올 저장소 url)(로컬 복제 위치:생략가능)
ex) $ git clone https://github.com/lainyzine/git-clone.git

  • 리모트(remote) : local 이 아닌 git 서버에 있는 저장소 ( remote branch )
  • 리모트 브랜치(remote branch) : 원격 저장소(리모트)에 생성한 브랜치
  • 리모트 트래킹 브랜치(remote tracking branch) : 리모트 브랜치를 추적하는 레퍼런스이며 브랜치로 로컬에 있지만 임의로 움직일 수 없고 리모트 서버에 연결할 때마다 리모트의 브랜치 업데이트 내용에 따라서 자동으로 갱신될 뿐이다. 이는 일종의 북마크라고 할 수 있다. 리모트 저장소에 마지막으로 연결했던 순간에 브랜치가 무슨 커밋을 가리키고 있었는지를 나타낸다. 이름은 / 형식으로 되어 있다.즉 로컬에서 마음대로 움직일수 없어 pull, fetch 등으로 움직이고 checkout 하게 되면 HEAD 가 origin branch 를 가르킨다. 그다음 커밋하면 HEAD 가 움직인다.
  • 트래킹 브랜치(tracking branch) : 서버로부터 저장소를 Clone하면 Git은 자동으로 master 브랜치를 origin/master 브랜치의 트래킹 브랜치로 만든다. 이는 다음의 remote tracking branch와 바인딩 되어있는(로컬에서 tracking branch로 푸쉬하면 리모트 트래킹 브랜치로 푸쉬하는것과 같아진다.) 로컬 브랜치이다.
  • 브랜치 추적(Upstream Branch) : 원격 브랜치의 마지막 커밋 해시 값을 가리킵니다. 이 포인터 정보는 .git/refs 폴더 안에 저장되어 있습니다.

트래킹 브랜치 직접 만들기
리모트를 origin 이 아닌 다른 리모트로 할 수도 있고, 브랜치도 master 가 아닌 다른 브랜치로 추적하게 할 수 있습니다.
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'

이미 로컬에 존재하는 브랜치가 리모트의 특정 브랜치를 추적하게 하려면?!
git branch 명령에 -u 옵션을 붙여 설정해줍니다.
$ git branch -u origin/serverfix
Branch sf set up to track remote branch serverfix from origin.

  • origin : git clone 명령이 자동으로 만들어주는 remote 이름이다. git clone -o booyah 라고 옵션을 주고 명령을 실행하면 booyah/master 라고 사용자가 정한 대로 리모트 이름을 생성해준다.

원격 저장소(remote repository) 연결

  • 현재 연결되어 있는 원격 레파지토리 확인 : git remote -v
  • 연결되어 있는 저장소 끊기 : git remote remove (원격명)
  • 다시 원격 저장소와 연결 : git remote add (원격명) (url)
  • remote tracking branch 변경 : git branch -m (변경 전 branch명)(변경 후 branch명)
  • 이 외 명령어

    SYNOPSIS
git remote [-v | --verbose] 
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url> 
git remote rename <old> <new> 
git remote remove <name> 
git remote set-head <name> (-a | --auto | -d | --delete | <branch>) 
git remote set-branches [--add] <name> <branch>... 
git remote get-url [--push] [--all] <name> 
git remote set-url [--push] <name> <newurl> [<oldurl>] 
git remote set-url --add [--push] <name> <newurl> 
git remote set-url --delete [--push] <name> <url> 
git remote [-v | --verbose] show [-n] <name>... 
git remote prune [-n | --dry-run] <name>... 
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...] 

DESCRIPTION

Manage the set of repositories ("remotes") whose branches you track. 

OPTIONS

-v, --verbose 
Be a little more verbose and show remote url after name. 
*NOTE: This must be placed between remote and subcommand.



branch

  • branch 만들기 : git branch (branch명)
  • branch 이동 : git checkout (branch명)
  • 위 두 과정 한번에 : git checkout -b (branch명)
  • 가져올 원격 브랜치 코드의 로컬 브랜치 이름 설정 :git checkout -b (생성할 브랜치 명) (원격 브랜치 명)
    => 새로 만들어진 branch는 원 branch의 현 상태를 그대로 가져간다.
  • 원격 브랜치 코드 로컬 브랜치에 적용하기(tracking) : git checkout -t origin/(branch명)
  • 새롭게 만든 branch github 업로드 : git push origin/(branch명)
  • branch 삭제 : git branch -d (branch명)
  • 로컬 branch 목록 조회 : git branch
  • 원격 branch 목록 조회 : git branch -r
  • 로컬&원격 branch 목록 조회 : git branch -a

새로 추가한 branch명이 나오지 않는다면!?
=> git fetch 입력 후 다시 확인

새로운 branch를 로컬로 가져와 그리로 넘어가는 걸 한번에 하고싶다면!?
=> git checkout -b (새로운 branch명(a))(원격명(b)/넘어갈 branch명(c)) 입력

[의미]
로컬에 a로 브랜치를 만들어서 원격 b의 c브랜치 내용을 받아와 그 평행우주(?)로 건너간다는 뜻
[결과]
새로운 branch의 파일 상태 로컬에 반영 + 로컬에 새로운 branch 생성 + check으로 해당 branch로 이동



Merge


*my-another-ideabranch가my-ideabranch의 변화도 포함하므로 my-another-ideabranch만 불러오면 된다.

  1. git checkout master : master branch로 돌아온다.
  2. git merge (변화를 가져올 branch 이름)
    ex) `git merge my-another-idea

두 분기에서의 작업내역 시각화
git log --graph --all --decorate 입력

conflict 발생 : 같은 파일, 같은 부분을 동시에 수정할 경우
1. 수정 내역 하나만 남기고 delete
2. git add -A
3. git commit



rebase


여러 분기에서의 복잡한 작업내역들을 깔끔하게 정리하고 싶을 때 merge 대신 사용






Git/Git Hub 관리

  • Git > 버전 관리(git log, branch, merge 등)
  • Git Hub > Git의 유용한 기능들을 GUI로! + 협업툴 + 배포



error

git add 명령어 사용 시 '.git/index.lock file exists' 에러 발생


=> 직접 해당 파일 지움



구글링을 통해 해결한 의문점들

CMD 명령 프롬프트와 아나콘다 프롬프트 차이점
: Windows 명령 프롬프트(cmd)에서 ls, clear 명령어 사용하는 방법





[reference]

[Anaconda] 아나콘다 가상환경의 개념 및 활용방법
GitBook
누구나 쉽게 이해할 수 있는 git 입문
가장 쉬운 Git 강좌 - (상) 혼자작업편
가장 쉬운 Git 강좌 - (하) Github편
소스 코드 관리를 위한 Git 사용법 총 정리
원격 브랜치 가져오기(remote branch)
git에서 원격저장소의 branch 가져오기
원격 저장소 연결 및 끊기 ( git remote )
Git 내용정리 (명령어 정리)
Git remote branch 가져오기

0개의 댓글