假设我在 git 中有一个包含一堆文件和其他目录的目录。
如果我做
git init .
git add .
我会将包括目录在内的所有内容添加到我的 git 存储库中。但是,如果我只想添加当前目录中的文件(不递归遍历目录),有没有非手动的方法呢?
手动方法是使用另一个工具挑选文件并在这些文件上运行 git-add。
假设我在 git 中有一个包含一堆文件和其他目录的目录。
如果我做
git init .
git add .
我会将包括目录在内的所有内容添加到我的 git 存储库中。但是,如果我只想添加当前目录中的文件(不递归遍历目录),有没有非手动的方法呢?
手动方法是使用另一个工具挑选文件并在这些文件上运行 git-add。
一种选择是:
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/
不幸的是,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
在该列表上调用一次。
就像是
find . -maxdepth 1 -type f | xargs git add --
也许?
第一部分列出当前目录中的所有文件(但不在子目录中,由于-maxdepth
),xargs
将此列表作为参数附加到git add
.
你也可以试试更健壮的
find . -maxdepth 1 -type f -exec git add -- \{\} \+
如果您的版本find
支持它。(或替换\+
为\;
,但这会运行得更慢。)
另请参阅:Bash:如何仅列出文件?
根据您的文件和目录的命名方式,总是有可靠的:
git add *.*