【问题标题】:Start tracking a file in Git without adding to to the index开始在 Git 中跟踪文件而不添加到索引
【发布时间】:2012-04-30 02:01:45
【问题描述】:

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

我有新文件希望在git clean 中保留下来,但可能会在下一次提交之前更改。我现在是否只需将它们添加到索引中,然后在提交之前再次添加它们?

【问题讨论】:

    标签: git


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您似乎正在寻找git add --intent-to-add(或git add -N)。来自the official git add documentation

      -N
      --intent-to-add
      

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

      有关更多信息,请参阅What does git add --intent-to-add or -N do and when should it be used? 问题。

      【讨论】:

        【解决方案3】:

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

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

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

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

        参见Nguyễn Thái Ngọc Duy (pclouds)commit cff5dc0commit 8fc8f05commit 0231ae7commit ba4e356(2018 年 5 月 26 日)。
        (由 Junio C Hamano -- gitster -- 合并到 commit ac997db,2018 年 6 月 25 日)

        在 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 b42b4512016 年 10 月,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 中默认启用此选项,但我们需要更多修复 在重命名检测代码 (commit bc3dca0, Jan. 2018, Git 2.17.0)。幸运的是,我们不需要为diff.c 中的重命名检测代码做任何其他事情(wt-status.c 使用 定制一个)。


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

        参见Srinidhi Kaushik (clickyotomy)commit feea694(2020 年 6 月 20 日)。
        (由 Junio C Hamano -- gitster -- 合并于 commit 298d704,2020 年 6 月 29 日)

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

        签字人:Srinidhi Kaushik

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

        为了让diff-files(以及add -p)将 i-t-a 文件显示为新的,ita_invisible_in_index 也将在此处默认启用。

        【讨论】:

          猜你喜欢
          • 2017-12-30
          • 2017-01-16
          • 2023-04-01
          • 2015-05-06
          • 2012-12-29
          • 1970-01-01
          • 2011-03-17
          • 2016-02-07
          • 2014-07-20
          相关资源
          最近更新 更多