我如何将一个空的目录(不包含文件)添加到一个Git存储库中?


当前回答

我正在寻找这个问题,因为:我创建一个新的目录,它包含许多文件。在这些文件中,一些我想添加到Git存储库,有些不。

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    ../trine/device_android/

它不在这个新目录中列出单独的文件,然后我认为也许我只能添加这个目录,然后处理单独的文件,所以我谷歌“只添加目录”。

在我的情况下,我发现我只能在新目录中添加一个文件,我确信我想将其添加到Git。

git add new_folder/some_file

此后,“Git状态”将显示单独文件的状态。

其他回答

我总是建立一个功能来检查我想要的文件夹结构,并在项目中为我构建它。

function check_page_custom_folder_structure () {
    if (!is_dir(TEMPLATEPATH."/page-customs"))
        mkdir(TEMPLATEPATH."/page-customs");    
    if (!is_dir(TEMPLATEPATH."/page-customs/css"))
        mkdir(TEMPLATEPATH."/page-customs/css");
    if (!is_dir(TEMPLATEPATH."/page-customs/js"))
        mkdir(TEMPLATEPATH."/page-customs/js");
}

这是在PHP,但我确信大多数语言支持相同的功能,因为文件夹的创建是由应用程序照顾的,文件夹将永远在那里。

如上所述,无法添加空的目录,但这里是一个单一的列,将空的.gitignore 文件添加到所有目录中。

ruby -e'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each {♰f♰ FileUtils.touch(File.join(f, ".gitignore")) 如果 File.directory?(f) }'

我把它放在一个Rakefile中,以便轻松地访问。

但我建议:让一个构建脚本或部署脚本在网站上创建目录。



潜在问题:目录不再空。


现在,而不是试图得到 git 跟踪空的目录 允许探索其他选项. 也许(希望)你有一个部署脚本. 让部署脚本创建目录后 git 克隆. 或者你有一个构建脚本. 让构建脚本创建目录后编辑. 或者也许甚至修改工具本身检查并创建目录之前使用。

我认为这是对问题的更敏感的方法. 构建脚本和部署脚本是为了准备事物运行程序。 您的工具需要一个空的目录. 因此,使用这些脚本来创建空的目录。


独自行走是危险的,请遵循这些命令。

find -type d -empty

find -name .git -prune -o -type d -empty -print

下列命令可能会帮助您,如果您继承了一个包含“空白”目录的项目。

列出包含一个名为.gitkeep 的文件的每个目录:

find -type f -name .gitkeep

find -type f -printf "%h\n" | sort | uniq -c | sort -n

Jamie Flournoy的解决方案工作得很好. 这里有一个稍微改进的版本,以保持.htaccess :

# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess

使用此解决方案,您可以插入一个空的文件夹,例如 /log、 /tmp 或 /cache 并且文件夹将保持空白。

为什么我们需要空版本的文件夹

第一件事先:

一个空的目录不能在 Git 版本系统下成为树的一部分。

但有一些场景,在那里“版本”空的目录可能有意义,例如:

一些建议工作

放置一个 README 文件或其他包含某些内容的文件,以使目录不空,或创建一个.gitignore 文件,具有某种“逆逻辑”(即包含所有文件),最终服务于相同的目的的方法#1。

.Gitkeep方法

使用一个空白的文件称为.gitkeep 以强制文件夹在版本系统中的存在。

您使用一个文件,唯一的目的是保持文件夹. 您不会放置任何信息,你不想放置. 例如,您应该使用 READMEs 作为, 好, READMEs 有用的信息, 不是作为一个借口保持文件夹. 分离担忧总是一个好事, 你仍然可以添加一个.gitignore 忽略不需要的文件。

采用