如何将空目录添加到Git存储库?

时间:2008-09-22 16:41:04

标签: git directory git-add

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

36 个答案:

答案 0 :(得分:3709)

使目录保持(几乎)为空(在存储库中)的另一种方法是在该目录中创建一个包含以下四行的.gitignore文件:

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

然后您不必按照m104的solution中的方式完成订单。

这样做的好处是,当您执行git状态时,该目录中的文件不会显示为“未跟踪”。

使@GreenAsJade的评论持久:

  

我认为值得注意的是,这个解决方案确切地解决了问题所要求的问题,但也许并不是很多人在看这个问题时会想到的。此解决方案可确保目录保持为空。它说“我真的不想在这里检查文件”。与“我在这里没有要检查的文件相反,但我需要这里的目录,文件可能会在以后”。

答案 1 :(得分:1029)

你做不到。请参阅Git FAQ

  

目前设计的git索引   (暂存区)只允许文件到   被列出,并没有人足够胜任   使更改允许为空   目录已经足够关心了   这种情况可以解决它。

     

自动添加目录   在其中添加文件时。那   是的,目录永远不必添加   到存储库,并没有被跟踪   他们自己。

     

您可以说“git add <dir>”   将在那里添加文件。

     

如果你真的需要一个目录   在结帐时你应该创建一个   文件在里面。 .gitignore效果很好   这个目的;你可以把它留空   或填写您的文件名称   期望出现在目录中。

答案 2 :(得分:650)

在目录中创建一个名为.gitkeep的空文件,并添加该文件。

答案 3 :(得分:394)

您始终可以在目录中放置一个README文件,并说明您为什么要在存储库中使用此目录(否则为空)。

答案 4 :(得分:296)

touch .keep

在Linux上,这会创建一个名为.keep的空文件。此名称优先于.gitkeep,因为前者与Git无关,而后者则特定于Git。其次,正如另一位用户所指出的那样,应该为Git本身使用的文件和目录保留.git前缀约定。

或者,如另一个answer中所述,该目录可以包含描述性README or README.md file

当然,这要求文件的存在不会导致应用程序中断。

答案 5 :(得分:258)

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

首先要做的事情:

  

空目录不能是Git版本控制系统下树的一部分。

根本不会被跟踪。但是有些情况下“版本控制”空目录可能有意义,例如:

  • 搭建预定义文件夹结构,使其可供存储库的每个用户/贡献者使用;或者,作为上述的一个特例,为临时文件创建一个文件夹,例如cache/logs/目录,我们要在其中提供文件夹{{{ 1}}其内容
  • 与上述相关,某些项目在没有某些文件夹的情况下将无法运行(这通常是一个设计不良的项目的暗示,但它是一个经常出现的现实场景,也许可能存在,说,许可问题有待解决)。

一些建议的解决方法

许多用户建议:

  1. 放置.gitignore个文件或包含某些内容的其他文件,以使该目录非空,或
  2. 创建一个README文件,其中包含一种“反向逻辑”(即包括所有文件),最后这些文件与方法#1的目的相同。
  3. 虽然这两个解决方案确实有效但我发现它们与Git版本控制的有意义的方法不一致。

    • 你为什么要把伪造的文件或自述文件放在项目中你真的不想要?
    • 为什么要使用.gitignore做一件事(保留文件),这与它的意图完全相反(排除文件),即使它有可能吗?

    .gitkeep方法

    使用名为.gitignore文件,以强制在版本控制系统中显示该文件夹。

    虽然看起来不是那么大的差异:

    • 您使用的文件具有保留文件夹的单一目的。你不要把任何你不想放的信息放在那里。

      例如,你应该使用自述文件作为有效信息的自述文件,而不是保留文件夹的借口。

      关注点分离始终是件好事,您仍然可以添加.gitkeep来忽略不需要的文件。

    • 命名为.gitignore使文件本身(以及到其他开发人员)非常清晰明了,这对于共享项目和核心目的之一是有益的一个Git存储库)这个文件是

      • 与代码无关的文件(由于前导点和名称)
      • 与Git明显相关的文件
      • 其目的(保持)清楚地陈述,并且在其含义上与忽略
      • 一致且在语义上相反

    通过

    我已经看到LaravelAngular-CLI等非常重要的框架所采用的.gitkeep方法。

答案 6 :(得分:121)

如其他答案中所述,Git无法在其暂存区域中表示空目录。 (请参阅Git FAQ。)但是,如果目录是空的,如果它只包含.gitignore文件,那么只能通过目录创建.gitignore个文件:

find . -type d -empty -exec touch {}/.gitignore \;

答案 7 :(得分:61)

Andy Lester是对的,但是如果您的目录只需要为空,而不是为空为空,则可以在其中放置一个空的.gitignore文件作为解决方法。

顺便说一下,这是一个实现问题,而不是基本的Git存储设计问题。正如在Git邮件列表中多次提到的那样,没有实现这一点的原因是没有人关心为它提交补丁,而不是它不能或不应该完成。

答案 8 :(得分:30)

Ruby on Rails日志文件夹创建方式:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

现在日志目录将包含在树中。它在部署时非常有用,因此您不必编写例程来创建日志目录。

可以通过发出

来阻止日志文件
echo log/dev.log >> .gitignore

但你可能知道。

答案 9 :(得分:27)

Git不会跟踪空目录。有关详细说明,请参阅Git FAQ。建议的解决方法是将.gitignore文件放在空目录中。我不喜欢这个解决方案,因为.gitignore被Unix惯例“隐藏”了。也没有解释为什么目录是空的。

我建议将一个README文件放在空目录中,解释为什么目录为空以及为什么需要在Git中跟踪它。有了README文件,就Git而言,目录不再是空的。

真正的问题是为什么你需要git中的空目录?通常你有一些构建脚本可以在编译/运行之前创建空目录。如果没有,那就做一个。这是一个比将空目录放在git中更好的解决方案。

所以你有理由在git中需要一个空目录。把这个原因放在README文件中。这样,其他开发人员(以及未来的你)知道为什么空目录需要在那里。您还将知道,当解决了需要空目录的问题时,您可以删除空目录。


要列出每个空目录,请使用以下命令:

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

在每个空目录中创建占位符自述文件:

find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;

要忽略除README文件之外的目录中的所有内容,请在.gitignore中添加以下行:

path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir

或者,您可以排除每个 README文件被忽略:

path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

列出每个自述文件后的每个自述文件:

find -name README.emptydir

答案 10 :(得分:26)

警告:此调整并非真正有效。很抱歉给您带来不便。

以下原帖:

我在玩Git内部时找到了解决方案!

  1. 假设您在存储库中。
  2. 创建空目录:

    $ mkdir path/to/empty-folder
    
  3. 使用管道命令和空树SHA-1将其添加到索引中:

    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    键入命令,然后输入第二行。按 Enter 然后按 Ctrl + D 以终止输入。 注意:格式为模式 [SPACE] 类型 [SPACE] SHA-1hash [TAB] 路径(选项卡很重要,答案格式不保留它。)

  4. 就是这样!您的空文件夹位于索引中。你所要做的就是提交。

  5. 此解决方案很短,显然效果很好(参见编辑!),但这并不容易记住......

    可以通过在其中创建一个新的空Git存储库cd找到空树SHA-1,并发出git write-tree,它输出空树SHA-1。

    修改

    我发现它以来一直在使用这个解决方案。它似乎与创建子模块的工作方式完全相同,只是在任何地方都没有定义模块。 这会在发出git submodule init|update时导致错误。 问题是git update-index040000 tree部分重写为160000 commit

    此外,放在该路径下的任何文件都不会被Git注意到,因为它认为它们属于某个其他存储库。这很讨厌,因为它很容易被忽视!

    但是,如果您还没有(并且不会)在您的存储库中使用任何Git子模块,并且“empty”文件夹将保持为空或者您希望Git知道它的存在并忽略其内容,那么可以用这个调整。按照惯常的方式使用子模块需要采取更多步骤进行调整。

答案 11 :(得分:20)

也许添加一个空目录似乎是最小阻力的路径,因为你有脚本期望该目录存在(可能是因为它是生成二进制文件的目标)。另一种方法是修改脚本以根据需要创建目录

mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed

在此示例中,您可以检入目录的(损坏的)符号链接,以便您可以在不使用“.generated”前缀的情况下访问它(但这是可选的)。

ln -sf .generated/bin bin
git add bin

如果要清理源树,可以:

rm -rf .generated ## this should be in a "clean" script or in a makefile

如果您采用经常建议的方法来检查几乎为空的文件夹,那么删除内容的复杂性就会很小,而不会删除“.gitignore”文件。

您可以通过将以下内容添加到根.gitignore:

来忽略所有生成的文件
.generated

答案 12 :(得分:20)

假设您需要一个名为 tmp 的空目录:

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

换句话说,您需要先将.gitignore文件添加到索引中,然后才能告诉Git忽略它(以及空目录中的其他所有内容)。

答案 13 :(得分:14)

我也一直面临着空目录的问题。使用占位符文件的问题是你需要创建它们,并删除它们,如果不再需要它们(因为后来有添加的子目录或文件。使用大源树管理这些占位符文件可能很麻烦和错误易发生。

这就是为什么我决定编写一个开源工具,它可以自动管理这些占位符文件的创建/删除。它是为.NET平台编写的,可在Mono(.NET for Linux)和Windows下运行。

请看一下:http://code.google.com/p/markemptydirs

答案 14 :(得分:12)

你不能也不可能永远无法做到。这是Linus Torvald本人做出的决定。他知道什么对我们有好处。

在那里我读过一次咆哮。

我找到了 Re: Empty directories.. ,但也许还有另一个。

不幸的是,你必须忍受变通办法。

答案 15 :(得分:11)

我喜欢@ Artur79和@mjs的答案,所以我一直在使用两者的组合,并使其成为我们项目的标准。

find . -type d -empty -exec touch {}/.gitkeep \;

但是,只有少数开发人员在Mac或Linux上工作。在Windows上做了很多工作,我找不到相同的简单单行程来完成相同的工作。有些人幸运地因为其他原因安装了Cygwin,但是为此而开的Cygwin似乎有点矫枉过正。

编辑以获得更好的解决方案

因此,由于我们的大多数开发人员已经安装了Ant,我首先想到的是将Ant构建文件放在一起,以独立于平台完成此任务。仍然可以找到here

然而,我后来认为将它变成一个小实用程序命令会更好,所以我使用Python重新创建它并将其发布到PyPI here。您只需运行以下命令即可安装:

pip3 install gitkeep2

它允许您递归地创建和删除.gitkeep个文件,它还允许您为它们添加消息,以便您了解这些目录重要的原因。最后一点是奖金。我认为如果.gitkeep文件可以自我记录会很好。

$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH

  Add a .gitkeep file to a directory in order to push them into a Git repo
  even if they're empty.

  Read more about why this is necessary at: https://git.wiki.kernel.org/inde
  x.php/Git_FAQ#Can_I_add_empty_directories.3F

Options:
  -r, --recursive     Add or remove the .gitkeep files recursively for all
                      sub-directories in the specified path.
  -l, --let-go        Remove the .gitkeep files from the specified path.
  -e, --empty         Create empty .gitkeep files. This will ignore any
                      message provided
  -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                      used to explain why it's important to push the specified
                      directory to source control even if it's empty.
  -v, --verbose       Print out everything.
  --help              Show this message and exit.

我希望你觉得它很有用。

答案 16 :(得分:10)

当您添加.gitignore文件时,如果您要在其中放入任意数量的内容(您希望Git忽略),您可能希望添加一行只带有星号{{1}确保您不会意外添加被忽略的内容。

答案 17 :(得分:8)

如前所述,不可能添加空目录,但这里有一个将空.gitignore文件添加到所有目录的单行程序。

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

我把它放在Rakefile中以便于访问。

答案 18 :(得分:8)

The solution of Jamie Flournoy效果很好。这是一个比特增强版本,以保持.htaccess

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

使用此解决方案,您可以提交一个空文件夹,例如/log/tmp/cache,文件夹将保持为空。

答案 19 :(得分:7)

没有办法让Git跟踪目录,所以唯一的解决方案是在你希望Git跟踪的目录中添加一个占位符文件。

该文件可以命名并包含您想要的任何内容,但大多数人使用名为.gitkeep的空文件(尽管有些人更喜欢与VCS无关的.keep)。

带前缀的.将其标记为隐藏文件。

另一个想法是添加一个README文件,说明该目录的用途。

答案 20 :(得分:7)

我总是构建一个函数来检查我想要的文件夹结构,并在项目中为我构建它。这解决了这个问题,因为空文件夹由代理保存在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中,但我确信大多数语言都支持相同的功能,并且由于应用程序负责创建文件夹,因此文件夹将始终存在。

答案 21 :(得分:7)

这是一个黑客,但它很有趣(Git 2.2.1)。与@Teka建议的类似,但更容易记住:

  • 将子模块添加到任何存储库(git submodule add path_to_repo
  • 这将添加文件夹和文件.submodules。做出改变。
  • 删除.submodules文件并提交更改。

现在,您有一个在签出提交时创建的目录。但有趣的是,如果你查看这个文件的树对象的内容,你会得到:

  

致命:不是有效的对象名称   b64338b90b4209263b50244d18278c0999867193

我不鼓励使用它,因为它可能会停止在未来版本的Git中工作。这可能会使您的存储库损坏。

答案 22 :(得分:6)

许多人已经回答了这个问题。只需在此处添加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}

答案 23 :(得分:5)

你做不到。这是Git维护者的故意设计决定。基本上,像Git这样的源代码管理系统的目的是管理源代码,而空目录不是源代码。 Git也经常被描述为内容跟踪器,同样,空目录不是内容(实际上完全相反),因此不会跟踪它们。

答案 24 :(得分:5)

如果你想在多个语义目录中添加一个容纳大量瞬态数据的文件夹,那么一种方法就是将这样的东西添加到你的root .gitignore ......

/app/data/**/*.* !/app/data/**/*.md

然后你可以在每个目录中提交描述性README.md文件(或空白文件,无关紧要,只要你可以像在这种情况下使用*.md那样唯一地定位它们)以确保目录所有都仍然是回购的一部分,但文件(带扩展名)将被忽略。限制:目录名称中不允许.

您可以使用xml / images文件或其他任何内容填充所有这些目录,并随着时间的推移在/app/data/下添加更多目录,因为您的应用程序需要开发存储(使用README.md文件进行刻录每个存储目录的确切描述。

通过为每个新目录创建新的.gitignore,无需进一步更改.gitignore或分散。可能不是最聪明的解决方案,但是简洁明了,总是适合我。好又简单! ;)

enter image description here

答案 25 :(得分:4)

为战斗添加一个选项。

假设您要向git添加一个目录,出于与git相关的所有目的,该目录应保持为空并且永远不会跟踪其内容,.gitignore正如在这里建议的那样,将会有所作为。

如上所述,格式为:

*
!.gitignore

现在,如果你想在命令行中做一个方法,一下子, inside 你要添加的目录,你可以执行:

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

我自己,我有一个用于执行此操作的shell脚本。无论你想要什么,都要命名脚本,并将其添加到include路径中的某个位置,或者直接引用它:

#!/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的评论),如果你想跟踪一个 MAY 将来包含跟踪文件的空文件夹,但现在是空的,你可以省略来自*文件的.gitignore,并检查中的。基本上,所有文件都说是&#34;不要忽略 me &#34;,否则,该目录为空并被跟踪。

您的.gitignore文件如下所示:

!.gitignore

那就是它,检查一下,你有一个空的,但是跟踪的目录,你可以在以后跟踪文件。

我建议在文件中保留一行的原因是它提供.gitignore目的。否则,某些人可能会认为将其删除。如果您在该行上方发表评论可能会有所帮助。

答案 26 :(得分:4)

有时你必须处理糟糕的书面图书馆或软件,这需要一个真实的&#34;空和现有目录。使用简单的.gitignore.keep可能会破坏它们并导致错误。以下可能有助于这些情况,但不保证......

首先创建所需的目录:

mkdir empty

然后你向这个目录添加一个破损的符号链接(但除了上面描述的用例之外的任何其他情况,请使用README并附上说明):

ln -s .this.directory empty/.keep

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

echo "/empty" >> .gitignore

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

git add -f empty/.keep

提交后,索引中的符号链接断开,git会创建目录。断开的链接有一些优点,因为它不是常规文件,并且指向没有常规文件。所以它甚至适合问题的部分&#34;(不包含文件)&#34;,不是出于意图,而是出于意义,我想:

find empty -type f

此命令显示空结果,因为此目录中不存在任何文件。因此,获取目录中所有文件的大多数应用程序通常都看不到此链接,至少如果它们存在&#34;文件存在&#34;或者&#34;是可读的&#34;。甚至一些脚本也找不到任何文件:

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

但我强烈建议仅在特殊情况下使用此解决方案,在空目录中编写好的README通常是更好的解决方案。 (我不知道这是否适用于Windows文件系统...)

答案 27 :(得分:2)

有时我的文件夹存储库只包含被认为是“内容”的文件 - 也就是说,它们不是我关心的版本文件,因此永远不应该提交。使用Git的.gitignore文件,您可以忽略整个目录。但有时候在回购中使用文件夹会有所帮助。这是满足这一需求的出色解决方案。

我过去所做的是在我的仓库的根目录下放一个.gitignore文件,然后排除文件夹,如下所示:

/app/some-folder-to-exclude
/another-folder-to-exclude/*

然而,这些文件夹不会成为回购的一部分。您可以在其中添加类似README文件的内容。但是,您必须告诉您的应用程序不要担心处理任何README文件。

如果您的应用依赖于那里的文件夹(虽然是空的),您只需将.gitignore文件添加到相关文件夹中,然后使用它来完成两个目标:

告诉Git文件夹中有一个文件,这使得Git将它添加到repo中。 告诉Git忽略此文件夹的内容,减去此文件本身。 这是放在空目录中的.gitignore文件:

*
!.gitignore

第一行(*)告诉Git忽略此目录中的所有内容。第二行告诉Git不要忽略.gitignore文件。您可以将此文件填充到要添加到存储库的每个空文件夹中。

答案 28 :(得分:2)

您可以将此代码保存为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

答案 29 :(得分:1)

要将Jamie Flournoy的solution扩展到目录树,您可以将此.gitignore放在git应该跟踪的顶级目录中,并将touch .keepdir放在每个子目录中。所有其他文件都将被忽略。这对于确保构建目录的结构一致很有用。

# Ignore files but not directories. * matches both files and directories
# but */ matches only directories. Both match at every directory level
# at or below this one.
*
!*/

# Git doesn't track empty directories, so track .keepdir files, which also 
# tracks the containing directory. 
!.keepdir

# Keep this file and the explanation of how this works
!.gitignore
!Readme.md

答案 30 :(得分:1)

使用残破的GIT子模块引用来阅读@ofavre@stanislav-bashkyrtsev的答案来创建GIT目录,我很惊讶没有人建议通过这种简单的修改来使整体事情理智而安全:

添加一个空的真实子模块,而不是将伪造的子模块入侵GIT

输入:https://gitlab.com/empty-repo/empty.git

一个GIT存储库中只有一个提交:

commit e84d7b81f0033399e325b8037ed2b801a5c994e0
Author: Nobody <none>
Date: Thu Jan 1 00:00:00 1970 +0000

没有消息,没有提交的文件。

用法

要向您的GIT存储库添加一个空目录:

git submodule add https://gitlab.com/empty-repo/empty.git path/to/dir

要将所有现有的空目录转换为子模块:

find . -type d -empty -delete -exec git submodule add -f https://gitlab.com/empty-repo/empty.git \{\} \;

Git在创建子模块引用时将存储最新的提交哈希,因此您不必担心我(或GitLab)使用它来注入恶意文件。不幸的是,我没有找到任何方法来强制在结帐期间使用哪个提交ID,因此添加回购后,您必须使用e84d7b81f0033399e325b8037ed2b801a5c994e0手动检查参考提交ID是否为git submodule status

仍然不是本机解决方案,但是最好的解决方案可能是在没有人真正掌握GIT代码库的情况下实现的。

附录:重新创建该提交

您应该能够使用(在一个空目录中)重新创建此确切的提交:

# Initialize new GIT repository
git init

# Set author data (don't set it as part of the `git commit` command or your default data will be stored as “commit author”)
git config --local user.name "Nobody"
git config --local user.email "none"

# Set both the commit and the author date to the start of the Unix epoch (this cannot be done using `git commit` directly)
export GIT_AUTHOR_DATE="Thu Jan 1 00:00:00 1970 +0000"
export GIT_COMMITTER_DATE="Thu Jan 1 00:00:00 1970 +0000"

# Add root commit
git commit --allow-empty --allow-empty-message --no-edit

创建可重复的GIT提交非常困难……

答案 31 :(得分:1)

我搜索这个问题,原因是:我创建了一个新目录,其中包含许多文件。在这些文件中,有些我想添加到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 status”将显示单独文件的状态。

答案 32 :(得分:1)

这个简单的解决方案对我有用。

1。将.gitignore文件添加到您的空目录中:

*
*/
!.gitignore
  • *忽略文件夹中的所有文件
  • */忽略子目录
  • !.gitignore包含.gitignore文件

2。然后删除缓存,暂存文件,提交并推送:

git rm -r --cached .
git add .
git commit -m ".gitignore fix"
git push

答案 33 :(得分:0)

一种简单的方法是将.gitkeep文件添加到您希望(当前)保持为空的目录中。

有关更多信息,请参见此SOF answer-这也解释了为什么有些人发现添加.gitignore文件的竞争惯例(如此处的许多答案所述)令人困惑。

答案 34 :(得分:0)

只需在要跟踪的空目录中添加空(无内容).gitignore文件即可。

例如如果要跟踪空目录/project/content/posts,请创建新的空文件/project/content/posts/.gitignore

注意:.gitkeep不是官方git的一部分:

enter image description here

答案 35 :(得分:-3)

只需添加一个readme.gitignore,然后从github网站(而不是从终端)将其删除,这将提供一个空的存储库