2

假设我在 git 中有一个包含一堆文件和其他目录的目录。

如果我做

git init .
git add .

我会将包括目录在内的所有内容添加到我的 git 存储库中。但是,如果我只想添加当前目录中的文件(不递归遍历目录),有没有非手动的方法呢?

手动方法是使用另一个工具挑选文件并在这些文件上运行 git-add。

4

4 回答 4

1

一种选择是:

git add --interactive

这将允许您一个一个地选择文件。可能很繁重;但它可以让你跳过目录。你有这个:

find . -depth 1 -and ! -type d -exec git add {} \;

这是一个例子:

ebg@tsuki(26)$ find . -depth  1 -and ! -type d -print
./a
./b
ebg@tsuki(27)$ find . -depth  1 -and ! -type d -exec git add {} \;
ebg@tsuki(28)$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   a
#   new file:   b
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   c/
于 2013-06-07T20:40:50.187 回答
1

不幸的是,Git 没有内置的功能。不过,您可以使用 shell 循环轻松完成。假设您使用的是 bash,这将起作用:

#!/bin/bash

for f in `ls -A`; do
    if [ -f $f ]; then
        git add $f
    fi
done

这将添加当前目录中的所有文件。

请注意,与所有 bash 脚本一样,如果您只需要一次,则可以将其写在一行上:
for f in $(ls -A); do if [ -f $f ]; then git add $f; fi; done

这只是一个概念验证脚本,当然可以改进;例如,它可以先构造一个列表,然后git add在该列表上调用一次。

于 2013-06-07T20:41:11.727 回答
1

就像是

find . -maxdepth 1 -type f | xargs git add --

也许?

第一部分列出当前目录中的所有文件(但不在子目录中,由于-maxdepth),xargs将此列表作为参数附加到git add.

你也可以试试更健壮的

find . -maxdepth 1 -type f -exec git add -- \{\} \+

如果您的版本find支持它。(或替换\+\;,但这会运行得更慢。)

另请参阅:Bash:如何仅列出文件?

于 2013-06-07T20:41:40.277 回答
0

根据您的文件和目录的命名方式,总是有可靠的:

git add *.*
于 2013-06-07T20:52:22.280 回答