git可以提交新文件的"空版本"吗?

Eri*_*got 15 git commit add

git可以提交一些文件的空版本吗?相关的例子是,我需要先添加新的(未跟踪)文件,并承诺为文件,从而为他们的内容标记为新的,进行审查(完整的,未跟踪文件应该不会被添加到索引; git diff应该通过将文件与其提交的空版本进行比较来显示新添加的内容.

有一个git add -N file…,它file在索引file 中添加了一个空内容,但这只会说会添加,并git commit抱怨该文件尚未添加.问题是当前的非空版本不是必须添加的,而只是新文件的空版本.

有没有办法做到这一点?

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

Sve*_*ach 33

说实话,我真的不明白这对什么有用.我会尝试修复审核流程,而不是弄乱历史记录.但如果你真的想这样做,这里有几种方法:

  1. 务实的方法:

    mv file out-of-way
    touch file
    git add file
    mv out-of-way file
    
    Run Code Online (Sandbox Code Playgroud)
  2. 瓷器方法:

    git add -N file
    git add -p file
    
    Run Code Online (Sandbox Code Playgroud)

    ...当被问到是否应该添加单个大块时,只回答"否".

  3. 管道方法:

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

    git hash-object -w --stdin < /dev/null
    
    Run Code Online (Sandbox Code Playgroud)

    这将返回空blob的SHA1(即e69de29bb2d1d6434b8b29ae775ad8c2e48c5391).您只需创建一次此对象.现在,您可以在索引中创建空文件

    git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file
    
    Run Code Online (Sandbox Code Playgroud)

  • 瓷器的方法似乎在这里不起作用:git commit表示文件:未添加但错误:构建树木时出错,以及git stash中的类似错误。管道方法确实有效。 (2认同)