gitignore除了重复的子目录以外的一切

时间:2017-11-04 17:39:30

标签: git terminal gitignore

我有以下目录结构:

./
├── proj-1
│   ├── README.md
│   ├── src/
│   └── test/
└── proj-2
    ├── README.md
    ├── src/
    └── test/

如何在根目录中仅使用一个src/文件忽略除.gitignore目录之外的所有内容?

我试过了:

*
!.gitignore
!/*/src/
!/*/src/*

但是在运行git status之后,似乎没有找到我想要的目录。

任何提示?

1 个答案:

答案 0 :(得分:1)

您必须以递归方式取消忽略src目录树的所有父目录,然后忽略其内容:

# Ignore everything
*

# Unignore .gitignore
!.gitignore

# Unignore all directories
!*/

# Ignore contents of all directories
*/*

# Unignore all src subdirectories
!*/src/

# Unignore directory tree under src subdirectories
!*/src/**

所以,对于看起来像

的树
.
├── proj-1
│   ├── README.md
│   ├── src
│   │   ├── srcfile1
│   │   ├── srcfile2
│   │   ├── srcfile3
│   │   └── subsrc
│   │       ├── subsrcfile1
│   │       ├── subsrcfile2
│   │       └── subsrcfile3
│   └── test
│       ├── testfile1
│       ├── testfile2
│       └── testfile3
├── proj-2
│   ├── README.md
│   ├── src
│   │   ├── srcfile1
│   │   ├── srcfile2
│   │   └── srcfile3
│   └── test
│       ├── testfile1
│       ├── testfile2
│       └── testfile3
└── proj-3
    └── file

你得到这个状态

On branch master

No commits yet

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

    .gitignore
    proj-1/
    proj-2/

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

在添加完所有内容后,您将获得

$ git add * .gitignore 

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   proj-1/src/srcfile1
        new file:   proj-1/src/srcfile2
        new file:   proj-1/src/srcfile3
        new file:   proj-1/src/subsrc/subsrcfile1
        new file:   proj-1/src/subsrc/subsrcfile2
        new file:   proj-1/src/subsrc/subsrcfile3
        new file:   proj-2/src/srcfile1
        new file:   proj-2/src/srcfile2
        new file:   proj-2/src/srcfile3
必须明确添加

.gitignore,因为shell不会展开*以包含隐藏文件。