Git 忽略除一个文件扩展名之外的所有内容

问题描述 投票:0回答:3

我试图忽略除了

docker-compose.yml
文件之外的所有内容,无论它们在哪里:

- root
  - .git/
  - .gitignore
  - folderA
    - docker-compose.yml
  - folderB
    - .git/
    - data/
    - docker-compose.yml

在上面的目录示例中,git 唯一应该跟踪的是

docker-compose.yml
文件和
.gitignore
文件。

我尝试了以下.gitignore:

/*
!.gitignore
!docker-compose.yml

还有

/*
!.gitignore
!**docker-compose.yml

还有

/*
!.gitignore
!**/docker-compose.yml

还有

/*
!.gitignore
!/*/docker-compose.yml

我还尝试了上述选项,顶部仅使用

*
而不是
/*

所有这些都会导致仅跟踪 .gitignore 文件。

我可能错过了一些非常愚蠢和小但嘿嗬。预先感谢。

更新

我已经接近解决方案了:

*
!/.gitignore
!*/
!*/docker-compose.yml

现在已成功包含所有 docker-compose.yml 文件,但现在还包含子存储库和一些随机文件,例如

root/nextcloud/data/html/core/vendor/zxcvbn/LICENSE.txt

gitignore
3个回答
1
投票

如果您使用此功能,您可以忽略所有第三级子文件夹

/*/*/*

因此,按照您的示例结构,更新的包含文件将是根文件夹(第一级)中存在的所有文件以及文件夹“.git”、“folderA”和“folderB”(第二级)中存在的所有文件。同时,“folderB”内的文件夹 .git/ 和 data/ (第三级)将被忽略。如果“.git/”为空,你会得到:

- root
  - .gitignore
  - folderA
    - docker-compose.yml
  - folderB
    - docker-compose.yml

如果您还想排除除 docker-compose.yml 之外的所有其他文件,则需要排除所有扩展名,并仅包含 docker-compose.yml 和 gitignore,如下所示:

/*/*/*
*.*
!.gitignore
!docker-compose.yml

1
投票

您可以忽略所有

*

(就像你已经做过的那样)

现在您必须知道所有文件的完整路径,您不想忽略这些文件。该路径从

.gitignore
根开始,因此您的
root
文件夹是不必要的

更新的文件夹结构:

- .git/
- .gitignore
- folderA
  - docker-compose.yml
- folderB
  - .git/
  - data/
  - docker-compose.yml

作为目录结构的示例,您可以添加以下两个条目:

!folderA/docker-compose.yml
!folderB/docker-compose.yml

0
投票

似乎顺序在这里很重要,我能够完美地做到这一点:

*
*.*
!^.gitignore
!*/
/*/*/*
!*/docker-compose.yml

感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.