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


当前回答

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}

其他回答

只需添加一个 readme 或.gitignore 文件,然后从 GitHub 网站删除它,但不是终端。

有时你需要处理错误的书面图书馆或软件,需要一个“真实”空白和现有目录。 设置一个简单的.gitignore 或.keep 可能会破坏它们,并导致一个错误。

首先,创建所需的目录:

mkdir empty

然后你将一个破碎的象征性链接添加到这个目录(但在任何其他情况下,除了上面描述的使用情况,请使用一个 README 与解释):

ln -s .this.directory empty/.keep

要忽略此目录中的文件,您可以将其添加到根.gitignore:

echo "/empty" >> .gitignore

要添加被忽略的文件,使用一个参数强制它:

git add -f empty/.keep

在承诺之后,你在你的指数中有一个破碎的象征性链接, git 创建了目录. 破碎的链接有某些好处,因为它不是正常的文件和没有正常的文件的点。

find empty -type f

$ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)

添加另一个选项给女士。

假设你想添加一个目录到 git,这对于所有与 git 相关的目的,应该保持空白,从来没有跟踪其内容,一个.gitignore 如这里多次提议,会做这个技巧。

形式,如上所述,是:

*
!.gitignore

$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore

#!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore

使用此,您可以从您想要添加的目录中运行它,或者将目录引用为第一个和唯一的参数:

$ ignore_dir ./some/directory

另一个选项(回复 @GreenAsJade的评论),如果你想跟踪一个空的文件夹,可能在未来包含跟踪的文件,但将是空的现在,你可以从.gitignore 文件中删除 *,并检查它。

!.gitignore

我建议在文件中保持一个行是,它给了.gitignore 目的。 否则,某些下行可能会认为要删除它. 如果你在线上放一个评论,这可能有帮助。

将.gitkeep 文件添加到空的目录中,并承诺。

touch .gitkeep

这是Git跟随的标准。

我也面临着空的目录的问题. 使用存储文件的问题是,你需要创建它们,并删除它们,如果它们不再需要(因为后来添加了子目录或文件。

这就是为什么我决定写一个开源工具,可以自动管理创建/删除此类存储文件。 它是为.NET 平台写的,并在 Mono (.NET for Linux) 和 Windows 中运行。

只需看看: http://code.google.com/p/markemptydirs