如何`git add`非递归?

blu*_*e10 15 svn git recursion

当我git add是一个文件夹时,整个内容和所有子文件夹都会自动暂存.如果文件夹包含我不想提交的子文件夹,我必须手动取消它们并将其添加到.gitignore之后.明显的不间断感觉就像我在这里做错了.

解决方案是.gitignore在添加之前编辑.但是在文件夹结构非常深/复杂的情况下,这有点棘手,因为很容易忘记忽略某些深层嵌套的文件/文件夹.

我正在寻找的是add像SVN一样的步骤--non-recursive,允许逐级添加文件夹而不需要暂存整个内容.但是我找不到这个功能git add.所以我想知道:这种非递归添加的推荐git工作流程是什么?

考虑到其他人有完全相反的问题:也许我上面描述的行为是我的git版本(1.9.1)/设置的问题?

Sve*_*ach 5

添加整个复杂的目录层次结构是一件不寻常的事情(当然,在普通的git开发工作流程中不会发生任何事情),因此git没有特殊的功能。您始终可以使用外部工具来组合要添加的文件列表,并将该列表提供给git add,例如,仅以非递归方式将文件添加到当前目录中,

git add $(find . -type f -maxdepth 1)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用

git ls-files --others --directory > file-list
Run Code Online (Sandbox Code Playgroud)

在当前目录中创建未跟踪文件的列表,然后在编辑器中对其进行编辑,以删除您不想添加的所有内容。(请确保将其删除file-list。)然后可以使用

git add $(cat file-list)
Run Code Online (Sandbox Code Playgroud)

将文件和目录添加到已编辑列表中。(您留下的目录仍将递归添加)。


Wal*_*ald 5

如果您只想添加目录中的文件而不添加任何其他子文件夹,您可以执行以下操作:

git add FolderName/\*.* 
Run Code Online (Sandbox Code Playgroud)

其中*.*表示来自每种文件类型的每个文件。文件夹没有扩展名,因此不会通过。

  • 如果文件夹确实有扩展名而文件缺少扩展名怎么办? (3认同)