我正在尝试将以下目录结构提交给git:
web
/uploads
/avatars
/video
我将.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存储库? 附: git版本是git版本1.8.4.msysgit.0
答案 0 :(得分:1)
如果您排除某个目录,那么它下面的所有内容将始终被排除,即使您稍后在其下面放置了某些内容。要取消某些文件或目录的取消,您必须取消对要取消签名的任何内容的每个父目录进行取消签名。所以你的.gitconfig必须是
!web/uploads/
web/uploads/*
!web/uploads/avatars/
!web/uploads/video/
web/uploads/avatars/*
web/uploads/video/*
!web/uploads/*/.gitkeep
但你应该记住.gitkeep不是一个git功能,它只是一个协议,只是它是一个隐藏文件,所以名称可以是任何
答案 1 :(得分: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
文件,一切都会正常运行。
答案 2 :(得分:0)
如果忽略某个目录,git不会检查其子目录和文件。
因此,git不检查以下行。
!/web/uploads/avatars/.gitkeep
!/web/uploads/video/.gitkeep
如果你想让git检查子目录和文件,请使用星号并忽略所有文件(而不是目录)。
例如:
/web/uploads/*/*