13

是否可以在 git 中开始跟踪文件而不将它们添加到索引中?

我有新文件,我想在 . 中生存git clean,但可能会在下一次提交之前更改。我现在只是将它们添加到索引中,然后在提交之前再次添加它们吗?

4

3 回答 3

17

似乎您正在寻找git add --intent-to-add(或git add -N)。从官方git add文档

-N
--intent-to-add

仅记录稍后将添加路径的事实。路径的条目被放置在没有内容的索引中。除其他外,这对于显示此类文件的未暂存内容git diff并使用git commit -a.

请参阅git add --intent-to-add 或 -N 做什么以及何时使用?问题以获取更多信息。

于 2017-06-08T13:37:53.760 回答
3

您可以使用 暂存文件git add,然后git reset在提交之前使用它们。

于 2012-04-18T15:52:42.540 回答
0

itaadd -N,“intent to add”,为了“开始在 Git 中跟踪文件而不添加到索引”)的问题是:

由于意图添加条目的实现细节,

  • 当前的“ git diff”(即没有树形或--cached参数)将显示 ita 文件中的更改,但它不会将该文件标记为新文件,
  • 而“ diff --cached”会将文件标记为新文件,同时将其内容显示为空。

Git 2.19(2018 年第三季度)改变了这一点;因为“ git diff”比较索引和工作树。
对于使用意图添加位添加的路径,该命令将其全部内容显示为已添加,但路径本身并未标记为新文件。
它们现在默认显示为新的。

请参阅Nguyễn Thái Ngọc Duy ( )的提交 cff5dc0提交 8fc8f05提交 0231ae7提交 ba4e356(2018 年 5 月 26 日) 。(由Junio C Hamano 合并 -- --提交 ac997db中,2018 年 6 月 25 日)pclouds
gitster

在 Git 2.19 之前:

$ git diff                      | $ diff --cached
--------------------------------|-------------------------------
 diff --git a/new b/new         | diff --git a/new b/new
 index e69de29..5ad28e2 100644  | new file mode 100644
 --- a/new                      | index 0000000..e69de29
 +++ b/new                      |
 @@ -0,0 +1 @@                  |
 +haha                          |

当前输出错误的一个证据是,git diff无法应用“”(带有 ita 条目)的输出,因为它假定在应用之前存在空文件。

打开--ita-invisible-in-indexcommit 425a28ecommit b42b451 Oct. 2016, Git 2.11.0)可以解决这个问题。结果是“新文件”行从“ git diff --cached”移动到“ git diff”。

$ git diff                      | $ diff --cached
--------------------------------|-------------------------------
 diff --git a/new b/new         |
 new file mode 100644           |
 index 0000000..5ad28e2         |
 --- /dev/null                  |
 +++ b/new                      |
 @@ -0,0 +1 @@                  |
 +haha                          |

此选项在默认情况下处于启用状态,git-status但我们需要在重命名检测代码中进行更多修复(提交 bc3dca0,2018 年 1 月,Git 2.17.0)。幸运的是,我们不需要为diff.cwt-status.c使用自定义的)中的重命名检测代码做任何其他事情。


在 Git 2.28(2020 年第三季度)中,“ git diff-files”被教导说标记为意图添加的路径是新文件,而不是从空 blob 修改。

请参阅Srinidhi Kaushik ( ) 的commit feea694(2020 年 6 月 20 日(由Junio C Hamano 合并 -- --提交 298d704中,2020 年 6 月 29 日)clickyotomy
gitster

diff-files: 将“ i-t-a”文件视为“ not-in-index

签字人:Srinidhi Kaushik

cmd_diff_files diff-files' command and related commands which call the function ()' 在将工作树与其进行比较时,将“意图添加”文件视为索引的一部分。
这之前在提交0231ae71d3diff:默认打开 --ita-invisible-in-index,2018-05-26)和425a28e0a4diff-lib:允许将 ita 条目视为“索引中尚不存在”,2016-10- 24) 默认打开选项--ita-invisible-in-index(在b42b451919 (" diff: add --ita-[in]visible-in-index", 2016-10-24, Git v2.11.0-rc0 -- merge ) 中引入)。

对于diff-files(并add -p因此)将 ita 文件显示为新文件,ita_invisible_in_index默认情况下也将在此处启用。


警告:如果您在 git diff-filter 中使用排除(小写)和包含(大写),请使用 Git 2.36 (Q2 2022)

于 2018-06-27T20:44:32.427 回答