Can git commit empty versions of some files? The case in point is that I need new (untracked), non-empty files to first be added and committed as empty files, so as to
To be honest, I do not really understand what this is useful for. I would try to fix the review process instead of messing up the history. But if you really want to do this, here are several ways how:
The pragmatic approach:
mv file out-of-way
touch file
git add file
mv out-of-way file
The porcelain approach:
git add -N file
git add -p file
... and just answer "no" when asked whether the single hunk should be added. (Apparently this does not work anymore in 2019.)
The plumbing approach:
First, make sure an empty object exists in the object database:
git hash-object -w --stdin < /dev/null
This will return the SHA1 of an empty blob (which is e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
). You have to create this object only once. Now you can create empty files in the index by
git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file
Force add all files
$ git add -Af
You can automatically add a .gitignore file in every empty folder.
$ find $PATH_TO_REPOSITORY -type d ! -path "*.git*" -empty -exec cp .gitignore '{}'/ \;
You can automatically add a .gitkeep file in every empty folder.
$ find $PATH_TO_REPOSITORY -type d ! -path "*.git*" -empty -exec touch '{}'/.gitkeep \;