【问题标题】:Adding Only Untracked Files仅添加未跟踪的文件
【发布时间】:2011-11-18 18:51:12
【问题描述】:

我发现在 Git 中非常有用的命令之一是 git add -u 将除未跟踪文件之外的所有内容都放入索引中。有没有相反的情况?

例如一种将未跟踪的文件添加到索引中的方法而不单独识别它们

【问题讨论】:

  • 关于“将除未跟踪文件之外的所有内容都放入索引”,.gitignore 是专门为此设计的,而不是 git add -u
  • 另外,您是要求在删除所有当前跟踪的文件的同时添加未跟踪的文件,还是要求在当前跟踪的文件顶部添加未跟踪的文件 (跟踪所有内容)?

标签: git git-add


【解决方案1】:

git add -i 很容易。输入a(表示“添加未跟踪”),然后输入*(表示“全部”),然后输入q(退出),您就完成了。

使用单个命令即可:echo -e "a\n*\nq\n"|git add -i

【讨论】:

  • 我希望有一些更少的,嗯,交互式的,但它肯定比逐个文件更好。 :-)
  • echo -e "a\n*\nq\n"|git add -i
  • @Mat 谢谢你所以是完整的命令----> git add -i a * q ??
  • Argument list too long... 这么近!
  • 对我来说 git 2.21.0 是 git add -i 然后 4 添加未跟踪然后 * 为所有然后 q 退出
【解决方案2】:

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

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

【讨论】:

  • alias gau="git ls-files -o --exclude-standard | xargs -i git add '{}'" 适合我
  • git ls-files --help 非常有用:-o, --othersShow other (i.e. untracked) files in the output
  • 很好,但是我相信这只会为您提供当前目录的未跟踪文件。您需要使用上面 pborenstein 的答案来检索整个工作树的未跟踪文件列表。
【解决方案3】:

不完全是您要找的东西,但我发现这很有帮助:

git add -AN

将所有文件添加到索引中,但不包含它们的内容。未跟踪的文件现在的行为就像它们被跟踪一样。他们的内容将显示在git diff,然后您可以与git add -p交互添加。

【讨论】:

  • 这正是我一直在寻找的 - 也允许 git commit -p 浏览新文件。
【解决方案4】:

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

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

然后,从命令行运行:

git add-untracked

【讨论】:

  • 我喜欢这种方法,但它不处理文件名中的空格。
【解决方案5】:

人们建议将git ls-files 的输出通过管道传输到git add,但如果文件名包含空格或全局字符(例如*),这将失败。

安全的方法是使用:

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

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

【讨论】:

    【解决方案6】:

    我试过了,效果很好:

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

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

    从堆栈中取回所有修改过的文件

    【讨论】:

      【解决方案7】:

      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
      

      【讨论】:

        【解决方案8】:

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

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

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

        【讨论】:

        • 更精简的版本:git ls-files -o --exclude-standard | % { git add $_ }
        【解决方案9】:

        这里有很多好的技巧,但在 Powershell 中我无法让它工作。

        我是一个.NET开发者,我们主要还是使用Windows操作系统,因为我们没有太多使用.Net核心和跨平台,所以我日常使用Git是在Windows环境中,使用的shell是更常见的是 Powershell 而不是 Git bash。

        可以按照以下过程创建别名函数,用于在 Git 存储库中添加未跟踪的文件。

        在 Powershell 的 $profile 文件中(以防丢失 - 您可以运行: 新项目 $Profile)

        记事本 $Profile

        现在添加这个 Powershell 方法:

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

        保存 $profile 文件并将其重新加载到 Powershell。 然后使用以下命令重新加载您的 $profile 文件: . $个人资料

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

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

        AddUntracked-Git

        这遵循 Powershell 约定,其中您有动词-名词。

        【讨论】:

          【解决方案10】:

          混帐添加。 (添加该目录下的所有文件)

          git add -all (添加所有目录下的所有文件)

          git add -N 有助于列出稍后列出哪些......

          【讨论】:

          【解决方案11】:

          添加所有未跟踪的文件 git 命令是

          git add -A

          此外,如果您想获得有关各种可用选项的更多详细信息,您可以键入命令

          git 添加 -i

          而不是第一个命令,您将获得更多选项,包括添加所有未跟踪文件的选项,如下所示:

          $ git add -i 警告:LF 将被 README.txt 中的 CRLF 替换。这 文件将在您的工作目录中具有其原始行结尾。 警告: LF 将被 package.json 中的 CRLF 替换。

          * 命令 * 1:状态 2:更新 3:还原 4:添加未跟踪 5:补丁 6:差异 7:退出 8: 帮助现在>一个

          【讨论】:

            猜你喜欢
            • 2017-12-30
            • 1970-01-01
            • 2016-02-07
            • 2011-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-21
            相关资源
            最近更新 更多