Git 리포지토리에 파일이 포함되지 않은 빈 디렉터리를 추가하려면 어떻게 해야 합니까?
질문자 :Laurie Young
답변자 : Jamie Flournoy
디렉토리를 (거의) 비어 있게 만드는 또 다른 방법은 (리포지토리에서) 다음 네 줄을 포함 .gitignore
# Ignore everything in this directory * # Except this file !.gitignore
그러면 m104의 솔루션 에서 수행해야 하는 방식으로 주문을 바로 받을 필요가 없습니다.
이것은 또한 git 상태를 수행할 때 해당 디렉토리의 파일이 "추적되지 않음"으로 표시되지 않는다는 이점을 제공합니다.
@GreenAsJade 의 댓글을 지속적으로 만들기:
이 솔루션이 질문이 요구한 것을 정확하게 수행하지만 아마도 이 질문을 보고 있는 많은 사람들이 찾던 것이 아닐 수도 있다는 점에 주목할 가치가 있다고 생각합니다. 이 솔루션은 디렉토리가 비어 있음을 보장합니다. "나는 정말로 여기에서 파일을 체크인하는 것을 원하지 않습니다"라고 말합니다. "여기에 체크인할 파일이 없지만 여기에 디렉터리가 필요합니다. 파일이 나중에 올 수 있습니다"와 반대로.
답변자 : Andy Lester
당신은 할 수 없습니다. Git FAQ를 참조하십시오.
현재 git 인덱스(스테이징 영역)의 디자인은 파일 나열만 허용하며 빈 디렉터리를 허용하도록 변경할 만큼 유능한 사람은 아무도 이 상황을 해결하기 위해 충분히 신경 쓰지 않았습니다.
디렉토리는 내부에 파일을 추가할 때 자동으로 추가됩니다. 즉, 디렉토리는 저장소에 추가할 필요가 없으며 자체적으로 추적되지 않습니다.
git add <dir>
"이라고 말하면 거기에 파일이 추가됩니다.체크아웃에 존재하는 디렉토리가 정말로 필요한 경우 그 안에 파일을 생성해야 합니다. .gitignore는 이러한 목적에 적합합니다. 비워두거나 디렉토리에 표시할 파일 이름을 입력할 수 있습니다.
답변자 : Artur79
.gitkeep
이라는 빈 파일을 만들고 추가합니다.
답변자 : John Mee
이 디렉토리를 원하는 이유에 대한 설명과 함께 README 파일을 항상 디렉토리에 넣을 수 있습니다. 그렇지 않으면 저장소에 비어 있습니다.
답변자 : Asclepius
touch .keep
.keep
이라는 빈 파일이 생성됩니다. 가치가 있기 때문에 이 이름은 Git에 대해 불가지론적입니다. 둘째, 다른 사용자가 언급했듯이 .git
접두사 규칙은 Git 자체가 구성 목적으로 사용하는 파일 및 디렉토리에 대해 예약할 수 있습니다.
또는 다른 답변 에서 언급했듯이 디렉토리에 설명적인 README.md
파일이 포함될 수 있습니다.
어느 쪽이든 파일의 존재로 인해 애플리케이션이 중단되지 않아야 합니다.
답변자 : Cranio
빈 버전의 폴더가 필요한 이유
먼저 첫 번째 것들:
빈 디렉토리 는 Git 버전 관리 시스템에서 트리의 일부가 될 수 없습니다 .
단순히 추적되지 않습니다. 그러나 빈 디렉토리를 "버전 관리"하는 것이 의미가 있는 시나리오가 있습니다. 예를 들면 다음과 같습니다.
- 사전 정의된 폴더 구조를 스캐폴딩하여 저장소의 모든 사용자/기여자가 사용할 수 있도록 합니다. 또는 위의 특수한 경우로
cache/
또는logs/
디렉토리와 같은 임시 파일 용 폴더를 생성합니다. 여기서 폴더를 제공하고 싶지만 그 내용은.gitignore
- 위와 관련하여 일부 프로젝트 는 일부 폴더가 없으면 작동하지 않습니다 (이는 종종 제대로 설계되지 않은 프로젝트의 힌트이지만 자주 발생하는 실제 시나리오이며 예를 들어 해결해야 할 권한 문제가 있을 수 있음).
몇 가지 제안된 해결 방법
많은 사용자가 다음을 제안합니다.
-
README
파일 또는 일부 내용이 포함된 다른 파일 배치, 또는 - 일종의 "역 논리"(즉, 모든 파일을 포함하는)로
.gitignore
파일을 생성하면 결국 접근 방식 #1과 동일한 목적을 수행합니다.
두 솔루션 모두 확실히 작동 하지만 Git 버전 관리에 대한 의미 있는 접근 방식과 일치하지 않는 것으로 나타났습니다.
- 프로젝트에 실제로 원하지 않을 수도 있는 가짜 파일이나 README를 왜 넣어야 합니까?
- 가능
.gitignore
를 사용하여(파일 제외 ) 의도한 것과 정반대의 작업(파일 보관 )을 수행하는 이유는 무엇입니까?
.gitkeep 접근 방식
버전 관리 시스템에 폴더가 존재하도록 하려면 .gitkeep
이라는 빈 파일을 사용하십시오.
그렇게 큰 차이가 없어 보일 수 있지만:
폴더를 유지하는 단일 목적을 가진 파일을 사용합니다. 당신은 당신이 넣고 싶지 않은 정보를 거기에 넣지 않습니다.
예를 들어, README는 폴더를 보관하기 위한 핑계가 아니라 유용한 정보가 포함된 README로 사용해야 합니다.
우려 사항을 분리하는 것은 항상 좋은 일이며 여전히
.gitignore
를 추가하여 원치 않는 파일을 무시할 수 있습니다.이름을 .gitkeep으로 지정하면 파일 이름 자체에서(그리고 다른 개발자 에게도 이 파일이 공유 프로젝트와 Git 리포지토리의 핵심 목적 중 하나에
.gitkeep
- 코드와 관련 없는 파일(앞에 있는 점과 이름 때문에)
- Git과 분명히 관련된 파일
- 그 목적( 유지 )이 명확하게 명시되고 일관성이 있으며 무시한다는 의미에서 의미상 반대됩니다.
양자
나는 Laravel , Angular-CLI 와 같은 매우 중요한 프레임워크에서 채택한 .gitkeep
접근 방식을 보았습니다.
답변자 : mjs
다른 답변에서 설명한 것처럼 Git은 스테이징 영역에서 빈 디렉토리를 나타낼 수 없습니다. (Git FAQ를 참조하십시오.) 그러나 목적을 위해 디렉토리에 .gitignore
파일만 포함되어 있고 디렉토리가 충분히 비어 있다면 다음을 통해서만 비어 있는 디렉토리에 .gitignore
파일을 생성할 수 있습니다.
find . -type d -empty -exec touch {}/.gitignore \;
답변자 : Aristotle Pagaltzis
Andy Lester가 맞습니다. 하지만 디렉토리가 비어 있어야 하고 비어 있지 않아야 하는 경우 해결 방법으로 .gitignore
파일을 넣을 수 있습니다.
제쳐두고, 이것은 기본적인 Git 스토리지 설계 문제가 아니라 구현 문제입니다. Git 메일링 리스트에서 여러 번 언급했듯이 이것이 구현되지 않은 이유는 아무도 패치를 제출할 만큼 신경 쓰지 않았기 때문입니다.
답변자 : Thomas E
Ruby on Rails 로그 폴더 생성 방법:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
이제 로그 디렉토리가 트리에 포함됩니다. 배포할 때 매우 유용하므로 로그 디렉터리를 만드는 루틴을 작성할 필요가 없습니다.
로그 파일은 다음을 실행하여 보관할 수 있습니다.
echo log/dev.log >> .gitignore
그러나 당신은 아마 그것을 알고 있었을 것입니다.
답변자 : lesmana
Git은 빈 디렉토리를 추적하지 않습니다. 자세한 설명은 Git FAQ 를 참조하세요. 제안된 해결 방법은 .gitignore
파일을 빈 디렉터리에 넣는 것입니다. .gitignore
는 Unix 규칙에 의해 "숨겨져" 있기 때문에 저는 그 솔루션이 마음에 들지 않습니다. 또한 디렉토리가 비어 있는 이유에 대한 설명도 없습니다.
디렉터리가 비어 있는 이유와 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
답변자 : ofavre
경고: 이 조정은 실제로 작동하지 않는 것으로 밝혀졌습니다. 불편을 드려 죄송합니다.
아래 원본 게시물:
Git 내부를 가지고 놀다가 해결책을 찾았습니다!
- 당신이 당신의 저장소에 있다고 가정합니다.
빈 디렉터리를 만듭니다.
$ mkdir path/to/empty-folder
배관 명령과 빈 트리 SHA-1을 사용하여 인덱스에 추가합니다.
$ git update-index --index-info 040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 path/to/empty-folder
명령을 입력한 다음 두 번째 줄을 입력합니다. Enter 키 를 누른 다음 Ctrl + D 를 눌러 입력을 종료합니다. 참고: 형식은 모드 [SPACE] 유형 [SPACE] SHA-1hash [TAB] 경로입니다(탭은 중요하며 답변 형식은 유지하지 않습니다).
그게 다야! 빈 폴더가 색인에 있습니다. 커밋만 하면 됩니다.
이 솔루션은 짧고 분명히 잘 작동 하지만(편집 참조! ) 기억하기 쉽지 않습니다...
빈 트리 SHA-1은 빈 Git 저장소를 새로 생성하여 찾을 수 있습니다. 이 저장소로 cd
하고 빈 트리 SHA-1을 출력하는 git write-tree
편집하다:
나는이 솔루션을 찾은 이후로이 솔루션을 사용하고 있습니다. 모듈이 어디에도 정의되어 있지 않다는 점을 제외하고는 하위 모듈을 생성하는 것과 똑같은 방식으로 작동하는 것으로 보입니다. git submodule init|update
실행할 때 오류가 발생합니다. 문제는 git update-index
040000 tree
부분을 160000 commit
으로 다시 씁니다.
또한 해당 경로 아래에 있는 파일은 다른 저장소에 속해 있다고 생각하기 때문에 Git에서 알아차리지 못합니다. 이것은 쉽게 간과될 수 있으므로 불쾌합니다!
그러나 저장소에서 Git 하위 모듈을 아직 사용하지 않고 사용하지 않고 "빈" 폴더가 비어 있는 상태로 유지되거나 Git이 존재를 알고 내용을 무시하도록 하려면 다음을 수행할 수 있습니다. 이 트윅. 하위 모듈을 사용하여 일반적인 방식으로 이동하려면 이 조정보다 더 많은 단계가 필요합니다.
답변자 : m104
tmp 라는 빈 디렉토리가 필요하다고 가정해 보겠습니다.
$ mkdir tmp $ touch tmp/.gitignore $ git add tmp $ echo '*' > tmp/.gitignore $ git commit -m 'Empty directory' tmp
다시 말해서, Git에게 무시하도록 지시하기 전에 인덱스에 .gitignore 파일을 추가해야 합니다.
답변자 : Brent Bradburn
빈 디렉토리를 추가하는 것은 해당 디렉토리가 존재할 것으로 예상하는 스크립트가 있기 때문에(아마도 생성된 바이너리의 대상이기 때문에) 저항이 가장 적은 경로인 것처럼 보일 수 있습니다. 또 다른 방법은 스크립트를 수정하여 필요에 따라 디렉토리를 만드는 것 입니다.
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
답변자 : user2334883
당신은 할 수 없으며 불행히도 결코 할 수 없습니다. 이것은 Linus Torvald 자신이 내린 결정입니다. 그분은 우리에게 무엇이 좋은지 아십니다.
내가 한 번 읽은 곳에서 욕설이 있습니다.
Re: Empty directory.. 를 찾았지만 다른 디렉토리가 있을 수 있습니다.
불행히도 해결 방법으로 살아야합니다.
답변자 : Jonny Dee
빈 디렉토리 문제도 겪었습니다. 자리 표시자 파일을 사용할 때의 문제는 파일을 만들고 더 이상 필요하지 않은 경우 삭제해야 한다는 것입니다(나중에 하위 디렉터리나 파일이 추가되었기 때문입니다. 큰 소스 트리에서는 이러한 자리 표시자 파일을 관리하는 것이 번거롭고 오류가 발생할 수 있습니다. 경향이있다.
이러한 플레이스홀더 파일의 생성/삭제를 자동으로 관리할 수 있는 오픈 소스 도구를 작성하기로 결정한 이유입니다. .NET 플랫폼용으로 작성되었으며 Mono(Linux용 .NET) 및 Windows에서 실행됩니다.
답변자 : Mig82
@Artur79 및 @mjs의 답변이 마음에 들어서 둘을 조합하여 사용하고 있으며 이를 우리 프로젝트의 표준으로 만들었습니다.
find . -type d -empty -exec touch {}/.gitkeep \;
그러나 소수의 개발자만이 Mac 또는 Linux에서 작업합니다. Windows에서 많은 작업이 수행되며 동일한 작업을 수행할 수 있는 동등한 간단한 단일 라이너를 찾을 수 없습니다. 일부는 다른 이유로 Cygwin을 설치할 만큼 충분히 운이 좋았지만, 이것만을 위해 Cygwin을 처방하는 것은 과도하게 보였습니다.
더 나은 솔루션을 위해 편집
따라서 대부분의 개발자가 이미 Ant를 설치했기 때문에 플랫폼과 독립적으로 이를 수행하기 위해 Ant 빌드 파일을 구성하는 것이 가장 먼저 생각했습니다. 이것은 여전히 여기 에서 찾을 수 있습니다
그러나 나중에 이것을 작은 유틸리티 명령으로 만드는 것이 더 낫다고 생각하여 Python을 사용하여 다시 만들고 PyPI here 에 게시했습니다. 다음을 실행하기만 하면 설치할 수 있습니다.
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.
유용하게 사용하시기 바랍니다.
답변자 : Michael Johnson
.gitignore
파일을 추가할 때, (Git이 무시하도록 하려는) 내용을 얼마든지 넣을 예정이라면 별표 *
가 있는 한 줄을 추가하여 추가하지 않도록 할 수 있습니다. 실수로 콘텐츠를 무시했습니다.
답변자 : ntninja
읽기 @ofavre를 의와 @ stanislav - bashkyrtsev 힘내 디렉토리를 만들 깨진 GIT 서브 모듈 참조를 사용의 답변을, 나는 아무도 모든 일에 정신이 안전을 확인하기 위해 아이디어의 또이 간단한 수정을 제안하지 않았다 것을 놀라게하고 있습니다 :
가짜 서브 모듈 을 GIT 에 해킹 하는 대신 빈 실제 모듈 을 추가 하십시오 .
입력: https://gitlab.com/empty-repo/empty.git
정확히 하나의 커밋이 있는 GIT 저장소:
commit e84d7b81f0033399e325b8037ed2b801a5c994e0 Author: Nobody <none> Date: Thu Jan 1 00:00:00 1970 +0000
메시지가 없고 커밋된 파일이 없습니다.
용법
GIT 저장소에 빈 디렉토리를 추가하려면:
git submodule add https://gitlab.com/empty-repo/empty.git path/to/dir
기존의 모든 빈 디렉토리를 하위 모듈로 변환하려면:
find . -type d -empty -delete -exec git submodule add -f https://gitlab.com/empty-repo/empty.git \{\} \;
Git은 하위 모듈 참조를 생성할 때 최신 커밋 해시를 저장하므로 나(또는 GitLab)가 이를 사용하여 악성 파일을 주입하는 것에 대해 걱정할 필요가 없습니다. 불행히도 체크아웃 중에 어떤 커밋 ID가 사용되는지 강제하는 방법을 찾지 못했기 때문에 repo를 추가한 후 git submodule status
사용하여 e84d7b81f0033399e325b8037ed2b801a5c994e0
정말 그들의 손을 얻는 사람없이 아직 기본 솔루션,하지만 최고의 우리가 아마있을 수 있으며, GIT 코드베이스에서 정말 더러운.
부록: 이 커밋 다시 만들기
(빈 디렉토리에서) 다음을 사용하여 이 정확한 커밋을 다시 만들 수 있어야 합니다.
# Initialize new GIT repository git init # Set author data (don't set it as part of the `git commit` command or your default data will be stored as “commit author”) git config --local user.name "Nobody" git config --local user.email "none" # Set both the commit and the author date to the start of the Unix epoch (this cannot be done using `git commit` directly) export GIT_AUTHOR_DATE="Thu Jan 1 00:00:00 1970 +0000" export GIT_COMMITTER_DATE="Thu Jan 1 00:00:00 1970 +0000" # Add root commit git commit --allow-empty --allow-empty-message --no-edit
재현 가능한 GIT 커밋을 만드는 것은 놀라울 정도로 어렵습니다…
답변자 : Zaz
Git이 디렉토리를 추적하도록 할 수 있는 방법이 없으므로 유일한 해결책은 Git이 추적할 디렉토리 내에 자리 표시자 파일을 추가하는 것입니다.
파일 이름은 원하는 대로 지정할 수 있지만 대부분의 사람들은 .gitkeep
이라는 빈 파일을 사용합니다(일부 사람들은 VCS에 구애받지 않는 .keep
선호하지만).
접두사가 붙은 .
숨김 파일로 표시합니다.
또 다른 아이디어는 디렉토리의 용도를 설명 README
답변자 : Peter Hoeg
언급했듯이 빈 디렉터리를 추가하는 것은 불가능하지만 모든 디렉터리에 빈 .gitignore 파일을 추가하는 하나의 라이너가 있습니다.
ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
쉽게 액세스할 수 있도록 Rakefile에 이것을 붙였습니다.
답변자 : Hainan Zhao
많은 사람들이 이미 이 질문에 답했습니다. 여기에 PowerShell 버전을 추가하기만 하면 됩니다.
디렉토리의 모든 빈 폴더 찾기
거기에 빈 .gitkeep 파일을 추가하십시오.
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
답변자 : Roman
Jamie Flournoy의 솔루션은 훌륭하게 작동합니다. .htaccess
를 유지하기 위해 약간 향상된 버전입니다.
# Ignore everything in this directory * # Except this file !.gitignore !.htaccess
이 솔루션을 사용하면 빈 폴더(예: /log
, /tmp
또는 /cache
를 커밋할 수 있으며 폴더는 비어 있는 상태로 유지됩니다.
답변자 : Mild Fuzz
나는 항상 내가 원하는 폴더 구조를 확인하고 프로젝트 내에서 나를 위해 빌드하는 기능을 빌드합니다. 이것은 빈 폴더가 프록시에 의해 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에 있지만 대부분의 언어가 동일한 기능을 지원한다고 확신하고 폴더 생성은 응용 프로그램에서 처리하기 때문에 폴더는 항상 거기에 있을 것입니다.
답변자 : Stanislav Bashkyrtsev
여기 해킹이 있지만 작동하는 것이 재미있습니다(Git 2.2.1). @Teka가 제안한 것과 유사하지만 기억하기 쉽습니다.
- 모든 저장소에
git submodule add path_to_repo
) -
.submodules
파일이 추가됩니다. 변경을 커밋합니다. -
.submodules
파일을 삭제하고 변경 사항을 커밋합니다.
이제 커밋이 체크아웃될 때 생성되는 디렉토리가 있습니다. 하지만 흥미로운 점은 이 파일의 tree 객체 내용을 보면 다음과 같은 결과를 얻을 수 있다는 것입니다.
치명적: 유효한 개체 이름이 아닙니다. b64338b90b4209263b50244d18278c0999867193
Git의 향후 버전에서 작동이 중지될 수 있으므로 사용을 권장하지 않습니다. 저장소가 손상될 수 있습니다.
답변자 : ajmedway
여러 시맨틱 디렉토리에 많은 임시 데이터를 보관할 폴더를 추가하려는 경우 한 가지 방법은 루트 .gitignore에 이와 같은 것을 추가하는 것입니다.
/app/data/**/*.* !/app/data/**/*.md
그런 다음 각 디렉토리에서 설명이 포함된 README.md 파일(또는 빈 파일은 중요하지 않습니다 *.md
와 같이 고유하게 대상을 지정할 수 있는 한 중요하지 않음)을 사용하여 디렉토리가 모두 파일의 일부로 유지되도록 할 수 있습니다. repo이지만 파일(확장자 포함)은 무시됩니다. 제한: .
's는 디렉토리 이름에 허용되지 않습니다!
이 모든 디렉토리를 xml/images 파일 등으로 채우고 /app/data/
아래에 더 많은 디렉토리를 추가할 수 있습니다. 시간이 지남에 따라 앱 개발에 필요한 스토리지가 필요합니다(README.md 파일은 무엇에 대한 설명을 굽는 역할을 합니까? 각 저장소 디렉토리는 정확히)입니다.
.gitignore
를 추가로 변경하거나 각각의 새 디렉토리에 대해 새 .gitignore
를 만들어 분산화할 필요가 없습니다. 아마도 가장 똑똑한 솔루션은 아니지만 간결한 gitignore-wise이며 항상 저에게 효과적입니다. 멋지고 간단합니다! ;)
답변자 : DevonDahon
이 솔루션은 저에게 효과적이었습니다.
1. 빈 디렉터리에 .gitignore
파일을 추가합니다.
* */ !.gitignore
-
*
폴더의 모든 파일 무시 -
*/
하위 디렉토리 무시 -
!.gitignore
에는 .gitignore 파일이 포함됩니다.
2. 그런 다음 캐시를 제거하고, 파일을 준비하고, 커밋하고 푸시합니다.
git rm -r --cached . git add . // or git stage . git commit -m ".gitignore fix" git push
답변자 : Trendfischer
때로는 "실제" 비어 있고 기존 디렉토리가 필요한 잘못된 작성된 라이브러리 또는 소프트웨어를 처리해야 합니다. 간단한 .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 파일 시스템에서 작동하는지 모르겠습니다...)
답변자 : arcseldon
이를 수행하는 쉬운 방법은 (현재) 비워 .gitkeep
추가 정보는 이 SOF 답변 을 참조하십시오. 이는 일부 사람들이 .gitignore 파일을 추가하는 경쟁 규칙(여기에 많은 답변에 설명된 대로)을 혼동하는 이유를 설명합니다.
답변자 : Mike
싸움에 하나의 옵션을 더 추가합니다.
당신은 할 디렉토리를 추가 할 가정 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에 의해 코멘트에 응답) 옵션을 나중에 파일을 추적 포함 할 수있는 빈 폴더를 추적 할 수 있지만, 지금은 비어있는 경우, 당신은 ommit 수 *
로부터 .gitignore
파일을 체크 . 기본적으로, 파일이 말하고있는 모든이에 "날 무시하지 않는다"하지만, 그 디렉토리가 비어 및 추적이다.
.gitignore
파일은 다음과 같습니다.
!.gitignore
그게 다야, 체크인하면 나중에 파일을 추적할 수 있는 비어 있지만 아직 추적된 디렉토리가 있습니다.
파일에 한 줄을 유지하도록 제안하는 이유는 .gitignore
목적을 제공하기 때문입니다. 그렇지 않으면 어떤 사람이 그것을 제거할 생각을 할 수도 있습니다. 줄 위에 주석을 추가하면 도움이 될 수 있습니다.
답변자 : Jörg W Mittag
당신은 할 수 없습니다. 이것은 Git 관리자의 의도적인 디자인 결정입니다. 기본적으로 Git과 같은 소스 코드 관리 시스템의 목적은 소스 코드를 관리하는 것이며 빈 디렉토리는 소스 코드가 아닙니다. Git은 종종 콘텐츠 추적기로 설명되며, 다시 말하지만 빈 디렉터리는 콘텐츠가 아니므로(실제로는 정반대임) 추적되지 않습니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/115983/how-can-i-add-a-blank-directory-to-a-git-repository">
'etc. > StackOverFlow' 카테고리의 다른 글
Docker는 가상 머신과 어떻게 다릅니까? (0) | 2021.09.28 |
---|---|
package.json에서 물결표(~)와 캐럿(^)의 차이점은 무엇입니까? (0) | 2021.09.28 |
목록 목록에서 평면 목록을 만드는 방법 (0) | 2021.09.28 |
Git에서 모든 원격 분기를 복제하는 방법은 무엇입니까? (0) | 2021.09.26 |
'for' 루프에서 인덱스에 액세스합니까? (0) | 2021.09.26 |