动态 .gitignore 配置一遍又一遍地遵循相同的模式
Dynamic .gitignore configs to follow the same pattern over and over
git 这里
我的项目结构如下所示:
app/
README.md
.gitignore
src/
<all source code goes here>
docs/
<docs go here>
misc/
examples/
<examples go here>
fizzbuzz/
properties/
configs/
misc/fizzbuzz/properties/
目录很特别,希望能给它设置一些特殊的.gitignore
配置。在这个目录中我会有很多子目录,像这样:
app/
README.md
.gitignore
src/
<all source code goes here>
docs/
<docs go here>
misc/
examples/
<examples go here>
fizzbuzz/
properties/
abc/
def/
ghi/
...etc.
configs/
这些子目录中的每一个(properties/
)都将遵循相同的模式:
abc/
abc.properties
abc.txt
many many other files...
def/
def.properties
def.txt
many many other files...
ghi/
ghi.properties
ghi.txt
many many other files...
所以在每个子目录中会有:
- 一个属性文件,其名称与其所属的子目录的名称完全相同(
ghi.properties
在 properties/ghi/
下,等等);和
- 一个 txt 文件,其名称也与其所属的子目录的名称完全相同(
ghi.txt
在 properties/ghi/
下,等等);和
- 很多很多其他文件。有些是
ghi.*
(一个“ghi”文件,不是属性或 txt 类型)。有些将是 *.properties
或 *.txt
(其他属性文件或 txt 文件,而不是 ghi.properties
或 ghi.txt
等)。有些会到处命名(foobar.mp4
、flam.csv
等)。但这些文件的共同点是它们的格式不是“<parent-dir-name>.properties
”或“<parent-dir-name>.txt
”。
我正在尝试配置 .gitignore
以忽略这些子目录中的所有内容,除了与它们所在目录的名称匹配的属性和 txt 文件。
任何人都可以帮助我朝着正确的方向前进吗?
手工编写一个简单的 .gitignore 文件看起来很简单:
abc
!abc/abc.properties
!abc/abc.txt
def
!def/def.properties
!def/def.txt
# ...etc.
生成此类 .gitignore 文件的简短 Bash shell 脚本可能如下所示,但带有 basename
的可读性更高的版本可能会更清晰:
cd app/...../properties
for i in */; do printf "%s\n" "${i%/}" '!'"$i${i%/}."{properties,txt}; done > .gitignore
这样的脚本可以添加到 git-commit 挂钩或生成文件夹的自动化中。
git 这里
我的项目结构如下所示:
app/
README.md
.gitignore
src/
<all source code goes here>
docs/
<docs go here>
misc/
examples/
<examples go here>
fizzbuzz/
properties/
configs/
misc/fizzbuzz/properties/
目录很特别,希望能给它设置一些特殊的.gitignore
配置。在这个目录中我会有很多子目录,像这样:
app/
README.md
.gitignore
src/
<all source code goes here>
docs/
<docs go here>
misc/
examples/
<examples go here>
fizzbuzz/
properties/
abc/
def/
ghi/
...etc.
configs/
这些子目录中的每一个(properties/
)都将遵循相同的模式:
abc/
abc.properties
abc.txt
many many other files...
def/
def.properties
def.txt
many many other files...
ghi/
ghi.properties
ghi.txt
many many other files...
所以在每个子目录中会有:
- 一个属性文件,其名称与其所属的子目录的名称完全相同(
ghi.properties
在properties/ghi/
下,等等);和 - 一个 txt 文件,其名称也与其所属的子目录的名称完全相同(
ghi.txt
在properties/ghi/
下,等等);和 - 很多很多其他文件。有些是
ghi.*
(一个“ghi”文件,不是属性或 txt 类型)。有些将是*.properties
或*.txt
(其他属性文件或 txt 文件,而不是ghi.properties
或ghi.txt
等)。有些会到处命名(foobar.mp4
、flam.csv
等)。但这些文件的共同点是它们的格式不是“<parent-dir-name>.properties
”或“<parent-dir-name>.txt
”。
我正在尝试配置 .gitignore
以忽略这些子目录中的所有内容,除了与它们所在目录的名称匹配的属性和 txt 文件。
任何人都可以帮助我朝着正确的方向前进吗?
手工编写一个简单的 .gitignore 文件看起来很简单:
abc
!abc/abc.properties
!abc/abc.txt
def
!def/def.properties
!def/def.txt
# ...etc.
生成此类 .gitignore 文件的简短 Bash shell 脚本可能如下所示,但带有 basename
的可读性更高的版本可能会更清晰:
cd app/...../properties
for i in */; do printf "%s\n" "${i%/}" '!'"$i${i%/}."{properties,txt}; done > .gitignore
这样的脚本可以添加到 git-commit 挂钩或生成文件夹的自动化中。