it-swarm.cn

仅添加未经跟踪的文件

我发现在Git中非常有用的命令之一是git add -u将所有但未跟踪的文件抛出到索引中。那有反过来了吗?在过去的几个月里,我经常发现自己处于这样一个位置:我交互式地为索引添加了一些更新,我希望在提交之前将所有未跟踪的文件添加到该索引中。

有没有办法将未跟踪文件添加到索引而不单独识别它们?我在帮助文档中没有看到任何明显的东西,但也许我错过了它?

谢谢。

135
Rob Wilkerson

使用git add -i很容易。输入a(用于“添加未跟踪”),然后输入*(用于“全部”),然后输入q(退出)并完成。

要使用单个命令执行此操作:echo -e "a\n*\nq\n"|git add -i

200
Mat

git ls-files -o --exclude-standard提供未跟踪的文件,因此您可以执行以下操作(或为其添加别名):

git add $(git ls-files -o --exclude-standard)
29
manojlds

您可以将其添加到〜/ .gitconfig文件中:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

然后,从命令行,运行:

git add-untracked
10
joshuadavey

不完全是你想要的,但我发现这非常有帮助:

git add -AN

将所有文件添加到索引,但没有其内容。现在未跟踪的文件就像跟踪它们一样。它们的内容将显示在git diff中,您可以使用git add -p以交互方式添加它们。

10
hasen

人们已经建议将git ls-files的输出传递给git add,但是如果文件名包含空格或者包含诸如*之类的全局字符,则会失败。

安全的方法是使用:

git ls-files -o --exclude-standard -z | xargs -0 git add

其中-z告诉git使用\0行终止符,-0告诉xargs相同。这种方法的唯一缺点是-0选项是非标准的,因此只有某些版本的xargs支持它。

9
Tom Fenech

git ls-files列出当前目录中的文件。如果要从树中的任何位置列出未跟踪的文件,这可能会更好:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

要在树中添加所有未跟踪的文件:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
5
pborenstein

我试过这个并且它有效:

git stash && git add . && git stash pop

git stash只会将所有修改后的跟踪文件放入单独的堆栈中,然后留下的文件是未跟踪的文件。然后通过执行git add .将根据需要暂存所有文件未跟踪文件。最后,通过执行git stash pop从堆栈中取回所有修改过的文件

3
Rohan Khude

如果您有数千个未跟踪的文件(呃,请不要问),那么git add -i在添加*时将无效。您将收到一条错误,指出Argument list too long

如果您也在Windows上(不要问#2 :-)并且需要使用PowerShell添加所有未跟踪的文件,则可以使用此命令:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
0
Simeon

这里有很多好的提示,但在Powershell内部,我无法让它发挥作用。

我是一名.NET开发人员,我们仍然主要使用Windows操作系统,因为我们没有使用.Net核心和跨平台这么多,所以我在Git的日常使用是在Windows环境中,Shell使用的更多是Powershell而不是Git bash。

可以遵循以下过程来创建别名函数,以便在Git存储库中添加未跟踪的文件。

在Powershell的$ profile文件中(如果它丢失了 - 你可以运行:New-Item $ Profile)

记事本$个人资料

现在添加这个Powershell方法:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

保存$ profile文件并将其重新加载到Powershell中。然后使用以下命令重新加载$ ​​profile文件: $简介

这类似于* nix环境中的源命令恕我直言。

所以下次你,如果你是开发人员在Windows中使用Powershell对抗Git repo并且想要包含未跟踪的文件,你可以运行:

AddUntracked-的Git

这遵循Powershell惯例,你有动词名词。

0
Tore Aurstad