gitignore 除了重复的子目录之外的所有内容
gitignore everything except repeated sub-directory
我的目录结构如下:
./
├── proj-1
│ ├── README.md
│ ├── src/
│ └── test/
└── proj-2
├── README.md
├── src/
└── test/
如何只使用根目录中的一个 .gitignore
文件来忽略除 src/
目录之外的所有内容?
我试过:
*
!.gitignore
!/*/src/
!/*/src/*
但这似乎并没有在 运行 git status
.
之后获取我想要的目录
有什么建议吗?
您必须递归地取消忽略 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 不会扩展 *
以包含隐藏文件。
我的目录结构如下:
./
├── proj-1
│ ├── README.md
│ ├── src/
│ └── test/
└── proj-2
├── README.md
├── src/
└── test/
如何只使用根目录中的一个 .gitignore
文件来忽略除 src/
目录之外的所有内容?
我试过:
*
!.gitignore
!/*/src/
!/*/src/*
但这似乎并没有在 运行 git status
.
有什么建议吗?
您必须递归地取消忽略 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 不会扩展 *
以包含隐藏文件。