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

时间:2010-11-20 10:02:56

标签: git commit add

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

git add -N file…,其中file在索引中包含空内容,但这仅表示将添加file 和{{ 1}}抱怨该文件尚未添加。问题是当前的非空版本不是必须添加的,而只是新文件的空版本。

有办法做到这一点吗?

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

2 个答案:

答案 0 :(得分:31)

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

  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的SHA1(e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)。您只需创建一次此对象。现在,您可以通过

    在索引中创建空文件
    git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file
    

答案 1 :(得分:-2)

自动添加所有空文件和文件夹


强制添加所有文件

var result = uRecordFields.Select(x => new URecordFieldEmr
{
    Values = x.Values.Where(y => y.DaysOfWeek.Any(z => z == DayOfWeek.Sunday)).ToList(),
    Alias = x.Alias,
    Key = x.Key
}).Where(x => x.Values != null && x.Values.Count != 0).ToList();

您可以在每个空文件夹中自动添加.gitignore文件。

$ git add -Af

您可以在每个空文件夹中自动添加.gitkeep文件

$ find $PATH_TO_REPOSITORY -type d ! -path "*.git*" -empty -exec cp .gitignore '{}'/ \;