git update-index --add --cacheinfo 100644 $(git hash-object -w /dev/null) newfile
git add --interactive newfile
簡単なデモ:
mkdir /tmp/demo
cd /tmp/demo
git init .
echo hello > newfile
git update-index --add --cacheinfo 100644 $(git hash-object -w /dev/null) newfile
- ヒント「空」のblobがgitオブジェクトデータベースにすでに存在していることが確実な場合は、
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
代わりにハッシュをハードコーディングできます。そんなことはお勧めしません_
- ヒント Windowsを使用している場合は、の
NUL:
代わりに使用できます/dev/null
。それ以外の場合は、次のようなものを使用しますecho -n '' | git hash-object --stdin -w
これで、インデックスにはnewfile
空のblob が含まれ、空のblobがまだ存在しない場合はオブジェクトデータベースに入力されています。
$ find .git/objects/ -type f
.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: newfile
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: newfile
#
$ git diff
diff --git a/newfile b/newfile
index e69de29..ce01362 100644
--- a/newfile
+++ b/newfile
@@ -0,0 +1 @@
+hello
これはまさにあなたが望むものでなければなりません。非常にインテリジェントなインデックス管理のためにvim逃亡プラグインをお勧めします(Better git add -pを参照してください?)
</shame>