如何使用Git跟踪目录而不是他们的文件?

时间:2011-02-23 12:39:06

标签: git directory gitignore

我最近开始使用Git并且遇到了一件事情。如何跟踪目录而不跟踪其内容?

例如,我正在处理的网站允许上传。我想跟踪uploads目录,以便在分支等时创建它,但显然不是其中的文件(在开发分支中测试文件或在master中的真实文件中)。

在我的.gitignore中,我有以下内容:

uploads/*.*

还试过(忽略整个目录):

uploads/

此目录还可能包含子目录(uploads / thumbs / uploads / videos /)我希望能够跟踪这些目录而不是他们的文件。

这可以用Git吗?我在没有找到答案的情况下到处搜索。

5 个答案:

答案 0 :(得分:88)

Git不跟踪目录,它跟踪文件,因此要实现这一点,您需要至少跟踪一个文件。假设你的.gitignore文件看起来像这样:

upload/*

你可以这样做:

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

如果您忘记了-f,您会看到:

$ git add upload/.placeholder
The following paths are ignored by one of your .gitignore files:
upload
Use -f if you really want to add them.
fatal: no files added

然后当你git status时,你会看到:

# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#   new file:   upload/.placeholder
#

显然你可以这样做:

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

答案 1 :(得分:37)

我写了这篇here

在目录中添加.gitignore。

答案 2 :(得分:15)

最佳答案我发现在您的上传文件夹中包含.gitignore文件并包含此内容

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

这里有How can I add an empty directory to a Git repository?

答案 3 :(得分:12)

目前为止的最佳解决方案:

1)创建 .gitignore 文件

2)写在里面:

*
*/
!.gitignore

3)将.gitignore文件添加到您想要的文件夹中。

来源:https://stackoverflow.com/a/5581995/2958543

答案 4 :(得分:1)

为了仅跟踪目录而不跟踪文件,我执行了以下操作。感谢@PeterFarmer对git仅跟踪文件的评论,如下所述,我能够保留除文件之外的所有目录。

# 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 status时,git只识别文件夹,而不识别文件。

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

双星号查找零个或多个目录。

  

/ ** /