.gitignore(깃 이그노어) 생성하기

git bash나 cmd에서

touch .gitignore 

라고 명령을 실행해서 만들 수 있다. 

아니면 그냥 vscode 등의 편집기나 다른 ide에서 클론한 프로젝트에서 직접 .gitignore라는 파일을 만들어도 무방하다.

 

.gitignore(깃 이그노어) 작성하기

.gitignore를 작성하는 첫번째 방법으로는 파일 이름을 직접 적는 방법이 있다.

예를 들자면 "readme.md", "index.html" 등처럼 직접적인 파일 이름을 명시하는 행위를 말한다.

이렇게 하면 깃은 해당 이름을 한 파일을 더 이상 추적하지 않는다.

자주 gitignore에 넣는 단일 파일들로는 환경변수 설정 파일들이 있다. (.env부터 해서 블라블라블라)

root 경로에 있는 파일이 아니라면 그 파일의 경로를 전부 적어줘야한다.

루트에 views가 있고 파일들과 폴더들이 있는 상황

이런 구조에서 잠시 어떤 이슈가 생겨 advertisement.html을 깃으로 업데이트하지 않기를 원한다면 깃이그노어에

views/advertisement.html

이라고 한줄 추가해주면 깃은 더 이상 이 파일을 추적하지 않게 된다.

엄밀히 말해서 이 경우는 저 파일이 이미 커밋되어서 Repository까지 올라가있던 경우라면 깃에서 저 파일을 삭제한 후

깃 이그노어에 views/advertisement.html 를 저장해야지 제대로 적용이 되는 것을 확인할 수 있다.

경로의 시작이 root인 이유는 보통 .gitignore도 root에 있기 때문인데 파일의 경로는 .gitignore의 위치를 기준으로 깃이 판단하는 모양이다.

 

 

두번째 방법으로는 경로를 지정하는 방법이 있다. (이 문제 때문에 오늘의 포스팅이 있게 되었다.)

형식은 "경로 이름/" 의 모양을 한다.

node.js를 이용한 프로젝트를 혼자서 진행하고 있었는데, 깃에 백업을 하려니 파일의 갯수가 너무나도 많아서 다 푸쉬를 하는게 맞는지 찾아보게 되었다. 알고보니 노드의 modules은 그때그때 npm install을 이용해서 진행하는 것이 간편하다. 그래서 혼자서 할 때 뿐만 아니라 협업할 때에도  "node_modules/" 를 .gitignore에 추가하는 편이 좋다.

경로를 포함한 파일을 깃 이그노어에 추가할 때 추가적으로 알아두면 좋은게 있는데,

routes/**/controller.js
와 같은 식으로 깃 이그노어를 작성한다면 이 문장은

routes/controller.js
routes/front-end/public/controller.js
혹은 이것보다 더 짧거나 긴 디렉토리라도 루트 경로에 있는 파일이 2개의 애스터리스크 전에 경로와 겹치고 뒤의 파일 이름이 같다면 깃은 같은 조건의 파일을 전부 추적하지 않게 됩니다.

비슷하게 

public/css/**

이런 식으로 작성하게 되면 public/css/ 밑의 파일들은 전부 깃 추적에서 제외됩니다.

 

 

세번째 방법으로는 확장자를 지정하는 방법이 있다.

형식은 " *.확장자이름 " 의 모습을 한다.

예를 들자면 *.log 를 깃이그노어에 추가한다면 .log 확장자 파일은 더 이상 깃이 추적하지 않게 된다.

 

 .gitignore.io 이용하기

 

.gitignore.io란 프로젝트를 진행할 때 사용할 환경, 언어 등을 세팅해주면

깃 이그노어에 세팅할 문서를 만들어주는 사이트입니다.

아래의 사진은 이 사이트에 "node" 라는 키워드 하나만 넣었을 때 나오는 요소들 중에서

지금 프로젝트에서 누가 봐도 안쓸만한 요소들을 빼고 다시 정리한 파일입니다.

이 내용을 생성한 .gitignore에 카피하면 끝!

 

 

git checkout "빠져나갈 브랜치 이름"
(로컬에서 브랜치를 만들어두지 않았던 상태라면
git checkout -b "브랜치 이름"
이 명령어로 브랜치의 생성과 이동을 한번에 해도 괜찮다.


git add .
(혹은 git add "추가할 파일 이름")


git commit -m "커밋 남길 메시지"


git push origin "1번 줄에서 입력했던 브랜치 이름"


git checkout "원래 있던 곳"
(보통은 main 이나 master로 빠져나갈겁니다)


git merge "1번 줄에서 입력했던 브랜치 이름"


git push

위와 같은 순서로 브랜치를 생성하고

생성한 브랜치에 commit 및 push를 한 후 메인과 merge를 할 수 있습니다.

이때의 merge 방식은 fast-forward 입니다.

 

현재 커밋이 6번이라고 가정했을 때

master나 main 브랜치에 이슈가 생겨서

5번으로 커밋을 되돌리고 임시용 브랜치 A를 만들어서 위의 6번을 그 브랜치에 푸쉬해둔 후 

되살린 5번 커밋의 내용을 바탕으로 문제를 해결한 후 B 브랜치를 만들어서 보낸 커밋을 6-2라고 합시다.

6번과 6-2는 fast-forward 방식으로 merge하기 힘들 수 있습니다. 같은 파일을 작업했다고 치면

conflict가 날 것이기 때문입니다.

이런 경우에 협업에서 가장 많이 사용하게 되는 방식이

3way_merge 입니다.

 

임시대피용 브랜치 A와 문제 해결을 위한 또 하나의 브랜치 B가 있습니다.

여기서 위에서 사용한 방식으로 main과 A를 merge 하게 되면 처음에는 fast-forward 방식으로 merge 되었다고 출력이 됩니다.

그런 후에 6번 커밋이 있는 main과 6-2번 커밋이 있는 B를 merge 하게 되면 fast-forward 방식이 아닌,

Merge made by the 'recursive' strategy

라는 식으로 merge가 진행됩니다.

이 의미는 6번 커밋과 6-2번 커밋을 서로 비교하는 것이 아닌, 그 둘의 부모 커밋인

5번 커밋을 바탕으로 3_way_merge를 하였다는 뜻입니다.

이 3_way_merge도 치트키는 아닌게, 같은 이름의 파일에 같은 부분이 수정되었다면 여전히 conflict가 뜰 수 있습니다.

그럼에도 불구하고 한번의 커밋을 바탕으로 여러명이서 하나의 파일 이름에 내용들을 추가할 경우, 위와 같이 3_way_merge를 할 수 있어야합니다. 

이 방법이 어렵다면 제가 아는 수준에서는 여러 사람이 하나의 파일을 수정하는 일을 최대한 피해야합니다만...

백엔드던 프론트엔드던 협업에서는 위와 같은 방법을 숙지할 수 있으면 좋을 것이라 생각합니다.

 문제의,시작

메인 프로젝트의 구성을 만들 때 긁어온 파일이 utf-8과 ms949로도 인코딩이 되지 않자 구글링으로 알아낸 정보가

내가 작업하려던 파일은 euc-kr로 읽으면 깨지지 않는다는 점이었다. 이 문제는 혼자서 프로젝트를 구축할 때는 전혀 문제가 없었는데 협업을 시작하고 난 후에 대환장 파티가 시작되었다.

그것은 바로 깃을 이용해서 나와 협업자들이 pull push를 할때마다 반드시 깨지는 파일들이 나타났다는 점인데,

이는 내가 구축했던 프로젝트는 euc-kr로 자바 소스 파일들을 읽어들이는데, 협업자들은 utf-8로 되어 있어서

서로 작업물을 공유했을 때 문제가 안생기면 이상할 수 밖에 없던 구조인 것이었다.

 

이를 해결하기 위해서

General의 Content Types에 들어가서

상단의 Content types: 에 있는 Text 항목의 하위권에서 내가 바꿨었던 값을 찾았다.

 

여기서 디폴트 인코딩 값이 euc-kr로 되어 있었는데 UTF-8로 바꿔주니 문제가 해결되었다.

(저 부분에서 디폴트 인코딩이 다르게 설정되어 있으면, 프리퍼런스의 워크스페이스와 프로젝트에서의 UTF-8 설정을 한다고 하더라도 적용되지 않고 자바 소스 파일이 생성되거나 수정된다면 euc-kr로 변경된다는 뜻이다. 그래서 한글 깨짐 현상이 반복되었고, 저 처리 이후에는 한글 깨짐 현상은 없어졌다.)

git 에 파일들을 나눠서 백업하는 와중에

~~~ /d/JAVA01/workspace/JavaProgram/src (master)
$ git add .
warning: adding embedded git repository: EzenAcademy_BackEnd-JAVA-
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint:   git submodule add <url> EzenAcademy_BackEnd-JAVA-
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint:   git rm --cached EzenAcademy_BackEnd-JAVA-
hint:
hint: See "git help submodule" for more information.

 

와 같은 문구가 출력되었다.

그래서 원인을 분석해보니

warning: adding embedded git repository라는 경고 문구는

하위 폴더에 .git 폴더가 이미 생성 되어 있는 경우에 나올 수 있는 문구였다.

이와 같은 상황일 때는 하위 폴더의 .git을 전부 제거한 후에

상위 폴더에서 이용하면 말끔히 해결되었다!!

※ 본 내용은 비주얼스튜디오코드 2022 버전으로 진행했습니다.

 

아직 git이 뭔지도 잘 모르는 초보 개발자에게 git은 너무 어려웠다

 

그래서 내가 어떻게 올렸는지 지금의 내가 미래의 나에게 알려주기 위해서

 

기록용의 목적으로 잠깐 짬내서 남겨본다...

 

 

우선 깃허브

 

https://github.com/

 

GitHub: Where the world builds software

GitHub is where over 83 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

 

에 sign up이랑 로그인을 해주고 ...

 

 

https://git-scm.com/

 

Git

 

git-scm.com

 

이 곳에서 자신의 운영체제에 맞는 버전으로 git을 설치해주면 된다.

 

준비가 다 되었으면

 

비주얼스튜디오 코드로 가기 전에!!!!!!!!!!!!!!!

 

반드시 먼저 선행해줘야할 과정이 있다.

 

그것은 바로 깃허브의 좌 상단에서

 

Recent Repositories 

 

옆에 있는 new 를 눌러주고 새롭게 폴더를 받을 준비를 해야한다는 것

 

프로젝트 이름을 정해두고 생성을 하게 된다면

 

이런 식으로 화면이 뜨게 되는데

 

프로젝트를 새로 생성해서 깃허브로 업로드 하게 되었다.

 

 

일단 깃배쉬를 이용해서 계정 설정을 해두자.

 

https://xangmin.tistory.com/102

 

윈도우에서 Git Bash 설치하기

1. 설치 파일 다운로드  Windows에서 Git을 사용하기 위한 GitBash를 설치한다. (2.30 버전) Git Bash 설치 파일을 받기 위해 공식 홈페이지(https://git-scm.com/)에서 다운로드 한다. 다운로드 완료 후 설치..

xangmin.tistory.com

(다른분 포스팅 참조)

 

 

그 후 비주얼 스튜디오 코드에서 터미널을 열고

 

git init 

(초기화하고 프로젝트를 생성한다)

 

git add . 

(깃 애드 뒤에 " . " 이 들어가 있다.)

 

git status

(현재 프로젝트의 상태를 확인해준다.)

 

git commit -m "first commit"

 

git remote add origin "내 깃허브 프로젝트 주소"

 

git push origin master

 

순으로 진행하였다.

+ Recent posts