0

我正在尝试将以下目录结构提交给 git:

web
    /uploads
            /avatars
            /video

我在 repo 的根目录中.gitkeep放入/web/uploads/avatars//web/uploads/video/添加了以下几行:.gitignore

/web/uploads/
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep

git status不显示任何新文件。调用git add web/uploads/avatars/.gitkeep输出以下消息:

The following paths are ignored by one of your .gitignore files:
web/uploads/avatars/.gitkeep
Use -f if you really want to add them.
fatal: no files added

如何将空目录结构提交到 git 存储库?PS git 版本是 git 版本 1.8.4.msysgit.0

4

3 回答 3

1

如果你排除了某个目录,那么它下面的所有东西都会被排除,即使你稍后在它下面放了 unignore 的东西。要取消忽略某些文件或目录,您必须取消忽略要取消忽略的任何内容的每个父目录。所以你的 .gitconfig 必须是

!web/uploads/

web/uploads/*
!web/uploads/avatars/
!web/uploads/video/

web/uploads/avatars/*
web/uploads/video/*

!web/uploads/*/.gitkeep

但是你应该记住,.gitkeep 不是一个 git 特性,它只是一个协议,只是一个隐藏文件,所以名称可以是任何

于 2013-10-25T10:20:58.587 回答
0

您的.gitignore文件忽略了目录/web/uploads本身,因此无论以下否定模式,它的子目录和文件都将被自动忽略。

如果要添加/web/uploads/但忽略其中的文件,则.gitignore可以是:

/web/uploads/*
# Next line tell git to add subdirectories back
!/web/uploads/**/
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep

或者如果你只是想添加目录,无论有没有文件,那么你不需要触摸.gitignore,只需添加.gitkeep文件,一切都会好的。

于 2013-10-25T10:15:49.433 回答
0

如果你忽略一个目录,git 不会检查它的子目录和文件。

所以,git 不会检查以下几行。

!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep

如果您希望 git 检查子目录和文件,请使用星号并忽略所有文件(不是目录)。

例如:

/web/uploads/*/*
于 2013-10-25T10:21:03.743 回答