如何将没有文件的目录结构(包含子目录的目录)提交到git?
我正在尝试将以下目录结构提交给git:如何将没有文件的目录结构(包含子目录的目录)提交到git?,git,github,gitignore,Git,Github,Gitignore,我正在尝试将以下目录结构提交给git: web /uploads /avatars /video 我将.gitkeep放入/web/uploads/avatars/和/web/uploads/video/中,并在repo根目录中的.gitignore中添加了以下行: /web/uploads/ !/web/uploads/avatars/.gitkeep !/web/uploads/video/.gitkeep 但是git status
web
/uploads
/avatars
/video
我将.gitkeep
放入/web/uploads/avatars/
和/web/uploads/video/
中,并在repo根目录中的.gitignore
中添加了以下行:
/web/uploads/
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep
但是git status
不显示任何新文件。调用git add web/uploads/avatars/.gitceep输出以下消息:
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存储库中?
P.S.git版本是git版本1.8.4.msysgit.0
您的
.gitignore
文件忽略目录/web/uploads
本身,因此其子目录和文件将被自动忽略,而不考虑以下否定模式
如果要添加/web/uploads/
但忽略其中的文件,则.gitinore
可以如下所示:
/web/uploads/*
# Next line tell git to add subdirectories back
!/web/uploads/**/
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep
或者,如果您只想添加目录,无论是否有文件,那么您不需要触摸
.gitignore
,只需添加.gitkeep
文件,一切都会正常工作。如果您排除某个目录,则该目录下的所有内容都将始终被排除,即使您稍后在该目录下放置了unignore内容。要取消对某些文件或目录的清除,您必须取消对要清除的任何内容的每个父目录的清除。因此,您的.gitconfig必须是
!web/uploads/
web/uploads/*
!web/uploads/avatars/
!web/uploads/video/
web/uploads/avatars/*
web/uploads/video/*
!web/uploads/*/.gitkeep
但是你应该记住.gitkeep不是一个git特性,它只是一个协议,只是一个隐藏文件,因此名称可以是任意的。如果你忽略一个目录,git不会检查它的子目录和文件 所以,git不检查以下行
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep
如果希望git检查子目录和文件,请使用星号并忽略所有文件(而不是目录)
例如:
/web/uploads/*/*
这是(因为您希望最低级别的目录为空,然后问题只会浮到下一个级别)的副本(或者,可能是的)。