programing

특정 파일을 무시하는 대신 특정 파일만 포함하도록 git에게 말하는 방법이 있습니까?

muds 2023. 7. 10. 22:58
반응형

특정 파일을 무시하는 대신 특정 파일만 포함하도록 git에게 말하는 방법이 있습니까?

내 프로그램은 일반적으로 git 저장소에 백업하고 싶지 않은 큰 출력 파일(~1GB)을 생성합니다.그래서 할 수 있는 대신에

git add .

저는 다음과 같은 것을 해야 합니다.

git add *.c *.cc *.f *.F *.C *.h *.cu

좀 번거롭긴 한데...

빠른 펄 스크립트를 .gitignore로 작성한 다음 .gitinclude(또는 유사한 이름) 파일을 기반으로 파일을 제거할 수 있다고 확신하지만, 그것은 너무 해킹된 것 같습니다.더 좋은 방법이 있습니까?

나는 이것을 직접 시도할 필요가 없었지만, 내가 TFM을 읽은 것으로 보아 부정적인 패턴이 당신이 원하는 것을 할 것처럼 보입니다..gitignore의 항목을 나중에 부정된 항목으로 재정의할 수 있습니다.따라서 다음과 같은 작업을 수행할 수 있습니다.

*.c
!frob_*.c
!custom.c

custom.c를 제외한 모든 .c 파일과 "frob_"로 시작하는 모든 .c 파일을 무시하려면

저장소에 .gitignore 파일을 만들고 c 파일만 추적하고 다른 모든 파일은 무시한 후 다음 행을 추가합니다.

*
!*.c

모든 파일을 무시합니다.

그리고! 파일을 무시할 것입니다. 그래서 여기서 우리는 git에게 c 파일을 무시하지 말라고 요청하고 있습니다.

이를 위한 최고의 솔루션

저장소에 파일을 만들고, 파일만 포함하려면 파일에 아래 행을 추가해야 합니다.

*.*
!*.c

여기에는 디렉터리 및 하위 디렉터리의 모든 파일이 재귀적으로 포함됩니다.

사용.

*
!*.c

Git의 모든 버전에서 작동하지 않습니다.

테스트 대상

git 버전 2.12.2.windows.2

디렉토리 내의 특정 파일이 아닌 파일을 무시해야 하는 경우 다음과 같이 처리합니다.

# Ignore everything under "directory"
directory/*
# But don't ignore "another_directory"
!directory/another_directory
# But ignore everything under "another_directory"
directory/another_directory/*
# But don't ignore "file_to_be_staged.txt"
!directory/another_directory/file_to_be_staged.txt

여기 SO와 다른 사이트 모두에서 초기 "모든 것을 무시" 규칙에 대한 여러 가지 제안을 보았으나, 대부분의 제안은 성가신 사용 문제를 가지고 있다는 것을 알게 되었습니다.이로 인해 배포 가능한 GH 페이지호스팅된 GH 페이지와 같은 프로젝트가 발생했으며, 각 프로젝트는 단순히 이를 유지 관리하는 데 덜 지루하게 만듭니다.

이들 각각(및 다른 많은 블로그 게시물)은 간단한 것으로 시작할 것을 권장합니다.*말 그대로 현재 루트의 모든 파일 및 폴더를 무시합니다.

그 후, 파일을 포함하는 것은 경로 앞에 접두사를 붙이는 것만큼 간단합니다.!,예를 들어!.gitignore우리 레포가 자신의 레포를 무시하지 않도록 하기 위해..gitignore규칙 파일.

이것의 단점은 Git가 성능상의 이유로 무시된 폴더를 발견했을 때 Git의 내용을 확인하지 않는다는 것입니다.중첩된 경로의 파일을 무시하지 않으려는 것은 매우 번거롭습니다.

# ...when ignoring all files and folders in the current root
*

!custom_path                       # allow Git to look inside this folder
custom_path/*                      # but ignore everything it contains
!custom_path/extras                # allow Git to look inside this folder
custom_path/extras/*               # but ignore everything it contains
!custom_path/extras/path_to_keep   # allow Git to see the file or folder you want to commit

그래서 다른 아이디어를 제공하기 위해, 저는 방금 구성했습니다..gitignore내 Windows 사용자 프로필 폴더의 루트에 있는 파일, 시작**/*흔히 볼 수 있는 것 대신에*또는*.*.

따라서 명시적으로 포함하려는 각 경로는 트리 수준당 하나의 항목만 필요로 합니다. 이전 예제를 다음과 같이 약간 단순화합니다.

# ...when ignoring all files recursively from the current root
**/*

!custom_path                       # allow Git to look inside this folder
!custom_path/extras                # allow Git to look inside this folder
!custom_path/extras/path_to_keep   # allow Git to see the file or folder you want to commit

이것은 정확히 차이는 아니지만 파일을 훨씬 쉽게 읽고 유지 관리할 수 있는 충분한 차이입니다. 특히 깊이가 약 5단계인 파일을 "제거"하려고 할 때...

파티에 늦었지만, 제 해결책은 소스 파일을 위한 디렉토리와 실행 파일 및 프로그램 출력을 위한 다른 디렉토리를 갖는 것입니다.

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

그런 다음에 재료만 추가합니다.src/나의 저장소로 그리고 무시.bin/전적으로.

도트 파일만 넣으려는 거라면 저한테는 효과가 있었어요

!.*

언급URL : https://stackoverflow.com/questions/1279533/is-there-a-way-to-tell-git-to-only-include-certain-files-instead-of-ignoring-cer

반응형