Version/Git

[Git] gitignore, gitattribute

nowkoes 2023. 8. 15. 00:39

리포지토리 내의 파일 및 디렉터리 동작 정의

개요

개발자 전용 폴더인 _Dev와 깃허브 업로드 폴더인 _Git

 

 개발 환경에선 다양한 디렉터리 구조를 관리하는 필요성이 자주 생긴다. 필자는 깃허브 업로드를 위한 _Git 폴더와 개발자 전용의 _Dev 폴더를 분리하여 사용했다. 이 두 폴더를 별도로 관리하다 보니 문제점이 발생했다.


 _Dev 폴더는 개발 과정에서 생성되는 모든 파일, 예를 들면 .dll 파일이나 로컬 테스트를 위한 설정 파일 등을 포함하고 있다. 반면, _Git 폴더는 깃허브 업로드를 위해서만 필요한 소스 코드와 프로젝트 파일로 구성되어 있다. 이 때문에 원격 저장소에 올릴 때마다, _Dev의 변경 사항을 _Git로 옮기고 불필요한 파일을 일일이 제거하는 과정이 필요했다.

 

 Git에서는 이러한 문제를 해결 하기 위한 기능으로 gitattributes와 gitignore를 제공한다. 이번 시간에는 이 두 기능에 대해 알아보도록 하자.


본문

.gitignore

출처: https://git-scm.com/docs/gitignore

 

 다음은 Git 홈페이지 공식 문서에 있는 gitignore에 대한 설명이다. .gitignore 파일Git에게 특정 파일이나 디렉터리를 추적하지 않도록 지시하는 역할을 한다. 주로 빌드 결과물, 로그 파일, 설정 파일 등의 임시 파일이나 개인적인 정보를 포함한 파일, 혹은 라이선스에 민감한 .dll 파일 등을 Git 리포지토리 추적 대상에서 제외하기 위해 사용된다. 

 

.gitignore 파일의 확장자가 .txt가 아니므로, 텍스트 파일로 생성할 때 확장자를 .gitignore로 지정해야 함

 

 만약 리포지토리를 만들 때 .gitignore 파일을 추가하지 않았다면 다음과 같이 로컬 리포지토리에 .gitignore라는 텍스트 파일을 생성하면 된다.

 

출처: https://github.com/github/gitignore/blob/main/VisualStudio.gitignore

 

 필자의 경우 Visual Stuido로 작업한 결과물을 깃허브에 올리고 있으므로, 일반적으로 Visual studio로 작업할 때 이에 추가해야 하는 항목들은 주로 컴파일된 바이너리, 로컬 설정 파일, 사용자 별 설정, 임시 파일 등이 포함된다. 해당 사이트에는 여러 IDE 플랫폼, 언어에서 사용되는 .gitignore를 파일을 업로드해두고 있는데, 이중 필요한 것만 따로 복사해도 되고, 모두 카피해도 무방하다.

 

출처: https://www.toptal.com/developers/gitignore

 

 혹은 자신의 개발 환경에 맞게 자동으로 .gitignore를 생성해주는 .gitignore.io 사이트도 있으니 요긴하게 사용하면 된다.


.gitattributes

출처: https://git-scm.com/docs/gitattributes

 

 .gitattribute리포지토리에 특정 규칙 및 설정을 적용하기 위해 사용되는 파일이다. 이 파일을 통해 특정 파일 및 디렉터리에 대한 특별한 동작을 정의할 수 있다. 이전 게시글에서 다루었던 LFS를 적용했다면 아마 대용량 바이너리 파일을 관리하는 규칙이 적용되어 있을 것이다. 이를 테면, psd에 LFS를 적용하였다면

*.psd filter=lfs diff=lfs merge=lfs -text

 처럼 되어 있을 것이다. 만약 따로 존재하지 않는다면, 위의 .gitignore처럼 파일을 생성하도록 하자.

 

 다음은 필자의 gitattributes다. 용량 문제로 LFS를 해제한 후에는 라인 엔딩만 CRLF로 적용시켜 놓았다. 여기서 라인 엔딩(line ending)은 텍스트 파일에서 줄의 끝을 나타내는 문자나 문자 조합을 의미한다. UNIX 계열에서는 \n을 사용하지만, MS-DOS와 Windows에서는 \r\n을 사용한다. 만약 윈도에서 작성한 파일을 리눅스에서 열면 줄 바꿈 표시가 잘못될 수 있어, 모든 텍스트 파일의 줄 바꿈 문자를 자동으로 변환하도록 설정해 놓았다.

 

다양한 운영체제에서의 호환성을 위해 LF로 설정

 

 이 외에도 특정 파일에 병합 전략을 지정하거나, diff 동작을 커스터마이즈하거나, 특정 파일이나 디렉터리에 대한 속성을 할당하는 등 여러 설정을 바꿀 수 있으니 요긴하게 사용하면 된다. 만약 Visual Stduio와 관련된 설정을 찾아보고 싶으면 다음 사이트참고하도록 하자. 각 라인에 대한 주석은 아래 접은 글에 달아놓도록 하겠다.

더보기
# Auto detect text files and perform LF normalization
# 텍스트 파일을 자동으로 감지하고 줄 끝을 LF로 정규화한다.
# 이는 크로스 플랫폼 프로젝트에서 유용하다.
* text=auto

# Custom for Visual Studio
*.cs     diff=csharp # C# 파일에 대한 diff 동작을 C# 코드에 최적화된 방식으로 수행하도록 설정
# 여러 Visual Studio 관련 파일들에 대해 merge 동작을 union 방식으로 수행하도록 설정
# 여러 브랜치에서 동시에 프로젝트 설정이 변경될 때 발생하는 병합 충돌을 최소화하는 데 도움
*.sln    merge=union 
*.csproj merge=union 
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union

# Standard to msysgit
# 일반적으로 바이너리로 간주되는 파일들 (예: Word, PDF)을 텍스트 파일처럼 diff 동작을 수행하도록 설정
# 이 설정은 해당 파일들의 변경 내용을 텍스트 형식으로 보기 위해 사용
*.doc	 diff=astextplain
*.DOC	 diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot  diff=astextplain
*.DOT  diff=astextplain
*.pdf  diff=astextplain
*.PDF	 diff=astextplain
*.rtf	 diff=astextplain
*.RTF	 diff=astextplain

 

두 번째 링크는 설정이 많아 다음과 같이 요약하였다.

 

1. 텍스트 파일의 줄 끝 정규화: 기본적으로 모든 텍스트 파일에 대해 줄 끝을 자동으로 LF 또는 CRLF로 변환. 여기서 text=auto는 Git에게 파일의 줄 끝을 OS에 맞게 자동으로 조정하도록 지시.

2. Binary 파일: 대부분의 이미지, 오디오, 비디오, 아카이브, 글꼴 및 일부 실행 파일들을 이진 파일로 간주하고 있어 diff 및 병합에 대한 특별한 처리가 이루어지지 않는다.

3. IDE 및 텍스트 파일: Visual Studio, Eclipse 및 다른 일반적인 텍스트 파일에 대한 설정이 포함되어 있다. 이 설정은 이러한 파일들의 줄 끝을 CRLF 또는 LF로 정규화하도록 지시한다.

4. 언어별 설정: C/C++ 소스 코드 및 헤더 파일을 텍스트로 간주하며, 일부 관련 바이너리 파일 (예: .o, .dll, .exe 등)을 이진 파일로 간주한다.


요약

gitignore
1. 정의: Git에게 특정 파일 또는 디렉터리를 추적하지 않도록 지시하는 데 사용. 이 파일에 나열된 항목들은 Git의 작업 영역에서 무시됨.
2. 특징
 a. 저장소에 커밋되지 않아야 하는 임시 파일, 로그, 의존성 등을 무시하는 데 사용
 b. 와일드카드 문자를 사용하여 패턴 매칭을 지원
  - 와일드카드(wildcard) 문자: 특정 패턴과 일치하는 여러 항목을 지정할 때 사용하는 문자나 문자열
 c. 주석은 #으로 시작
3. 주의 사항
 - 이미 커밋된 파일은 무시하고, 저장소의 루트 디렉터리나 하위 디렉터리에 위치해야 함

gitattributes
1. 정의: 파일의 특성을 지정하고, 이러한 특성을 기반으로 Git의 동작을 변경하는 데 사용됨. 이는 줄 바꿈 정규화, diff 렌더링 방식 및 merge 동작과 같은 것들을 포함.
2. 특징
 a. 텍스트 파일의 줄 끝을 자동 정규화할 수 있음
 b. 특정 파일 형식에 대한 이진 속성을 지정하여 diff 및 병합 동작을 방지할 수 있음
 c. IDE 및 언어별 설정을 포함하여 다양한 확장자와 파일 유형에 대한 동작을 지정
3. 주의 사항
 - 중복 항목을 피해야 하며, 설정 변경 전에 팀과의 상의가 필요하며, 저장소의 루트 디렉터리나 하위 디렉터리에 위치해야 함
반응형