我使用git (在Windows上)对某些目录中的文件进行版本控制,在另一些目录中使用源代码控制。在某些目录中,我希望通过通配符添加某些文件,但不添加子目录中的文件,除非我指定了该子目录或该目录中的特定文件。
我无法通过资源管理器完成这一任务,因为它是几十个或数百个文件,我可能无法准确地选择我要寻找的文件(比如?e?g*.*),但其他文件却无法选择,所以我使用命令行(我已经使用git集成--因此,如果它只是特定的文件,我可以选择它们,然后右击并单击"git add",但是如果我必须手动选择文件,这是不可行的;因此我使用命令行和通配符选择)。
我不想使用.gitignore,因为可能有一些子目录,我想要一些文件,而不是其他,这可能意味着必须列出数百或数千个文件。而且,我使用的是多个回购程序,创建另一个.gitignore将非常繁琐,并且可能需要添加几十个或数百个子目录。我试过了
git ./A* /.a*
仅在该目录中添加以a或a开头的文件,但它将查找该目录中以A或a开头的每个文件和所有子目录。我只想用一种简单的方式说“只在这个目录中添加某些文件,没有子目录”,它可以在任何目录中工作,而不必在我想要恢复的每个目录/项目中设置、修改或维护一个.gitignore文件。
我是说,这是正常行为吗?当您指定* git时,假定这个目录和下面的所有内容?这看起来既荒谬又过分。从什么时候开始,命令会自动作用于子目录?这是Linux的东西吗?如果我用
rm a*
它会递归地搜索每个目录吗?我认为您必须使用开关(-s)对子目录进行操作。应该有一个简单的方法来说明这一点,但我在Git的文档中找不到它。
发布于 2022-01-01 08:46:01
您可以观察预期的行为:
如果您有一个名为dir
的目录,则d*
glob模式将在其扩展中包括dir
,而git add dir
将在dir
下添加所有文件。
仅列出文件的一种方法是使用一个实用工具,它允许列出具有特定筛选器的名称,如GNU find
:
find . -name 'A*' -type f -depth 1
将列出:
-type f
文件only-name A*
,其名称仅以当前目录级别的A
-depth 1
开头然后可以使用xargs
将其输出提供给git add
:
find . -name 'A*' -type f -depth 1 | xargs git add
注意:如果您正在运行窗口,取决于您使用的shell,find
可能会引用find
windows utility,它不会执行相同的操作。
选择一种使用GNU find
的方法--例如:使用git-bash
或WSL。
https://stackoverflow.com/questions/70547803
复制相似问题