代码之家  ›  专栏  ›  技术社区  ›  Eric O. Lebigot

Git可以提交新文件的“空版本”吗?

  •  14
  • Eric O. Lebigot  · 技术社区  · 14 年前

    Git可以提交一些文件的空版本吗?这里的例子是,我需要首先添加新的(未跟踪的)文件,并将其作为 空的 文件,以便将其内容标记为新文件并进行审阅(完整的未跟踪文件应 添加到索引中; git diff 应通过将文件与其提交的空版本进行比较来显示新添加的内容)。

    git add -N file… ,也就是说 file 索引中有空内容,但这只说明 文件 将添加 git commit 投诉文件尚未添加。问题是,当前的非空版本不是必须添加的,而是新文件的空版本。

    有办法吗?

    PS:这个问题是在一个自动将文件添加到Git存储库的程序上下文中提出的(我的程序遵循学生编写的代码)。未提交的代码是我尚未批准的代码。因此,学生创建的程序的启动状态应该是 空的 状态,即使我的程序刚刚在其主目录中找到一个新的非空程序;这是通过在Git存储库中自动提交任何新的空学生程序文件来处理的。因此,与上次提交的Git修订版相比,他们编写的新代码行显示为新添加的内容。

    1 回复  |  直到 14 年前
        1
  •  31
  •   Sven Marnach    14 年前

    老实说,我不太明白这对什么有用。我会尝试修复审查过程,而不是把历史弄乱。但如果你真的想这样做,以下是几种方法:

    1. 务实的方法:

      mv file out-of-way
      touch file
      git add file
      mv out-of-way file
      
    2. 瓷器方法:

      git add -N file
      git add -p file
      

      …当被问到是否应该加入单一的大块时,回答“不”。

    3. 管道方法:

      首先,确保对象数据库中存在空对象:

      git hash-object -w --stdin < /dev/null
      

      这将返回空blob(即 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 )您只能创建一次此对象。现在,您可以通过以下方式在索引中创建空文件:

      git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file