개발환경

[git/git-hub] 개발한 결과물을 관리해보자(Git)

Github을 지속적으로 썻지만, git을 CLI로 쓴적은 없습니다. 항상 github 홈페이지에 들어가서 페이지가 완성이 되면, 업로드하는 방식으로 개발을 자주 했다. 혹은 UI tool(Github Desktop)을 이용해서 그냥 commit을 하는 형태로 했다.

 

나의 스킬을 늘리기 위해서, Cli 환경으로 git을 이용해보는 연습을 해보려고 한다. Git hub에 흔적을 남기면서, 이제 프로젝트를 위한 준비단계라고 생각하면 좋을 듯합니다.

Git

Git은 분산버전관리 시스템입니다. 여러 대의 컴퓨터(여러 명의 프로그래머)에서 하나의 프로젝트에 대해서 "협업"을 위해 유용하게 사용할 수 있는 tool입니다.  그림으로 이해를 해보자면, 아래와 같습니다.

컴퓨터 A,B,C가 모두 같은 작업물에 접근하여, 업데이트 할 수 있게끔 해주는 Tool입니다.

 

Git 설치하기

 

설치 자체는 간단하다. git 공식홈페이지에 접속해서, OS에 맞게 다운로드하면 됩니다.

 

Git Cli 환경으로 다루기

 

Git을 사용하는 방법에는 2가지 방식이 있습니다. Cli(Command Line)을 이용하는 방법 , UI Tool(SourceTree와 같은)을 이용하는 방법이 있습니다. VScode의 Terminal을 이용할 거기 때문에, Cli 환경을 이용하도록 하겠습니다.

* Tips

Mac OS를 이용하신다면, Mac에 내장되어있는 Terminal을 그대로 쓰시면 됩니다. Window유저시라면, cmder를 다운로드해서 사용하시는걸 추천드립니다. 하지만 , 기본 powershell , cmd를 쓰셔도 무방합니다. 

Git 초기설정 

1. git에 연결할 디렉토리에 .git 파일을 만들어줍니다.

git init

git파일을 초기화 해주는 명령어입니다. 해당 경로에서 위의 명령어를 실행하면, git파일이 생성됩니다. powershell보다는 저는 cmder이 편해서, 이제 Cmder을 쓰도록 하겠습니다.

powershell에서 입력
Cmder에서 git 생성 확인

2. 각 OS에 맞게 , 문자열 처리에 대한 옵션을 설정해줍니다.

 

Windows

git config --global core.autocrlf true 

위 명령어는, 문자열 처리 방식에서 OS마다 약간의 차이가 있기 때문에, Mac에서 업로드한 내용, Window에서 업로드한 내용이 각각의 다른 운영체제에서 볼 때는 달라질 수 있기 때문에, 자동으로 처리해주는 옵션입니다.

혹시, git 파일을 Editor로 열어서, 수정하고 싶다면 아래와 같은 방법이 있을 수 있습니다. (command line으로는 여러가지 설정을 하기는 힘들고 , 여러가지 설정을 한꺼번에 하고 싶은 경우)

git config --global -e 

[core] , [user],[filter] 등등의 값이 있습니다. 예를들어, 위처럼 autocrlf 속성을 true로 하고 싶다면,  core 옵션에 autocrlf 속성을 넣고, true로 해주면됩니다.

3. git 파일 자체를 삭제하기 

rm -rf .git 

rm -rf는 터미널 명령어 입니다.

Git의 WorkFlow 

git은 일정 WorkFlow에 따라서 , Version Control을 합니다. 따라서, 이 WorkFlow를 제대로 이해해야, Git을 활용할 수 있습니다.

git 상태 확인 명령어

  • git의 workFlow에 따라, 각각의 파일들이 어떻게 진행되고 있는지 알고싶을 수 있습니다. 그럴 때 이용할 수 있는 명령어입니다.
git status

option으로 -s를 이용하면, 짧게 볼 수 있습니다. A(Add) M(Modified)등 여러 정보가 함축적으로 나타납니다. 

 

내 컴퓨터의 저장공간 (Local 저장공간)

 

Working Directory

  • 내 컴퓨터의 작업공간 입니다.  git이 tracking 하거나 tracking하지 못한 파일들이 있는 공간입니다. tracking은 이미 git이 관리하고 있는 파일들이고, untracked는 새로 생긴 파일 또는, git이 관리를 하지 않고 있는 파일을 이야기 합니다.
  • git add 명령어를 통해서, tracked 할 수 있습니다.
git add [파일명] 

이때, Git에 포함하고 싶지 않은 파일들이 있을 수 있습니다. (module 파일이라던지, log 파일이라던지, 등등)

eslint,prettier에도 ignore파일이 있듯이, git에서도 .gitignore파일을 준비해놨습니다. 등록하지 않고 싶은 파일을 gitignore파일에 등록해놓으면됩니다.

예를들어, 나는 module폴더는 제외하고 싶으면, gitignore파일에 /module을 등록해놓으면 됩니다.

echo /module >.gitignore

staging Area

  • Commit할 파일들을 모아놓는 공간입니다. 즉, Commit할 준비가 된 공간입니다.
  • 여러개의 파일들을 add해서, commit하기 위해, 예약된 공간입니다.
  • Add를 한 순간의 그 파일 상태를 저장합니다. 즉, add한 뒤, 수정을 하면 , 또 add를 해주어야 합니다. 

수정된 파일내용 확인하기

 

staging에 올렸다가, Modify가 되어서, 어떤 내용을 수정했는지 확인하고 싶은 경우가 있다.

git diff

하지만, 위와 같은 명령어를 이용하면, 보기가 까다롭다. (읽는 방법이 따로 존재한다)

쉽게 볼려면, Editor에 있는 기능을 이용하면 훨씬 더 쉽게 볼 수 있다. 아래와 같이 config를 설정해주자.

Commit하기

 

Staging Area에 파일이 자신이 의도한 대로 되었다면, git commit으로 git directory에 넣어줘야한다.이때, git commit은 단순히 git commit으로 하기 보다는, 어떤 내용에 대한 Commit인지 메세지를 남기는게 좋다. 

git commit -m [메세지]

예를들어, 내 이번 commit이 Login Validation에 대한 내용이면, 아래와 같이 작성할 수 있다.

git commit -m "Add Login Validation"

 

원격저장소 (GitHub 연결하기)

 

Local에서의 설정이 끝났으면, 이제 github에 해당 폴더를 연결시켜주는 작업을 하는게 좋습니다.우선, 깃허브에 들어가서, test용 repository를 하나 만들어줍니다.

git remote add origin [깃허브주소]

git remote가 되어있는지 확인하기

git remote -v

연결이 성공하면, 아래와 같이 뜹니다.

연결이 되었다면, 이제 몇가지 작업을 좀 해줘야한다.

 

1. branch 이름 맞춰주기 .

 

master -slave의 이름을 이제, main으로 바꾸는 운동을 시작했다. 그래서 ,branch를 main으로 바꾸어주면 된다. 물론, 다른 branch로 내가 분기를 낼거면, 사실 필요없긴하다.

git branch -M main

2. git push 해주기

 

이제, 원격저장소에 push할 명령어를 입력해준다. 

git push -u origin(내가 add때 등록한 이름) main(등록할 branch이름)

 

* error 발생

reject되는 경우

위와같은 오류사항이 발생할 수 있다. 위 오류사항은, github에 있는 현재 파일과, 내 local에 있는 파일이 달라서 그걸 check 해달라는 내용이다. 보통, github에서 readme파일을 생성해서, 생기는 오류이다. 

안전한 방법은 Pull을 이용하는 방법이 있다.

git pull origin main 

여기서 "refusing to merge unrelated histories"라는 멘트를 뱉어내며, 에러를 발생시킬 수 있다. 이건, 전혀 관련없는 두개의 프로젝트들이 지금 하나로 합쳐지는 경우이기 때문에, 뱉어내는 오류인데, 아래의 옵션을 주면 해결할 수 있다.

git pull origin 브렌치명 --allow-unrelated-histories

강제로 Push하기. (local에 있는 파일을 강제로 프로젝트에 덮어쓰기)

 

개인프로젝트인 경우에는, 강제로 push하는 방법이 더 좋을 수 있다. 왜냐하면, 초기셋팅일 확률이 크고, 뭐 자기자신의 파일과 github에 파일의 차이가 크게없을 수 있기 때문이다.  하지만, 만약 중간에 project에 합류한다거나, 어떤 프로젝트를 여러명이서 하고 있을 때는 무적권 pull을 이용하자.

git push origin +main 

 

Tip 

 

git 명령어를 단축키로 등록할 수 있습니다.

git config --global alias.단축키 기능

예를들어, git status가 너무 길어서, st로 줄이고 싶다면, 아래와 같이 명령어를 칠 수 있습니다.

git config --global alias.st status

 

 

refer

엘리님의 git강의