提交空文件夹结构(使用git)

时间:2013-01-26 20:27:02

标签: git gitignore

我在项目的根目录中有数据目录。它有图像目录和一些文件。这是一个例子:

  • 数据/
    • 图像/
      • image1.jpg
      • image2.jpg
      • image2.jpg
    • results.csv
    • r.txt

在gitignore中写什么,忽略数据/目录中的文件(即results.csv和r.txt)和images /目录中的文件(image.jpg,image2.jpg,image3.jpg)?

当我提交它时,存储库中的文件夹结构应为:

  • 数据/
    • 图像/

所以,我只想要提交空文件夹结构。

9 个答案:

答案 0 :(得分:105)

只需在要提交的每个文件夹中添加文件.gitkeep

在Windows上通过在文件夹中右键单击并选择:Git bash从此处执行此操作。然后输入:touch .gitkeep

答案 1 :(得分:80)

在Git中,你不能提交空文件夹,因为Git实际上并不保存文件夹,只保存文件。如果你真的希望它们是“空的”(即你没有可提交的内容),你必须在这些目录中创建一些占位符文件。

答案 2 :(得分:47)

这很容易。

告诉.gitignore忽略除.gitignore以外的所有内容以及您要保留的文件夹。将.gitignore放入要保留在仓库中的文件夹中。

最顶层.gitignore的内容:

# ignore everything except .gitignore and folders that I care about:
*
!images*
!.gitignore

在嵌套的images文件夹中,这是您的.gitignore

# ignore everything except .gitignore
*
!.gitignore

注意,您必须在.gitignore中拼出您不希望在.gitignore所在的文件夹中忽略的文件夹的名称。否则,他们显然会被忽视。

回购邮件中的文件夹显然不会为空,因为每个文件夹中都有.gitignore,但该部分可以忽略。 :)

答案 3 :(得分:30)

递归创建.gitkeep文件

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;

答案 4 :(得分:7)

传统上,每当我想要提交并清空目录结构时,我都会创建结构,然后在叶子目录中放置一个名为empty.txt的空文件。

然后当我把东西准备好提交时,我可以简单地删除empty.txt文件并提交真实文件。

  • 数据/
    • 图像/
      • empty.txt

答案 5 :(得分:4)

如果在构建期间目录需要存在,请考虑在Makefile中执行mkdir -p data/images

如果这还不够好,只需在数据/图像中创建一个空文件并忽略数据。

touch data/images/.gitignore
git add data/images/.gitignore
git commit -m "Add empty .gitignore to keep data/images around"
echo data >> .gitignore
git add .gitignore
git commit -m "Add data to .gitignore"

答案 6 :(得分:3)

您可以使用git commit --allow-empty进行空提交,但这不允许您提交空文件夹结构,因为git不知道或不关心文件夹作为对象本身 - 只是它们包含的文件。

答案 7 :(得分:1)

根据他们的常见问题解答,GIT不会跟踪空目录。

Git FAQ

但是,根据您的需求和项目要求,有一些解决方法。

基本上,如果要跟踪空目录,可以在其中放置.gitkeep文件。该文件可以为空白,只会有效。这是跟踪空目录的Gits方式。

另一种选择是提供目录的文档。您可以在其中添加一个描述其预期用途的自述文件。 Git将跟踪该文件夹,因为它中包含一个文件,您现在已经向您和/或其他任何可能使用源代码的人提供了文档。

如果您正在构建一个Web应用程序,您可能会发现只添加一个index.html文件很有用,如果该文件夹只能通过该应用程序访问,则该文件可能包含权限被拒绝的消息。 Codeigniter对所有目录都这样做。

答案 8 :(得分:1)

只需在images文件夹中添加名为.keep的文件。您现在可以暂存和提交,也可以将文件夹添加到版本控制中。

在images文件夹中创建一个空文件 4.2.1

$ touch .keep

On branch master
Your branch is up-to-date with 'origin/master'.

Untracked files:
  (use "git add ..." to include in what will be committed)

    images/

nothing added to commit but untracked files present (use "git add" to track)

$ git status

$ git add .