Git 이란 무엇일까? 혼자 작업하기편

임동규·2022년 1월 3일
3

Git은 왜 사용할까?

Git 이란 단순하다. 버전 관리이다. 어릴 적 RPG 게임을 해본 사람이라면 케릭의 능력치를 어떻게 찍느냐에 따라 자신의 캐릭터가 좋은 캐릭터가 되거나 망케가 되는 것을 경험해 본 적 있을 것이다. 그런데 만약 자신의 캐릭터를 되돌릴 수 있는 기능이 있다면? 우리는 캐릭터의 능력치를 찍어보고 시험해 보고 더 나은 캐릭터를 사용할 수 있게 된다.
Git도 마찬가지다. 예를 들면 개발자 A가 있다고 하자. 개발자 A가 만든 하나의 프로그램이 작은 버그가 생성이 되었다. 그런데 버그를 수정하다가 실수든 고의든 한 부분의 코드를 바꿨는데 전혀 작동하지 않게 되었다. 더 중요한 점은 내가 어디에서 어디를 수정했는지 감이 안 잡힌다는 것이다!!!!

이럴 경우 어떻게 해야 할까? 이 개발자는 아마 작은 버그를 고치려다가 프로그램을 통째로 날려버리게 생겼다. 그런데 만약 Git을 사용하여 버전 관리를 했으면 어땠을까? 생각해 보자.
Git을 사용했다면 코드를 수정하기 전의 버전으로 돌려버리기만 하면 그만이다. 즉, Git을 사용한다는 건 버전 관리를 통해 작업의 효율성을 높이는 것이다. 이제 이 개발자는 자신이 생각한 대로 용감하게 코드를 수정할 수 있게 된다. 만에 하나 프로그램이 망가지더라도 다시 돌려버리기만 하면 된다. 이처럼 Git은 프로그램의 버전 관리를 위해 사용하는 것이다.

Git은어떻게? 사용하는 것인가? (혼자 작업하기)

github를 돌아다니다가 마음에 드는 패키지를 발견하였다. 그런데 이 코드에서 무엇인가 기능이 하나 더 있다면 좋겠다고 생각이 들었다.

1. Fork 란?

Fork는 다른 개발자의 Github에 있는 Repository에서 코드를 자신의 원격 Repository로 복사 및 연결하는 것을 이야기한다. 포크로 폭 찍어서 가지고 온다고 생각하자! Fork는 상대방 Repository와 자신의 Repository를 연결하는 것이라고 생각하면 된다. Fork를 하지 않게 된다면 해당 저장소로 push(밑에 설명)를 하지도 못하게 된다. 즉 original Repository의 commit이나 로그 같은 것들을 보지 못하게 된다.
예를 들면 비트코인 오픈 소스 프로젝트를 예로 들어보자. 만약 개발자 A는 비트코인에 어느 코드를 수정하면 기능이 훨씬 나아질 것이라고 생각이 들었다. 그래서 A는 비트코인이 더 나은 작동을 하는 것을 확인했다. 그러나 A는 프로젝트를 Fork 하지 않고 바로 자신의 Local Repository에 clone 하여 사용하였다. A는 비트코인 프로젝트에 commit을 할 수 없기에 더 나은 코드가 있다고 전달할 수가 없다.

만약 A가 Fork를 하고 Commit을 했다면? 아마 프로젝트 권한자가 A의 코드를 쉽게 볼 수 있었을 것이며 A는 비트코인 프로젝트에 도움이 되었을 것이다.
이처럼 상대방의 소스에 기여를 하고 싶다면 Fork를 하면 된다! Github 우측 상단에 Fork를 눌러서 Fork 하면 된다!

2. Clone 이란?

Github에 있는 자신의 Repository 에서 자신 컴퓨터의 로컬환경 Repository로 복사해오는 것이다.

git clone   github Repository 주소

하지만 꼭 그렇게만 사용할 필요는 없다. 자신의 Repository에서가 아닌 다른 사람의 Repository에서 Fork를 거치지 않고 자신의 Local Repository에 복사하는 것도 가능하다. 단 이때도 마찬가지로 다른 사람의 소스에 기여를 할 수는 없다.

3. Add란?

우리는 github에서 자신의 local 컴퓨터로 소스를 clone 하였다. 그렇다면 소스를 수정하게 된다. 우리의 파일은 local Repository에 Commit(밑에서 설명) 하기 전에 Staging Area라는 곳에 머무르게 된다. Commit 하기 전에 변경사항들을 저장해놓는 곳이라고 생각하면 되겠다.

git add를 통해 변경사항을 Staging Area에 넣었다. 그리고 git status를 해보니 modefied(수정) 이 되어 있다고 표시가 된다.

git add 명령어

$git add .           work space의 디렉토리에 있는 모든 변경된 파일을 staging Area 로 추가
$git add <File>      work space의 파일을 staging Area 로 추가

그런데 갑자기 Staging Area 에 있는 소스가 마음에 안들어서 변경사항을 폐기하고 싶다?

Staging Area 변경사항 삭제 명령어

git resotre --staged <file>

이런 식으로 Staging Area의 저장 사항을 폐기할 수도 있다.
즉 자유자재로 commit 하기 전의 변경사항을 Staging Area에 저장하게 되고 추가 및 삭제가 가능하다.

4. Commit이란?

간단하다. 우리는 Staging Area에 변경사항을 저장해놨다.이제 나의 Local Respository 로 변경사항을 반영하고 싶다.

commit을 하고싶다면?

$git commit -m(메세지)

우리는 commit에 메시지를 담을 수 있다. 예를 들면 000코드 수정 같은 것들이다. 이 메시지도 어느 정도 작성방법이 있는데 밑의 링크를 타고 한번 보는 것을 추천한다.
commit 메세지 작성 방법

commit을 완료 했다면?

만약 commit을 취소하고 싶다면?

$git reset HEAD^                  가장 최근의 commit 취소
$git reset HEAD^^^                최근부터 ^갯수만큼 취소
$git reset HEAD~<number>          가장 최근부터 number만큼의 commit 취소
$git reset -hard <지정 commit>       지정커밋 후의 작업(파일,StagingArea) 모두 삭제
$git reset -soft <지정 commit>   지정 commit 으로 head이동. 작업 삭제하지 않음. git 이력만 옮김

5. Push 란 ?

push란 자신의 Local Repository에서 Remote Repository로 삽입하는 것이다.

어떻게 push 할까?

$git push origin master  이때 origin master 는 자신이 fork 한 저장소를 뜻한다.

만약 자신이 fork 한 프로젝트가 아닌 새로운 프로젝트를 github에 처음 생성한 파일을 올리고 싶다면 github에서 프로젝트의 new Repository를 생성한 후에 git init 한 후에 git add remote origin <생성한 Repository 주소>를 하여야 한다.
보통 git clone 하게 된다면 Remote Repository의 주소가 origin으로 되어 있다.

6. Pull Request 란?

Pull Request 란 자신의 Remote Repository 에서 상대방의 Repository 에 Commit 하는 것이다. 예를들면 이거 내가 수정했는데 한번 확인해봐 하는 것과 같다.

pull requests 에 들어가보면 사람들이 오픈소스에 참여한 것이 보인다.

#중요한것은 Pull request 를 하려면 꼭 소스를 fork 해야 한다는 것이다!!!

이때까지 git과 CLI 에 대한 거부감이 들었기에 공부하지 않았지만 개발자가 되겠다고 결심한 순간 결국엔 해야하는 공부라는 생각에 도전해본 git 공부 조금은 친숙해졌고 이제는 친해져야겠다.

profile
I will be Blockchain Core Developer

0개의 댓글