如何提交目录结构(带子目录的目录)没有文件到git?

时间:2013-10-25 08:55:44

标签: git github gitignore

我正在尝试将以下目录结构提交给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

3 个答案:

答案 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/*/*