【发布时间】:2022-01-01 08:48:38
【问题描述】:
我正在使用 git(在 Windows 上)对某些目录中的文件进行版本控制,并在其他目录中进行源代码控制。在某些目录中,我想通过通配符添加某些文件,但不是子目录中的文件,除非我指定该子目录或该目录中的特定文件。
我无法通过资源管理器完成此操作,因为它有几十个或数百个文件,我可能无法准确选择我正在寻找的内容(如?e?g*.*)但不是其他人,所以我正在使用命令行(我已经安装了 git 集成,所以如果它只是某些文件,我可以将它们挑选出来,然后右键单击并单击“git add”,但如果我必须手动去选择,这将无法正常工作文件;因此我使用命令行和通配符选择。
我不想使用 .gitignore,因为可能有一些子目录我想要一些文件而不是其他文件,这可能意味着必须列出数百或数千个文件。此外,我正在使用多个存储库,创建另一个 .gitignore 并且可能必须添加数十或数百个子目录会很乏味。我试过了
git add ./A* /.a*
仅在此目录中添加以 A 或 a 开头的文件,但它会在此目录 和所有子目录 中查找以 A 或 a 开头的每个文件。我只是想要一种简单的方式来说“只在这个目录中添加某些文件而不是子目录”,它可以在任何目录中工作,而无需在每个目录中设置、修改或维护一个 .gitignore 文件/我要回购的项目。
我的意思是,这是正常行为吗?那当你指定 * git 时假定这个目录和下面的所有内容?这似乎是荒谬和过分的。从什么时候开始,命令会自动作用于子目录?这是Linux的事情吗?如果我使用
rm a*
它会递归搜索每个目录吗?我认为您必须使用开关(-s)来处理子目录。应该有一种简单的说法,但我在 Git 的文档中找不到。
【问题讨论】:
-
"当你指定 * git 时假定这个目录和下面的所有内容?" 不,不是
git它是git add。如果你给它传递一个目录,它会递归地添加所有文件和子目录。为避免这种情况,您必须仅将文件列为git add参数。学习 Linux 命令find,尤其是。它的参数-depth 1,它应该可以帮助你只列出文件。