문제

Git 리포지토리에 빈 디렉터리(파일이 포함되지 않음)를 어떻게 추가할 수 있나요?

도움이 되었습니까?

해결책

(저장소에서) 디렉토리를 (거의) 비워 두는 또 다른 방법은 .gitignore 다음 네 줄이 포함된 해당 디렉터리 내의 파일:

# Ignore everything in this directory
*
# Except this file
!.gitignore

그러면 m104에서 해야하는 방식으로 명령을 올바르게 내릴 필요가 없습니다. 해결책.

이는 또한 git 상태를 수행할 때 해당 디렉토리의 파일이 "추적되지 않음"으로 표시되지 않는다는 이점을 제공합니다.

만들기 @GreenAsJade님의 댓글이 지속됩니다.

이 솔루션은 질문에서 요구한 내용을 정확하게 수행하지만 아마도 이 질문을 보는 많은 사람들이 찾고 있던 솔루션은 아닐 수도 있다는 점은 주목할 가치가 있다고 생각합니다.이 솔루션은 디렉터리가 비어 있는 상태로 유지되도록 보장합니다."여기서 파일을 체크인하는 것을 절대 원하지 않습니다."라는 메시지가 표시됩니다."아직 여기에 체크인할 파일이 없지만 여기에 디렉터리가 필요합니다. 파일은 나중에 제공될 수 있습니다."와는 대조적입니다.

다른 팁

당신은 할 수 없습니다.참조 힘내 FAQ.

현재 GIT 지수 (스테이징 영역)의 설계는 파일을 나열 할 수있게되며, 빈 디렉토리 가이 상황에 대해 충분히 신경을 쓸 수 있도록 변경할만큼 충분히 유능하지 않은 사람은 아무도 없습니다.

내부에 파일을 추가 할 때 디렉토리가 자동으로 추가됩니다.즉, 디렉토리는 저장소에 추가 될 필요가 없으며 스스로 추적되지 않습니다.

"라고 말할 수 있습니다.git add <dir>"그리고 거기에 파일이 추가됩니다.

체크 아웃에 디렉토리가 실제로 필요하면 파일을 만들어야합니다..gitignore는이 목적을 위해 잘 작동합니다.비워 두거나 디렉토리에 표시 할 파일 이름을 채울 수 있습니다.

라는 빈 파일을 만듭니다. .gitkeep 디렉토리에 추가하세요.

저장소에 이 디렉토리(그렇지 않으면 비어 있음)를 원하는 이유에 대한 설명과 함께 언제든지 README 파일을 디렉토리에 넣을 수 있습니다.

touch .keep

Linux에서는 다음과 같은 빈 파일이 생성됩니다. .keep.이 이름이 더 선호됩니다. .gitkeep 전자는 Git에 불가지론적인 반면 후자는 Git에만 적용됩니다.둘째, 다른 사용자가 지적했듯이 .git 접두사 규칙은 Git 자체에서 사용하는 파일 및 디렉터리에 대해 예약되어야 합니다.

또는 다른 항목에 언급된 대로 답변, 디렉토리에는 설명이 포함될 수 있습니다 README 또는 README.md 파일 대신에.

물론 이렇게 하려면 파일이 있어도 애플리케이션이 중단되지 않아야 합니다.

버전이 지정된 빈 폴더가 필요한 이유는 무엇입니까?

먼저 첫 번째 것들:

빈 디렉토리 Git 버전 관리 시스템에서는 트리의 일부가 될 수 없습니다..

단순히 추적되지 않습니다.그러나 빈 디렉터리의 "버전 관리"가 의미 있는 시나리오도 있습니다. 예를 들면 다음과 같습니다.

  • 비계 사전 정의된 폴더 구조, 저장소의 모든 사용자/기여자가 사용할 수 있도록 합니다.또는 위의 특별한 경우로 임시 파일, 과 같은 cache/ 또는 logs/ 폴더를 제공하고 싶지만 .gitignore 그 내용
  • 위와 관련된 일부 프로젝트 일부 폴더가 없으면 작동하지 않습니다 (이는 프로젝트가 제대로 설계되지 않았음을 암시하는 경우가 많지만 실제 시나리오에서는 자주 발생하며 해결해야 할 권한 문제가 있을 수 있습니다.)

몇 가지 제안된 해결 방법

많은 사용자가 다음을 제안합니다.

  1. 배치 README 디렉토리를 비우지 않게 만들기 위해 파일이나 일부 내용이 포함된 다른 파일, 또는
  2. 만들기 .gitignore 일종의 "역논리"(예:모든 파일을 포함하도록) 결국 접근 방법 #1과 동일한 목적을 수행합니다.

하는 동안 두 솔루션 모두 확실히 작동합니다 Git 버전 관리에 대한 의미 있는 접근 방식과 일치하지 않는 것으로 나타났습니다.

  • 프로젝트에 별로 원하지 않는 가짜 파일이나 README를 왜 넣어야 할까요?
  • 왜 사용합니까? .gitignore 어떤 일을 하다 (유지 파일)의 의미와 정반대입니다(...을 제외한 파일), 가능하더라도?

.gitkeep 접근 방식

사용 비어 있는 호출된 파일 .gitkeep 버전 관리 시스템에 폴더가 존재하도록 강제하기 위해.

그렇게 큰 차이는 아닌 것 같지만,

  • 다음이 포함된 파일을 사용합니다. 하나의 폴더를 유지하는 목적.당신이 넣고 싶지 않은 정보는 거기에 넣지 마세요.

    예를 들어, README를 유용한 정보가 포함된 README로 사용해야지 폴더를 유지하기 위한 핑계로 사용해서는 안 됩니다.

    우려 사항을 분리하는 것은 항상 좋은 일이며, 여전히 다음 사항을 추가할 수 있습니다. .gitignore 원하지 않는 파일을 무시합니다.

  • 이름 짓기 .gitkeep 파일 이름 자체에서 매우 명확하고 간단해집니다. 다른 개발자에게, 이는 공유 프로젝트에 적합하며 Git 저장소의 핵심 목적 중 하나입니다) 이 파일은

    • 코드와 관련이 없는 파일(맨 앞의 점과 이름으로 인해)
    • Git과 명확하게 관련된 파일
    • 그것의 목적 (유지하다)은 다음과 같은 의미로 명확하게 명시되어 있고 일관되며 의미적으로 반대됩니다. 무시하다

양자

나는 본 적이있다 .gitkeep 다음과 같은 매우 중요한 프레임워크에서 채택한 접근 방식입니다. 라라벨, 각도-CLI.

다른 답변에서 설명했듯이 Git은 준비 영역에서 빈 디렉터리를 나타낼 수 없습니다.(참조 힘내 FAQ.) 그러나 귀하의 목적에 따라 디렉토리가 비어 있으면 .gitignore 파일만 있으면 만들 수 있습니다. .gitignore 다음을 통해서만 빈 디렉토리에 있는 파일:

find . -type d -empty -exec touch {}/.gitignore \;

Andy Lester의 말이 옳습니다. 하지만 디렉토리가 비어 있어야 하고 그렇지 않은 경우에는 비어 있는 비어 있으면 빈 것을 넣을 수 있습니다 .gitignore 해결 방법으로 거기에 파일을 넣으세요.

여담이지만 이는 기본적인 Git 저장소 설계 문제가 아니라 구현 문제입니다.Git 메일링 리스트에서 여러 번 언급했듯이 이것이 구현되지 않은 이유는 패치를 제출할 만큼 신경을 쓰는 사람이 아무도 없기 때문이지, 제출할 수 없거나 제출해서는 안 되기 때문이 아닙니다.

그만큼 루비 온 레일즈 로그 폴더 생성 방법:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

이제 로그 디렉터리가 트리에 포함됩니다.배포 시 매우 유용하므로 로그 디렉터리를 만들기 위해 루틴을 작성할 필요가 없습니다.

로그 파일은 다음을 실행하여 보관할 수 있습니다.

echo log/dev.log >> .gitignore

하지만 당신은 아마 그것을 알고 있었을 것입니다.

Git은 빈 디렉터리를 추적하지 않습니다.참조 힘내 FAQ 더 많은 설명을 원하시면.제안된 해결 방법은 .gitignore 빈 디렉토리에 파일을 넣으세요.나는 그 해결책을 좋아하지 않습니다. 왜냐하면 .gitignore 유닉스 규칙에 따라 "숨겨져 있습니다".또한 디렉토리가 비어 있는 이유에 대한 설명도 없습니다.

디렉토리가 비어 있는 이유와 Git에서 추적해야 하는 이유를 설명하는 README 파일을 빈 디렉토리에 넣는 것이 좋습니다.README 파일이 있으면 Git에 관한 한 디렉토리는 더 이상 비어 있지 않습니다.

진짜 질문은 왜 git에 빈 디렉토리가 필요한가입니다.일반적으로 컴파일/실행하기 전에 빈 디렉터리를 생성할 수 있는 일종의 빌드 스크립트가 있습니다.그렇지 않다면 하나 만드십시오.이는 git에 빈 디렉토리를 넣는 것보다 훨씬 더 나은 솔루션입니다.

따라서 git에 빈 디렉토리가 필요한 이유가 있습니다.그 이유를 README 파일에 넣으세요.그렇게 하면 다른 개발자(그리고 미래의 여러분)가 빈 디렉터리가 왜 거기에 있어야 하는지 알 수 있습니다.또한 빈 디렉토리가 필요한 문제가 해결되면 빈 디렉토리를 제거할 수 있다는 것도 알게 될 것입니다.


모든 빈 디렉토리를 나열하려면 다음 명령을 사용하십시오.

find -name .git -prune -o -type d -empty -print

모든 빈 디렉터리에 자리 표시자 README를 만들려면 다음을 수행하세요.

find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;

README 파일을 제외한 디렉토리의 모든 내용을 무시하려면 .gitignore:

path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir

또는 제외할 수도 있습니다. 모든 README 파일이 무시되지 않습니다.

path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

이미 작성된 모든 README를 나열하려면 다음을 수행하십시오.

find -name README.emptydir

경고:이 조정은 결과적으로 실제로 작동하지 않습니다. 불편을 드려 죄송합니다.

아래 원본 게시물:

Git 내부를 가지고 놀면서 해결책을 찾았습니다!

  1. 당신이 저장소에 있다고 가정합니다.
  2. 빈 디렉터리를 만듭니다.

    $ mkdir path/to/empty-folder
    
  3. Plumbing 명령과 빈 트리를 사용하여 인덱스에 추가합니다. SHA-1:

    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    명령을 입력한 후 두 번째 줄을 입력합니다.누르다 입력하다 그런 다음 Ctrl 키 + 입력을 종료합니다.메모:형식은 방법 [공간] 유형 [스페이스] SHA-1해시 [탭] 경로(탭은 중요하며 답변 형식은 탭을 유지하지 않습니다).

  4. 그게 다야!빈 폴더가 색인에 있습니다.당신이해야 할 일은 커밋뿐입니다.

이 솔루션은 짧고 분명히 잘 작동합니다(편집을 참조하십시오!) 하지만 기억하기가 그리 쉽지는 않습니다...

빈 트리 SHA-1은 새로운 빈 Git 저장소를 생성하여 찾을 수 있습니다. cd 그것에 들어가서 발행 git write-tree, 빈 트리 SHA-1을 출력합니다.

편집하다:

나는 이 솔루션을 발견한 이후로 계속 사용해 왔습니다.어디에도 모듈이 정의되어 있지 않다는 점을 제외하면 하위 모듈을 생성하는 것과 정확히 동일한 방식으로 작동하는 것으로 보입니다.이로 인해 발급 시 오류가 발생합니다. git submodule init|update.문제는 git update-index 다시 작성 040000 tree 참여하다 160000 commit.

게다가 해당 경로 아래에 있는 파일은 다른 저장소에 속해 있다고 생각하므로 Git에서는 이를 인식하지 못합니다.쉽게 간과될 수 있기 때문에 이것은 불쾌합니다!

그러나 저장소에서 Git 하위 모듈을 아직 사용하지 않았고 사용하지 않을 경우 "빈" 폴더가 비어 있거나 Git이 그 존재를 알고 내용을 무시하도록 하려면 다음을 수행할 수 있습니다. 이 트윅.하위 모듈을 사용하여 일반적인 방식으로 진행하려면 이 조정보다 더 많은 단계가 필요합니다.

어쩌면 빈 디렉토리를 추가하는 것이 저항이 가장 적은 경로 해당 디렉토리가 존재할 것으로 예상하는 스크립트가 있기 때문입니다(아마도 생성된 바이너리의 대상이기 때문일 수 있음).또 다른 접근 방식은 다음과 같습니다. 필요에 따라 스크립트를 수정하여 디렉토리를 생성하십시오..

mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed

이 예에서는 ".generated" 접두사 없이 액세스할 수 있도록 디렉터리에 대한 (깨진) 기호 링크를 체크인할 수 있습니다(그러나 이는 선택 사항임).

ln -sf .generated/bin bin
git add bin

소스 트리를 정리하려면 다음을 수행하면 됩니다.

rm -rf .generated ## this should be in a "clean" script or in a makefile

거의 비어 있는 폴더를 체크인하는 자주 제안되는 접근 방식을 취하는 경우 ".gitignore" 파일도 삭제하지 않고 내용을 삭제하는 약간의 복잡성이 있습니다.

루트 .gitignore에 다음을 추가하여 생성된 모든 파일을 무시할 수 있습니다.

.generated

다음과 같은 빈 디렉토리가 필요하다고 가정해 보겠습니다. tmp :

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

즉, Git에게 이 파일(및 빈 디렉터리의 다른 모든 항목)을 무시하도록 지시하기 전에 .gitignore 파일을 인덱스에 추가해야 합니다.

나는 빈 디렉토리 문제에 직면해 있습니다.자리 표시자 파일을 사용할 때의 문제점은 해당 파일을 생성하고 더 이상 필요하지 않은 경우 삭제해야 한다는 것입니다(나중에 하위 디렉터리나 파일이 추가되었기 때문입니다.큰 소스 트리를 사용하면 이러한 자리 표시자 파일을 관리하는 것이 번거롭고 오류가 발생하기 쉽습니다.

이것이 제가 자동으로 자리 표시자 파일의 생성/삭제를 관리할 수 있는 오픈 소스 도구를 작성하기로 결정한 이유입니다..NET 플랫폼용으로 작성되었으며 Mono(Linux용 .NET) 및 Windows에서 실행됩니다.

다음을 살펴보세요: http://code.google.com/p/markemptydirs

당신은 할 수 없으며 불행하게도 결코 할 수 없을 것입니다.이것은 Linus Torvald 자신이 내린 결정입니다.그분은 우리에게 무엇이 좋은지 알고 계십니다.

제가 한 번 읽은 곳에서 호언장담이 있습니다.

나는 찾았다 답장:빈 디렉토리.., 하지만 아마도 또 다른 것이 있을 수도 있습니다.

불행히도 해결 방법을 따라야합니다 ... 불행하게도.

저는 @Artur79와 @mjs의 답변이 마음에 들어서 두 가지를 조합하여 사용해왔고 이를 우리 프로젝트의 표준으로 삼았습니다.

find . -type d -empty -exec touch {}/.gitkeep \;

그러나 소수의 개발자만이 Mac이나 Linux에서 작업합니다.Windows에서는 많은 작업이 수행되었으며 동일한 작업을 수행할 수 있는 간단한 단일 라이너를 찾을 수 없었습니다.일부는 운이 좋게도 시그윈 다른 이유로 설치되었지만 단지 이것만을 위해 Cygwin을 처방하는 것은 지나친 것처럼 보였습니다.

더 나은 솔루션을 위해 편집

대부분의 개발자는 이미 개미 설치 후, 내가 가장 먼저 생각한 것은 플랫폼과 독립적으로 이를 수행하기 위해 Ant 빌드 파일을 모으는 것이었습니다.이건 아직도 ​​찾을 수 있어 여기

하지만, 나중에 이것을 작은 유틸리티 명령으로 만드는 것이 더 낫다고 생각하여 Python을 사용하여 다시 만들고 PyPI에 게시했습니다. 여기.간단히 다음을 실행하여 설치할 수 있습니다.

pip3 install gitkeep2

이를 통해 생성 및 제거가 가능해집니다. .gitkeep 파일을 재귀적으로 저장하고 동료가 해당 디렉토리가 왜 중요한지 이해할 수 있도록 파일에 메시지를 추가할 수도 있습니다.이 마지막 비트는 보너스입니다.그렇다면 좋을 것 같다고 생각했는데 .gitkeep 파일은 자체적으로 문서화될 수 있습니다.

$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH

  Add a .gitkeep file to a directory in order to push them into a Git repo
  even if they're empty.

  Read more about why this is necessary at: https://git.wiki.kernel.org/inde
  x.php/Git_FAQ#Can_I_add_empty_directories.3F

Options:
  -r, --recursive     Add or remove the .gitkeep files recursively for all
                      sub-directories in the specified path.
  -l, --let-go        Remove the .gitkeep files from the specified path.
  -e, --empty         Create empty .gitkeep files. This will ignore any
                      message provided
  -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                      used to explain why it's important to push the specified
                      directory to source control even if it's empty.
  -v, --verbose       Print out everything.
  --help              Show this message and exit.

도움이 되셨기를 바랍니다.

당신이 .gitignore 파일에 (Git이 무시하길 원하는) 내용을 얼마든지 넣으려면 별표만 포함된 한 줄을 추가하는 것이 좋습니다. * 실수로 무시된 콘텐츠를 추가하지 않도록 하세요.

언급한 대로 빈 디렉터리를 추가하는 것은 불가능하지만 여기에는 모든 디렉터리에 빈 .gitignore 파일을 추가하는 하나의 라이너가 있습니다.

ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

쉽게 접근할 수 있도록 이것을 Rakefile에 넣어 두었습니다.

Jamie Flournoy의 솔루션 훌륭하게 작동합니다.다음은 .htaccess :

# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess

이 솔루션을 사용하면 빈 폴더를 커밋할 수 있습니다. 예를 들어 /log, /tmp 또는 /cache 폴더는 비어 있게 됩니다.

나는 항상 내가 원하는 폴더 구조를 확인하고 프로젝트 내에서 나를 위해 빌드하는 기능을 만듭니다.빈 폴더가 프록시에 의해 Git에 보관되므로 이 문제를 해결합니다.

function check_page_custom_folder_structure () {
    if (!is_dir(TEMPLATEPATH."/page-customs"))
        mkdir(TEMPLATEPATH."/page-customs");    
    if (!is_dir(TEMPLATEPATH."/page-customs/css"))
        mkdir(TEMPLATEPATH."/page-customs/css");
    if (!is_dir(TEMPLATEPATH."/page-customs/js"))
        mkdir(TEMPLATEPATH."/page-customs/js");
}

이것은 PHP에 있지만 대부분의 언어가 동일한 기능을 지원한다고 확신하며 폴더 생성은 응용 프로그램에서 처리되므로 폴더는 항상 거기에 있습니다.

여기에 해킹이 있지만 그것이 작동한다는 것은 재밌습니다 (Git 2.2.1).@Teka가 제안한 것과 유사하지만 기억하기 더 쉽습니다.

  • 저장소에 하위 모듈을 추가합니다(git submodule add path_to_repo)
  • 그러면 폴더와 파일이 추가됩니다. .submodules.변경 사항을 커밋합니다.
  • 삭제 .submodules 파일을 작성하고 변경 사항을 커밋합니다.

이제 커밋이 체크아웃될 때 생성되는 디렉터리가 있습니다.하지만 흥미로운 점은 이 파일의 트리 개체 내용을 보면 다음과 같은 결과를 얻을 수 있다는 것입니다.

치명적인:유효한 개체 이름 B64338B90B4209263B50244D18278C0999867193

그러나 Git의 향후 버전에서는 작동이 중단될 수 있으므로 사용하지 않는 것이 좋습니다.저장소가 손상될 수 있습니다.

Git이 디렉터리를 추적하도록 하는 방법은 없으므로 Git이 추적할 디렉터리 내에 자리 표시자 파일을 추가하는 것이 유일한 해결책입니다.

파일 이름을 지정하고 원하는 내용을 포함할 수 있지만 대부분의 사람들은 이름이 지정된 빈 파일을 사용합니다. .gitkeep (어떤 사람들은 VCS에 구애받지 않는 것을 선호하지만 .keep).

접두사가 붙은 . 숨겨진 파일로 표시합니다.

또 다른 아이디어는 README 디렉토리의 용도를 설명하는 파일입니다.

당신은 할 수 없습니다.이는 Git 관리자의 의도적인 설계 결정입니다.기본적으로 Git과 같은 소스 코드 관리 시스템의 목적은 소스 코드를 관리하는 것이며 빈 디렉토리는 소스 코드가 아닙니다.Git은 종종 콘텐츠 추적기로 설명되기도 하며, 빈 디렉터리는 콘텐츠가 아니므로(실제로는 정반대) 추적되지 않습니다.

여러 의미론적 디렉터리에 많은 임시 데이터를 보관할 폴더를 추가하려는 경우 한 가지 접근 방식은 루트 .gitignore에 이와 같은 항목을 추가하는 것입니다.

/app/data/**/*.* !/app/data/**/*.md

그런 다음 설명이 포함된 README.md 파일(또는 빈 파일은 중요하지 않음)을 커밋할 수 있습니다. *.md 이 경우) 각 디렉터리에서 디렉터리가 모두 저장소의 일부로 유지되지만 파일(확장명 포함)은 무시되도록 합니다.한정: .'는 디렉토리 이름에 허용되지 않습니다!

이 모든 디렉토리를 xml/images 파일 등으로 채우고 아래에 더 많은 디렉토리를 추가할 수 있습니다. /app/data/ 시간이 지남에 따라 앱에 대한 저장소 요구 사항이 증가함에 따라 (각 저장소 디렉토리의 정확한 용도에 대한 설명을 굽는 데 사용되는 README.md 파일 포함)

더 이상 변경할 필요가 없습니다. .gitignore 또는 새로운 것을 만들어 분산화하세요. .gitignore 각각의 새 디렉토리에 대해.아마도 가장 똑똑한 솔루션은 아니지만 간결하고 gitignore 방식이며 항상 저에게 효과적입니다.좋고 간단합니다!;)

enter image description here

전투에 옵션을 하나 더 추가합니다.

디렉토리를 추가하고 싶다고 가정합니다. git 즉, 다음과 관련된 모든 목적을 위해 git, 비어 있어야 하며 내용이 추적되지 않아야 합니다. .gitignore 여기에서 여러 번 제안한 대로 트릭을 수행할 것입니다.

언급한 대로 형식은 다음과 같습니다.

*
!.gitignore

이제 명령줄에서 이 작업을 수행할 수 있는 방법을 원한다면 단숨에 내부에 추가하려는 디렉토리에 대해 다음을 실행할 수 있습니다.

$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore

나 자신도 이 작업을 수행하는 데 사용하는 쉘 스크립트를 가지고 있습니다.원하는대로 스크립트 이름을 지정하고 포함 경로에 추가하거나 직접 참조하십시오.

#!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore

이를 통해 추가하려는 디렉터리 내에서 실행하거나 디렉터리를 첫 번째이자 유일한 매개변수로 참조할 수 있습니다.

$ ignore_dir ./some/directory

다른 옵션(@GreenAsJade의 의견에 대한 응답)은 다음과 같은 빈 폴더를 추적하려는 경우입니다. 5월 나중에 추적된 파일을 포함하지만 지금은 비어 있으므로 생략할 수 있습니다. * ~로부터 .gitignore 파일을 확인하고 저것 안에.기본적으로 모든 파일은 "무시하지 마십시오"라고 말합니다. "이지만 그렇지 않으면 디렉터리가 비어 있고 추적됩니다.

당신의 .gitignore 파일은 다음과 같습니다:

!.gitignore

그게 다입니다. 체크인하면 나중에 파일을 추적할 수 있는 비어 있지만 추적된 디렉터리가 있습니다.

내가 파일에 한 줄을 유지하도록 제안하는 이유는 .gitignore 목적.그렇지 않으면 누군가가 그것을 제거하려고 생각할 수도 있습니다.해당 줄 위에 주석을 추가하면 도움이 될 수 있습니다.

때로는 "실제" 빈 기존 디렉토리가 필요한 잘못 작성된 라이브러리나 소프트웨어를 처리해야 하는 경우도 있습니다.간단하게 넣어서 .gitignore 또는 .keep 깨지거나 버그가 발생할 수 있습니다.이러한 경우 다음이 도움이 될 수 있지만 보장할 수는 없습니다...

먼저 필요한 디렉터리를 만듭니다.

mkdir empty

그런 다음 이 디렉토리에 끊어진 심볼릭 링크를 추가합니다(그러나 위에 설명된 사용 사례 이외의 경우에는 README 설명과 함께):

ln -s .this.directory empty/.keep

이 디렉터리의 파일을 무시하려면 루트에 추가하면 됩니다. .gitignore:

echo "/empty" >> .gitignore

무시된 파일을 추가하려면 매개변수를 사용하여 강제로 적용하세요.

git add -f empty/.keep

커밋 후 인덱스에 깨진 심볼릭 링크가 있고 git이 디렉토리를 만듭니다.끊어진 링크는 일반 파일이 아니고 일반 파일을 가리키지 않기 때문에 몇 가지 장점이 있습니다.따라서 의도가 아니라 의미에 따라 "(파일이 포함되어 있지 않음)"이라는 질문의 일부에도 적합합니다.

find empty -type f

이 명령은 이 디렉터리에 파일이 없기 때문에 빈 결과를 표시합니다.따라서 디렉터리의 모든 파일을 가져오는 대부분의 응용 프로그램은 적어도 "파일이 존재함" 또는 "읽기 가능"인 경우 일반적으로 이 링크를 볼 수 없습니다.일부 스크립트에서도 파일을 찾을 수 없습니다.

$ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)

하지만 나는 이 솔루션을 특별한 상황에서만 사용하는 것을 강력히 권장합니다. README 일반적으로 빈 디렉토리에 있는 것이 더 나은 솔루션입니다.(그리고 이것이 Windows 파일 시스템에서 작동하는지 모르겠습니다...)

이 코드를 create_readme.php로 저장하고 다음을 실행할 수 있습니다. PHP Git 프로젝트 루트 디렉터리의 코드입니다.

> php create_readme.php

비어 있는 모든 디렉토리에 README 파일을 추가하여 해당 디렉토리가 색인에 추가됩니다.

<?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>

그럼 해

git commit -m "message"
git push

때로는 "컨텐츠"로 간주되는 파일만 포함하는 폴더가 있는 저장소가 있습니다. 즉, 버전 관리에 관심이 있는 파일이 아니므로 절대로 커밋해서는 안 됩니다.Git의 .gitignore 파일을 사용하면 전체 디렉터리를 무시할 수 있습니다.그러나 저장소에 폴더를 두는 것이 도움이 될 때가 있습니다.이러한 요구를 충족하기 위한 훌륭한 솔루션이 있습니다.

과거에 내가 한 일은 내 저장소의 루트에 .gitignore 파일을 넣은 다음 다음과 같이 폴더를 제외하는 것입니다.

/app/some-folder-to-exclude
/another-folder-to-exclude/*

그러나 이러한 폴더는 저장소의 일부가 되지 않습니다.거기에 README 파일과 같은 것을 추가할 수 있습니다.하지만 그런 다음 README 파일 처리에 대해 걱정하지 않도록 애플리케이션에 지시해야 합니다.

앱이 폴더에 의존하는 경우(비록 비어 있음) 문제의 폴더에 .gitignore 파일을 추가하고 이를 사용하여 두 가지 목표를 달성할 수 있습니다.

Git에게 폴더에 파일이 있다고 알려주면 Git이 해당 파일을 저장소에 추가하게 됩니다.Git에게 이 파일 자체를 제외하고 이 폴더의 내용을 무시하도록 지시합니다.빈 디렉토리에 넣을 .gitignore 파일은 다음과 같습니다.

*
!.gitignore

첫 번째 줄(*)은 Git에게 이 디렉터리의 모든 내용을 무시하도록 지시합니다.두 번째 줄은 Git에게 .gitignore 파일을 무시하지 말라고 지시합니다.이 파일을 저장소에 추가하려는 모든 빈 폴더에 넣을 수 있습니다.

이를 수행하는 쉬운 방법은 .gitkeep 파일을 (현재) 비워두려는 디렉토리에 복사하세요.

이것 좀 봐 SOF 답변 추가 정보 - 일부 사람들이 .gitignore 파일을 추가하는 경쟁 규칙(여기에 많은 답변에 명시되어 있음)이 혼란스럽다고 생각하는 이유도 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top