Git으로 디렉토리를 추적하고 파일을 추적하는 방법은 무엇입니까?


85

최근에 Git을 사용하기 시작했고 한 가지 문제가 있습니다. 콘텐츠를 추적하지 않고 디렉터리를 추적하려면 어떻게해야합니까?

예를 들어 내가 작업중인 사이트는 업로드를 허용합니다. 나는 분기 등을 할 때 생성되도록 업로드 디렉토리를 추적하고 싶지만 분명히 그 안의 파일이 아닙니다 (지점을 개발하는 동안 테스트 파일 또는 마스터의 실제 파일).

내 .gitignore에는 다음이 있습니다.

업로드 /*.*

또한 시도했습니다 (전체 디렉토리 무시).

업로드 /

이 디렉토리에는 하위 디렉토리 (uploads / thumbs / uploads / videos /)도 포함될 수 있습니다. 파일이 아닌 이들을 추적하고 싶습니다.

Git으로 가능합니까? 나는 답을 찾지 않고 모든 곳을 검색했습니다.


Git은 파일 만 추적합니다. 당신이 할 수있는 일은 git 후크를 가지고 놀면서 디렉토리 목록을 포함 할 파일을 추적하는 것입니다 (훅을 사용하여 자동 생성됨). 그것이 가능할지 완전히 확신하지는 못하지만.
Šimon Tóth

보다 구체적 : Git은 콘텐츠를 추적 하고 (git의 경우) 빈 디렉터리는 콘텐츠가 아닙니다. 동의하든 그렇지 않든 논쟁 할 수 있지만, 또 다른 "해결 방법"으로 빌드 / 설치 / 필요할 때 디렉토리를 만드는 방법을 생각할 수 있습니다. 그러나 : " .placeholder-file " -솔루션도 사용합니다 .)
KingCrunch

1
.placeholder를 사용하는 대신 .gitignore 파일을 사용합니다. 이것은 디렉토리 내의 제외를 처리 할뿐만 아니라 자리 표시 자 자체의 역할을합니다.
Abizern

답변:


113

Git은 디렉토리를 추적하지 않고 파일을 추적하므로이를 달성하려면 적어도 하나의 파일을 추적해야합니다. 따라서 .gitignore파일이 다음과 같다고 가정합니다 .

upload/*

다음과 같이 할 수 있습니다.

$ touch upload/.placeholder
$ git add -f upload/.placeholder

잊어 버린 경우 -f다음이 표시됩니다.

$ git add upload / .placeholder
다음 경로는 .gitignore 파일 중 하나에서 무시됩니다.
업로드
정말로 추가하려면 -f를 사용하십시오.
치명적 : 추가 된 파일 없음

그러면 다음 git status이 표시됩니다.

# 브랜치 마스터에서
#
# 초기 커밋
#
# 커밋 할 변경 사항 :
# ( "git rm --cached ..."를 사용하여 언 스테이징)
#
# 새 파일 : upload / .placeholder
#

분명히 다음을 수행 할 수 있습니다.

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder

고마워요, 이것이 제가 필요한 것입니다.
Ben

11
자리 표시 자에 대한 일반적인 규칙은 gitignore 파일입니다.
Cascabel

2
@Jefromi Indeed는 Abizern에 대한 나의 의견으로 .gitignore파일을 자리 표시 자로 사용하는 것을 고려한 적이 없습니다 .
Peter Farmer

1
죄송합니다. 어떻게 든 해당 댓글을 놓쳤습니다.
Cascabel

2
Git은 디렉토리를 추적하지 않습니다 . UNIX에서는 모든 것이 파일이고 심지어 디렉토리도 파일이라고 가르 칠 때 파일을 추적 하는 것은 우스운 소리로 들립니다
Green

38

여기 에 대해 썼습니다 .

디렉토리 내에 .gitignore를 추가하십시오.


1
멋진 기사와 의견! .... 자리 표시 자 파일로 .gitignore를 사용하여 고려 적이
피터 농부에게

감사. 게시물을 작성하고 댓글을받는 것만으로도 배웠습니다.
Abizern

1
지금 사용하는 유명한 명명 규칙이있는 것 같습니다.gitkeep
tarabyte

바로 지금 "하 - 하"mooment, 난 내가 6 다른 시간 upvote에 수 원하는 것을 얻었다
adelowo



6

디렉토리 만 추적하고 파일은 추적하지 않기 위해 다음을 수행했습니다. git 추적 전용 파일에 대한 @PeterFarmer의 의견 덕분에 아래에 설명 된 파일을 제외한 모든 디렉토리를 유지할 수있었습니다.

# exclude everything in every folder
/data/**/*.*

# include only .gitkeep files
!/data/**/*.gitkeep

이것을 .gitignore 파일에 추가하면 작업이 수행됩니다. 다음은 내 폴더 구조입니다.

data/
├── processed
│   ├── dataset1.csv
│   └── dataset2.csv
├── raw
│   ├── raw_dataset1.json
└── test
    ├── subfolder
    │   └── dataset2.csv
    └── reviews.csv

내가 할 때 git add . && git statusgit은 파일이 아닌 폴더 만 인식합니다.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   data/processed/.gitkeep
        new file:   data/raw/.gitkeep
        new file:   data/test/.gitkeep
        new file:   data/test/subfolder/.gitkeep

.gitignore 파일에 대해 다음 사항에 유의하십시오.

슬래시는 루트 디렉토리 만 찾습니다.

/ dir

이중 별표는 0 개 이상의 디렉토리를 찾습니다.

/ ** /


감사합니다! 나는이 방법을 사용하고 있으며 매우 유용합니다
sebasira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.