首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过通配符将某些文件添加到git中,而不添加与子目录中的parrern匹配的文件?

如何通过通配符将某些文件添加到git中,而不添加与子目录中的parrern匹配的文件?
EN

Stack Overflow用户
提问于 2022-01-01 08:48:38
回答 1查看 29关注 0票数 0

我使用git (在Windows上)对某些目录中的文件进行版本控制,在另一些目录中使用源代码控制。在某些目录中,我希望通过通配符添加某些文件,但不添加子目录中的文件,除非我指定了该子目录或该目录中的特定文件。

我无法通过资源管理器完成这一任务,因为它是几十个或数百个文件,我可能无法准确地选择我要寻找的文件(比如?e?g*.*),但其他文件却无法选择,所以我使用命令行(我已经使用git集成--因此,如果它只是特定的文件,我可以选择它们,然后右击并单击"git add",但是如果我必须手动选择文件,这是不可行的;因此我使用命令行和通配符选择)。

我不想使用.gitignore,因为可能有一些子目录,我想要一些文件,而不是其他,这可能意味着必须列出数百或数千个文件。而且,我使用的是多个回购程序,创建另一个.gitignore将非常繁琐,并且可能需要添加几十个或数百个子目录。我试过了

git ./A* /.a*

仅在该目录中添加以a或a开头的文件,但它将查找该目录中以A或a开头的每个文件和所有子目录。我只想用一种简单的方式说“只在这个目录中添加某些文件,没有子目录”,它可以在任何目录中工作,而不必在我想要恢复的每个目录/项目中设置、修改或维护一个.gitignore文件。

我是说,这是正常行为吗?当您指定* git时,假定这个目录和下面的所有内容?这看起来既荒谬又过分。从什么时候开始,命令会自动作用于子目录?这是Linux的东西吗?如果我用

rm a*

它会递归地搜索每个目录吗?我认为您必须使用开关(-s)对子目录进行操作。应该有一个简单的方法来说明这一点,但我在Git的文档中找不到它。

EN

回答 1

Stack Overflow用户

发布于 2022-01-01 16:46:01

您可以观察预期的行为:

如果您有一个名为dir的目录,则d*glob模式将在其扩展中包括dir,而git add dir将在dir下添加所有文件。

仅列出文件的一种方法是使用一个实用工具,它允许列出具有特定筛选器的名称,如GNU find

代码语言:javascript
运行
复制
find . -name 'A*' -type f -depth 1

将列出:

  • -type f文件only
  • -name A*,其名称仅以当前目录级别的A
  • -depth 1开头

然后可以使用xargs将其输出提供给git add

代码语言:javascript
运行
复制
find . -name 'A*' -type f -depth 1 | xargs git add

注意:如果您正在运行窗口,取决于您使用的shell,find可能会引用find windows utility,它不会执行相同的操作。

选择一种使用GNU find的方法--例如:使用git-bash或WSL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70547803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档