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


当前回答

这样做的一个简单的方式是通过添加一个.gitkeep 文件到您希望(目前)保持空白的目录。

查看此 SOF 答案以获取更多信息 - 这也解释了为什么一些人发现添加.gitignore 文件的竞争协议(如在许多答案中所述)令人困惑。

其他回答

在目录中创建一个名为.gitkeep 的空白文件,然后将其添加到 git。

这将是一个隐藏的文件在Unix类似系统的默认情况下,但它将迫使Git承认该目录的存在,因为它现在有内容。

此外,请注意,关于此文件的名称没有什么特别的。 你可能已经命名了它你想要的任何东西. 所有 Git 关心的是,文件夹里有什么东西。

您可以通过 create_readme.php 保存此代码并从您的 Git 项目的根目录运行 PHP 代码。

php create_readme.php

它将添加 README 文件到所有是空的目录,因此这些目录将被添加到指数。

<?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>

然后做

git commit -m "message"
git push

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

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,但我确信大多数语言支持相同的功能,因为文件夹的创建是由应用程序照顾的,文件夹将永远在那里。

PowerShell 版本:

在目录中找到所有空的文件夹 添加一个空的.gitkeep 文件在那里

Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}

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



潜在问题:目录不再空。


现在,而不是试图得到 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