394258190c
This adds "--intent-to-add" option to "git add". This is to let the system know that you will tell it the final contents to be staged later, iow, just be aware of the presense of the path with the type of the blob for now. It is implemented by staging an empty blob as the content. With this sequence: $ git reset --hard $ edit newfile $ git add -N newfile $ edit newfile oldfile $ git diff the diff will show all changes relative to the current commit. Then you can do: $ git commit -a ;# commit everything or $ git commit oldfile ;# only oldfile, newfile not yet added to pretend you are working with an index-free system like CVS. Signed-off-by: Junio C Hamano <gitster@pobox.com>
37 lines
786 B
Bash
Executable File
37 lines
786 B
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='Intent to add'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'intent to add' '
|
|
echo hello >file &&
|
|
echo hello >elif &&
|
|
git add -N file &&
|
|
git add elif
|
|
'
|
|
|
|
test_expect_success 'check result of "add -N"' '
|
|
git ls-files -s file >actual &&
|
|
empty=$(git hash-object --stdin </dev/null) &&
|
|
echo "100644 $empty 0 file" >expect &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'intent to add is just an ordinary empty blob' '
|
|
git add -u &&
|
|
git ls-files -s file >actual &&
|
|
git ls-files -s elif | sed -e "s/elif/file/" >expect &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'intent to add does not clobber existing paths' '
|
|
git add -N file elif &&
|
|
empty=$(git hash-object --stdin </dev/null) &&
|
|
git ls-files -s >actual &&
|
|
! grep "$empty" actual
|
|
'
|
|
|
|
test_done
|
|
|