Git
파일 및 폴더 무시
수색…
소개
이 항목에서는 Git 저장소에 불필요한 파일 (또는 파일 변경)을 추가하지 않는 방법을 설명합니다. git update-index --assume-unchanged
은 여러 가지 방법 (전역 또는 로컬 .gitignore
, .git/exclude
, git update-index --assume-unchanged
및 git update-index --skip-tree
)이 있지만 콘텐츠 관리는 다음과 같은 것을 의미합니다. 무시하면 실제로 폴더 내용 (예 : 파일)이 무시됩니다. 빈 폴더는 기본적으로 무시됩니다. 어쨌든 추가 할 수 없기 때문입니다.
.gitignore 파일을 사용하여 파일 및 디렉토리 무시하기
Git이 특정 파일과 디렉토리를 무시하도록 만들 수 있습니다. 즉, 저장소에 하나 이상의 .gitignore
파일을 만들어서 Git이 추적하지 못하게 할 수 있습니다.
소프트웨어 프로젝트에서 .gitignore
일반적으로 빌드 프로세스 또는 런타임에 생성되는 파일 및 / 또는 디렉토리의 목록을 포함합니다. .gitignore
파일의 항목에는 다음을 가리키는 이름이나 경로가 포함될 수 있습니다.
- 임시 리소스 (예 : 캐시, 로그 파일, 컴파일 된 코드 등)
- 다른 개발자와 공유해서는 안되는 로컬 구성 파일
- 로그인 암호, 키 및 자격 증명과 같은 비밀 정보가 들어있는 파일
최상위 디렉토리에서 생성 된 규칙은 전체 저장소의 모든 파일과 하위 디렉토리에 반복적으로 적용됩니다. 하위 디렉토리에서 생성 된 규칙은 특정 디렉토리 및 하위 디렉토리에 적용됩니다.
파일이나 디렉토리가 무시되면 다음과 같이 표시되지 않습니다.
- 힘내에 의해 추적 됨
-
git status
또는git diff
와 같은 명령에 의해보고 됨 -
git add -A
와 같은 명령으로 준비
추적 된 파일을 무시해야하는 특별한 경우에는 특별한주의를 기울여야합니다. 참고 : 이미 Git 저장소에 커밋 된 파일은 무시 하십시오.
예제들
다음은 glob 파일 패턴을 기반으로 .gitignore
파일에있는 규칙의 일반적인 예입니다.
# Lines starting with `#` are comments.
# Ignore files called 'file.ext'
file.ext
# Comments can't be on the same line as rules!
# The following line ignores files called 'file.ext # not a comment'
file.ext # not a comment
# Ignoring files with full path.
# This matches files in the root directory and subdirectories too.
# i.e. otherfile.ext will be ignored anywhere on the tree.
dir/otherdir/file.ext
otherfile.ext
# Ignoring directories
# Both the directory itself and its contents will be ignored.
bin/
gen/
# Glob pattern can also be used here to ignore paths with certain characters.
# For example, the below rule will match both build/ and Build/
[bB]uild/
# Without the trailing slash, the rule will match a file and/or
# a directory, so the following would ignore both a file named `gen`
# and a directory named `gen`, as well as any contents of that directory
bin
gen
# Ignoring files by extension
# All files with these extensions will be ignored in
# this directory and all its sub-directories.
*.apk
*.class
# It's possible to combine both forms to ignore files with certain
# extensions in certain directories. The following rules would be
# redundant with generic rules defined above.
java/*.apk
gen/*.class
# To ignore files only at the top level directory, but not in its
# subdirectories, prefix the rule with a `/`
/*.apk
/*.class
# To ignore any directories named DirectoryA
# in any depth use ** before DirectoryA
# Do not forget the last /,
# Otherwise it will ignore all files named DirectoryA, rather than directories
**/DirectoryA/
# This would ignore
# DirectoryA/
# DirectoryB/DirectoryA/
# DirectoryC/DirectoryB/DirectoryA/
# It would not ignore a file named DirectoryA, at any level
# To ignore any directory named DirectoryB within a
# directory named DirectoryA with any number of
# directories in between, use ** between the directories
DirectoryA/**/DirectoryB/
# This would ignore
# DirectoryA/DirectoryB/
# DirectoryA/DirectoryQ/DirectoryB/
# DirectoryA/DirectoryQ/DirectoryW/DirectoryB/
# To ignore a set of files, wildcards can be used, as can be seen above.
# A sole '*' will ignore everything in your folder, including your .gitignore file.
# To exclude specific files when using wildcards, negate them.
# So they are excluded from the ignore list:
!.gitignore
# Use the backslash as escape character to ignore files with a hash (#)
# (supported since 1.6.2.1)
\#*#
대부분의 .gitignore
파일은 다양한 언어에서 표준이므로 시작하려면 프로젝트에 복제하거나 복사 / 수정하려는 언어별로 나열된 샘플 .gitignore
파일 세트를 사용하십시오. 또는 새로운 프로젝트의 경우 온라인 도구를 사용하여 시작 파일 자동 생성을 고려할 수 있습니다.
.gitignore의 다른 형태들
.gitignore
파일은 저장소의 일부로 커밋되도록 만들어졌습니다. 무시 규칙을 적용하지 않고 특정 파일을 무시하려면 다음 옵션을 사용하십시오.
-
.git/info/exclude
파일을 편집합니다 (.gitignore
와 동일한 구문 사용). 규칙은 저장소의 범위에서 전역 적입니다. - 모든 로컬 저장소에 무시 규칙을 적용 하는 글로벌 gitignore 파일 을 설정합니다.
또한 글로벌 git 설정을 변경하지 않고 추적 된 파일의 로컬 변경 사항을 무시할 수 있습니다.
-
git update-index --skip-worktree [<file>...]
: 사소한 로컬 수정 -
git update-index --assume-unchanged [<file>...]
: 제작 준비가되어 있고 변경되지 않는 파일 업스트림
후자의 플래그 와 git update-index
문서의 차이점에 대한 자세한 내용 은 추가 옵션을 참조하십시오.
무시 된 파일 정리
git clean -X
를 사용하여 무시 된 파일을 정리할 수 있습니다.
git clean -Xn #display a list of ignored files
git clean -Xf #remove the previously displayed files
참고 : -X
(대문자)는 무시 된 파일 만 정리합니다. untracked 파일도 제거하려면 -x
(대문자)를 사용하십시오.
자세한 내용 은 git clean
설명서 를 참조하십시오.
자세한 내용 은 Git 매뉴얼 을 참조하십시오.
.gitignore 파일의 예외
패턴을 사용하여 파일을 무시하지만 예외가 있으면 예외에 느낌표 (!)를 접두사로 붙입니다. 예 :
*.txt
!important.txt
위 예제는 Git에게 important.txt
라는 파일을 제외하고 확장자가 .txt
모든 파일을 무시하도록 지시 important.txt
.
파일이 무시 된 폴더에 있으면 다시 포함 할 수 없습니다 .
folder/
!folder/*.txt
이 예에서 폴더의 모든 .txt 파일은 무시 된 채로 남아 있습니다.
올바른 방법은 폴더 자체를 별도의 줄에 다시 넣은 다음 *
로 folder
모든 파일을 무시하고 마지막으로 *.txt
를 다음과 같이 folder
다시 포함시킵니다.
!folder/
folder/*
!folder/*.txt
주 : 느낌표로 시작하는 파일 이름의 경우 두 개의 느낌표를 추가하거나 \
문자로 이스케이프하십시오.
!!includethis
\!excludethis
전역 .gitignore 파일
Git이 모든 저장소에서 특정 파일을 무시하도록하려면 터미널이나 명령 프롬프트에서 다음 명령을 사용하여 전역 .gitignore 를 만들 수 있습니다 .
$ git config --global core.excludesfile <Path_To_Global_gitignore_file>
자식은 각 저장소의 자신의 .gitignore 파일에 추가로 이것을 사용할 것이다. 이 규칙은 다음과 같습니다.
- 전역
.gitignore
가 파일을 명시 적으로 포함하는 경우 로컬.gitignore
파일.gitignore
파일이 포함되어있는 경우 로컬.gitignore
가 우선 적용됩니다 (파일이 포함됩니다) - 저장소가 여러 컴퓨터에 복제 된 경우, 글로벌
.gigignore
모든 시스템에로드해야하거나 글로벌로 PC 동안 무시 파일이 REPO까지 추진 될 것이다 적어도, 그것은을 포함.gitignore
그것을 업데이트 할 것 . 프로젝트가 팀에 의해 진행되는 경우 Repo 관련.gitignore
가 글로벌 개념보다 나은 아이디어입니다
이 파일은 OSX .DS_Store
, Windows Thumbs.db
또는 Vim *.ext~
및 *.ext.swp
와 같이 플랫폼, 컴퓨터 또는 사용자별로 무시하는 것이 좋습니다. 저장소에 저장하지 않으려는 경우이 *.ext.swp
무시하십시오. . 따라서 OS X에서 일하는 한 팀원은 .DS_STORE
와 _MACOSX
(실제로 쓸모없는)를 모두 추가 할 수 있습니다. 반면 Windows의 다른 팀원은 모든 thumbs.bd
무시할 수 있습니다
이미 Git 저장소에 커밋 된 파일 무시
이미 Git 저장소에 파일을 추가 한 후 추적 을 중지 하려는 경우 (이후에 커밋되지 않도록) 색인에서 제거 할 수 있습니다.
git rm --cached <file>
이렇게하면 파일을 저장소에서 제거하고 Git에서 추후 변경 사항을 추적 할 수 없게됩니다. --cached
옵션은 파일이 물리적으로 삭제되지 않도록합니다.
이전에 추가 된 파일 내용은 Git 히스토리를 통해 계속 볼 수 있습니다.
색인에서 파일을 제거한 후 다른 사람이 저장소에서 가져 오면 사본이 실제로 삭제 된다는 점에 유의하십시오.
Git이 파일의 작업 디렉토리 버전이 최신 버전 인 것처럼 보이게하고 대신 " worktree 건너 뛰기 "비트를 사용하여 색인 버전을 읽을 수 있습니다 (따라서 변경 사항을 무시함).
git update-index --skip-worktree <file>
쓰기는이 비트의 영향을받지 않으므로 내용의 안전이 최우선 순위입니다. 소중한 무시 된 변화를 결코 잃지 않을 것입니다. 반면에이 비트는 stashing과 충돌합니다.이 비트를 제거하려면 다음을 사용하십시오.
git update-index --no-skip-worktree <file>
때때로 Git에게 거짓말을하고 파일을 조사하지 않고 파일이 변경되지 않았다고 가정하는 것이 잘못 권고됩니다. 파일에서 인덱스를 제거하지 않고 파일에 대한 추가 변경 사항을 무시한 것으로 보입니다.
git update-index --assume-unchanged <file>
git이 파일에서 변경된 내용을 무시하도록 강제합니다 (이 파일에 대한 변경 사항을 가져 오거나 숨긴 경우 무시 된 변경 사항은 손실됩니다 )
git에서이 파일을 다시 "관리"하려면 다음 명령을 실행하십시오.
git update-index --no-assume-unchanged <file>
파일이 무시되는지 확인하기
git check-ignore
명령은 Git이 무시한 파일에 대해보고합니다.
명령 줄에서 파일 이름을 전달할 수 있으며 git check-ignore
는 git check-ignore
되는 파일 이름을 나열합니다. 예 :
$ cat .gitignore
*.o
$ git check-ignore example.o Readme.md
example.o
여기서 * .o 파일 만 .gitignore에 정의되어 있으므로 Readme.md는 git check-ignore
의 출력에 나열되지 않습니다.
.gitignore가 파일을 무시할 책임이있는 행을 보려면 git check-ignore 명령에 -v를 추가하십시오.
$ git check-ignore -v example.o Readme.md
.gitignore:1:*.o example.o
Git 1.7.6부터 git status --ignored
를 사용하여 무시 된 파일을 볼 수도 있습니다. 공식 문서 나 .gitignore가 무시한 파일 찾기 에서 더 많은 정보를 찾을 수 있습니다.
하위 폴더의 파일 무시 (여러 gitignore 파일)
다음과 같은 저장소 구조가 있다고 가정 해보십시오.
examples/
output.log
src/
<files not shown>
output.log
README.md
examples 디렉토리의 output.log
는 유효하며 프로젝트가 이해를 수집하는 데 필요하지만 src/
아래에있는 src/
은 디버깅 중 작성되며 기록이나 저장소의 일부에 있으면 안됩니다.
이 파일을 무시하는 두 가지 방법이 있습니다. .gitignore
파일에 작업 디렉토리의 루트에 절대 경로를 지정할 수 있습니다.
# /.gitignore
src/output.log
또는, 당신은 만들 수 있습니다 .gitignore
에서 파일 src/
디렉토리를이을 기준으로 파일 무시 .gitignore
:
# /src/.gitignore
output.log
임의의 디렉토리에서 파일 무시하기
어느 디렉토리 에서나 foo.txt
파일을 무시하려면 이름을 써야합니다 :
foo.txt # matches all files 'foo.txt' in any directory
트리의 일부에서만 파일을 무시하려면 **
pattern을 사용하여 특정 디렉토리의 하위 디렉토리를 지정할 수 있습니다.
bar/**/foo.txt # matches all files 'foo.txt' in 'bar' and all subdirectories
또는 bar/
디렉토리에 .gitignore
파일을 만들 수 있습니다. 이전 예제와 동일하게 파일 bar/.gitignore
를 다음 내용으로 작성합니다.
foo.txt # matches all files 'foo.txt' in any directory under bar/
무시 규칙을 커밋하지 않고 로컬에서 파일 무시
.gitignore
는 파일을 로컬에서 무시하지만 저장소에 커밋되고 다른 제공자 및 사용자와 공유되도록하기위한 것입니다. 전역 .gitignore
설정할 수 있지만 모든 저장소가 해당 설정을 공유합니다.
저장소의 특정 파일을 로컬에서 무시하고 파일을 저장소의 일부로 만들지 않으려면 저장소에서 .git/info/exclude
편집하십시오.
예 :
# these files are only ignored on this repo
# these rules are not shared with anyone
# as they are personal
gtk_tests.py
gui/gtk/tests/*
localhost
pushReports.py
server/
미리 채워진 .gitignore 템플릿
.gitignore
파일에 나열 할 규칙이 확실하지 않거나 일반적으로 허용되는 예외를 프로젝트에 추가하려는 경우 .gitignore
파일을 선택하거나 생성 할 수 있습니다.
GitHub 및 BitBucket과 같은 많은 호스팅 서비스는 다음과 같은 프로그래밍 언어 및 IDE를 기반으로 .gitignore
파일을 생성 할 수있는 기능을 제공합니다.
파일에 대한 후속 변경 사항을 무시하지 않고 (무시하지 않음)
때로는 Git에 파일을 저장하고 후속 변경 사항은 무시하고 싶을 때가 있습니다.
Git에게 update-index
사용하여 파일이나 디렉토리의 변경 사항을 무시하도록 알려주세요 :
git update-index --assume-unchanged my-file.txt
위의 명령은 Git이 my-file.txt
가 변경되지 않았다고 가정 my-file.txt
변경 사항을 확인하거나보고하지 않도록 지시합니다. 파일은 여전히 저장소에 있습니다.
이는 기본값을 제공하고 로컬 환경 재정의를 허용하는 데 유용 할 수 있습니다. 예 :
# create a file with some values in cat <<EOF MYSQL_USER=app MYSQL_PASSWORD=FIXME_SECRET_PASSWORD EOF > .env # commit to Git git add .env git commit -m "Adding .env template" # ignore future changes to .env git update-index --assume-unchanged .env # update your password vi .env # no changes! git status
파일의 일부만 무시 [스텁]
때로는 커밋하거나 게시하고 싶지 않은 파일에 로컬 변경 사항을 적용하고자 할 수 있습니다. 이상적으로 로컬 설정은 .gitignore
배치 할 수있는 별도의 파일에 집중해야하지만 때로는 단기 솔루션으로 체크인 된 파일에 로컬 파일을 만드는 것이 도움이 될 수 있습니다.
Git이 깨끗한 필터를 사용하여 해당 줄을 "알 수"있도록 할 수 있습니다. 그들은 심지어 diffs에 나타나지 않을 것입니다.
여기에 file1.c
파일의 스 니펫이 있다고 가정합니다.
struct settings s;
s.host = "localhost";
s.port = 5653;
s.auth = 1;
s.port = 15653; // NOCOMMIT
s.debug = 1; // NOCOMMIT
s.auth = 0; // NOCOMMIT
아무 곳에 나 NOCOMMIT
행을 게시하고 싶지는 않습니다.
.git/config
와 같은 자식 설정 파일에 이것을 추가하여 "nocommit"필터를 만듭니다.
[filter "nocommit"]
clean=grep -v NOCOMMIT
이것을 .git/info/attributes
나 .gitmodules
추가 (또는 생성)하십시오 :
file1.c filter=nocommit
그리고 NOCOMMIT 라인은 Git에 숨겨져 있습니다.
주의 사항 :
- 깨끗한 필터를 사용하면 특히 Windows에서 파일 처리 속도가 느려집니다.
- 무시한 줄은 Git이 파일을 업데이트 할 때 파일에서 사라질 수 있습니다. 그것은 얼룩 필터로 중화 될 수 있지만 더 까다 롭습니다.
- Windows에서 테스트되지 않음
추적 된 파일의 변경 사항을 무시합니다. [그루터기]
.gitignore 및 .git/info/exclude
는 추적되지 않은 파일에 대해서만 작동합니다.
추적 된 파일에서 무시 플래그를 설정하려면 update-index 명령을 사용하십시오.
git update-index --skip-worktree myfile.c
이를 되돌리려면 다음을 사용하십시오.
git update-index --no-skip-worktree myfile.c
이 스 니펫을 글로벌 git 설정 에 추가하면보다 편리한 git hide
, git unhide
및 git hidden
명령을 사용할 수 있습니다.
[alias]
hide = update-index --skip-worktree
unhide = update-index --no-skip-worktree
hidden = "!git ls-files -v | grep ^[hsS] | cut -c 3-"
update-index 함수에 --assume-unchanged 옵션을 사용할 수도 있습니다
git update-index --assume-unchanged <file>
변경 사항에 대해이 파일을 다시보고 싶다면 다음을 사용하십시오.
git update-index --no-assume-unchanged <file>
--assume-unchanged 플래그가 지정되면, 사용자는 파일을 변경하지 않을 것을 약속하고 작업 트리 파일이 인덱스에 기록 된 것과 일치한다고 가정합니다. 인덱스에서이 파일을 수정해야 할 경우 실패합니다 예를 들면 커밋에서 병합 할 때; 따라서 추측 된 untracked 파일이 업스트림으로 변경되는 경우 수동으로 상황을 처리해야합니다.이 경우 성능에 초점을 둡니다.
--skip-worktree 플래그는 파일이 로컬에서 변경되고 실수로 변경 사항을 커밋하지 않기 때문에 특정 파일을 건드리지 않도록 지시 할 때 유용합니다 (예 : 특정 파일에 대해 구성된 구성 / 속성 파일). 환경). Skip-worktree가 assum보다 우선 적용됩니다 (둘 다 설정되면 변경되지 않음).
이미 커밋 된 파일을 지우지 만 .gitignore에 포함됩니다.
때로는 파일이 git에 의해 추적되고 있지만 추후에 .gitignore에 추적을 중지하기 위해 파일이 추가되는 경우가 있습니다. 이러한 파일을 .gitignore에 추가하기 전에 정리하는 것을 잊는 것은 매우 일반적인 시나리오입니다. 이 경우 이전 파일은 여전히 저장소에 있습니다.
이 문제를 해결하기 위해 저장소에서 모든 항목을 "실행 중지"한 다음 모든 파일을 다시 추가 할 수 있습니다. 보류중인 변경 사항이없고 --cached
매개 변수가 전달되는 한이 명령은 실행하는 것이 안전합니다.
# Remove everything from the index (the files will stay in the file system)
$ git rm -r --cached .
# Re-add everything (they'll be added in the current state, changes included)
$ git add .
# Commit, if anything changed. You should see only deletions
$ git commit -m 'Remove all files that are in the .gitignore'
# Update the remote
$ git push origin master
빈 폴더 만들기
Git은 빈 폴더를 추가하고 커밋 할 수 없습니다. Git이 파일을 관리하고 디렉토리를 첨부하기 때문에 커밋을 줄이고 속도를 향상시킵니다. 이 문제를 해결하려면 두 가지 방법이 있습니다.
방법 1 : .gitkeep
이 문제를 해결하기위한 한 가지 방법은 .gitkeep
파일을 사용하여 Git 폴더를 등록하는 것입니다. 이렇게하려면 필요한 디렉터리를 만들고 .gitkeep
파일을 폴더에 추가하기 .gitkeep
됩니다. 이 파일은 비어 있으며 단순히 폴더를 등록하는 것 이외의 용도로는 사용되지 않습니다. Windows에서 (파일 명명 규칙이 어색함) 디렉토리에서 git bash를 열고 다음 명령을 실행하십시오.
$ touch .gitkeep
이 명령은 현재 디렉토리에서 빈 .gitkeep
파일을 만듭니다.
방법 2 : dummy.txt
이 또 다른 해킹은 상기와 같은 단계가 올 수 있습니다 매우 유사하지만, 대신의 .gitkeep
, 단지 사용 dummy.txt
대신. 상황에 맞는 메뉴를 사용하여 Windows에서 쉽게 만들 수 있다는 보너스가 추가되었습니다. 그리고 재미있는 메시지를 남길 수 있습니다. 또한 .gitkeep
파일을 사용하여 빈 디렉토리를 추적 할 수 있습니다. .gitkeep
일반적으로 빈 directoy를 추적하기 위해 추가되는 빈 파일입니다.
.gitignore가 무시한 파일 찾기
명령을 사용하여 git에서 현재 디렉토리에 무시 된 모든 파일을 나열 할 수 있습니다.
git status --ignored
그래서 우리가 다음과 같은 저장소 구조를 가지고 있다면 :
.git
.gitignore
./example_1
./dir/example_2
./example_2
... 및 .gitignore 파일 포함 :
example_2
... 명령의 결과보다 :
$ git status --ignored
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
.example_1
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
dir/
example_2
재귀 적으로 무시 된 파일을 디렉토리에 나열하려면 추가 매개 변수 - --untracked-files=all
을 사용해야 --untracked-files=all
결과는 다음과 같습니다.
$ git status --ignored --untracked-files=all
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
example_1
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
dir/example_2
example_2