如何使用git忽略某些目录但不忽略那些目录中的某些文件?

时间:2012-11-09 16:38:36

标签: git gitignore

请注意以下结构:

/assets --> this dir shouldn't be ignored. but SOME OF their contents SHOULD.;
ignoredfile.jpg --> should be ignored.
ignoredfile2.gif --> --> should be ignored.
 /blog --> this dir shouldn't be ignored. but SOME OF their contents SHOULD.;
  /images --> this dir shouldn't be ignored. but ALL their contents SHOULD.;

/assets内部文件夹中,我有一个gitignore文件:

# Ignore everything in this directory
*
# Except this file
!.gitignore
!/images
!/resize
!/blog

在'/ assets / blog'里面我有另一个.gitignore

# Ignore everything in this directory
*
# Except those files
!.gitignore
!/images

问题

当我推送到远程服务器时,git DO推送了/blog目录而不是/blog/images目录。为什么?

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

只需将其从.gitignore中删除,然后使用通常的git add -A <directory-name>重新添加即可,您应该没问题。

请注意可能会再次删除目录的合并,但如果要正确合并所有内容,则应该没问题。

更新

你不能在git中提交空目录;一种常见的方法是在其中放置一个空的“占位符”文件,只是说你希望它留在那里。

例如,将名为.keep的空隐藏文件放入/images目录并更改.gitignore,如下所示:

/images/*
!/images/.keep

现在,你添加/提交.keep文件,你应该没问题。

替代解决方案

.gitignore放在/images内,并附上以下内容:

*
!.gitignore

答案 1 :(得分:1)

git不跟踪目录。如果忽略该目录中的所有文件,git将不会记录该目录甚至存在。您可以创建一个(否则无用的)空文件,例如,该目录中的.keepgit add该文件,但我不确定这是否适合您的最终目标。

答案 2 :(得分:0)

.gitignore删除目录。

使用git add <dir>将目录添加到您的存储库。

再次提交并推送。