.gitignore 保留一个文件

.gitignore to retain one file

我正在尝试创建一个 cronjob 来备份我在 git 中的所有 Jenkins 配置。在我的存储库中,我唯一需要跟踪的是每个 Jenkins 项目中的 config.xml。文件系统的结构类似于 ../jenkins/jobs/[PROJECTNAME]/config.xml.git 位于 jobs.

我不想明确忽略所有其他 folder/files,但只允许该位置的 config.xml。我提出了以下可行的解决方案:

*

!.gitignore
!config.xml
!*/

*/workspace
*/modules
/config-history
*/config-history
*/*/config-history
*/*/*/config-history
*/*/*/*/config-history
*/*/*/*/*/config-history
*/*/*/*/*/*/config-history
*/*/*/*/*/*/*/config-history 

不幸的是有很多项目,git add .需要一段时间。忽略 workspace,直接包含大多数文件,没有增加任何好处。

顺便说一句。直观而简短的方法根本行不通:

*
!.gitignore
!*/config.xml

有什么想法可以优化我的 .gitignore 或我的 git 添加而不列出所有文件吗?

既然这只是一项自动化任务,为什么不直接添加您需要的文件呢?替换

git add .

git add config.xml

和git将不必遍历整个项目树。

如果您想显示回购的状态,而不加载未跟踪的文件,请使用

git status -uno

编辑:当然,您必须位于包含要添加的 config.xml 的目录中;如果要在当前目录的子目录中添加所有 config.xml,请使用

git add */config.xml

好吧,你至少可以使用双星号来缩短你的 .gitignore:

# other stuff here
**/config-history

它将匹配任何路径中的config-history