我有以下目录结构:
./
├── proj-1
│ ├── README.md
│ ├── src/
│ └── test/
└── proj-2
├── README.md
├── src/
└── test/
如何在根目录中仅使用一个src/
文件忽略除.gitignore
目录之外的所有内容?
我试过了:
*
!.gitignore
!/*/src/
!/*/src/*
但是在运行git status
之后,似乎没有找到我想要的目录。
任何提示?
答案 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不会展开*
以包含隐藏文件。