Ответ 1
Это должно быть исправлено с помощью Git 2.5 (Q2 2015), то есть git commit
не будет пытаться включить новый файл, "предназначенный для добавления позже".
См. совершить d95d728 от Nguyễn Thái Ngọc Duy (pclouds
) (объединено в d0c692263)
diff-lib.c
: отрегулируйте положение записейi-t-a
вdiff
Проблема:
Записи, добавленные "
git add -N
" , являются напоминанием для пользователя, поэтому они не забывают добавлять их перед фиксацией. Эти записи появляются в индексе, даже если они не являются реальными.
Их присутствие в индексе приводит к запутанному "git status
" следующим образом:
On branch master
Changes to be committed:
new file: foo
Changes not staged for commit:
modified: foo
Если вы выполните "
git commit
", "foo
" не будет включен, хотя "status
" сообщает об этом как "to be committed
".
Решение:
Этот патч изменяет результат на
On branch master
Changes not staged for commit:
new file: foo
no changes added to commit
Другими словами:
- Относитесь к таким путям, которые "еще не добавлены в индекс, но Git уже знают о них";
- "
git diff HEAD
" и "git diff --cached HEAD
" не должны говорить о них, а- "
git diff
" должен показать их как новые файлы, которые еще не добавлены в индекс.
Обновление Q4 2016:
commit
: исправить пустое создание фиксации, когда нет изменений, кроме ita записей
(ita
или i-t-a
означает "намерение добавить" )
См. commit 2c49f7f, зафиксировать 018ec3c, commit b42b451, commit 425a28e (24 октября 2016 г.) Nguyễn Thái Ngọc Duy (pclouds
).
(объединено Junio C Hamano - gitster
- в commit 6503602, 27 октября 2016 г.
Когда новые индексы добавлялись к индексу "
git add -N
" , этого было достаточно, чтобы обойти проверку "git commit
", чтобы воздерживаться от создания пустой фиксации без "--allow-empty
".
Эта же логика не позволила "git status
" показать такой путь, как "new file
" в разделе "Changes not staged for commit
".
git diff
справочная страница теперь включает в себя:
--ita-invisible-in-index:
По умолчанию записи, добавленные "
git add -N
" , отображаются в виде существующего пустого файла в "git diff
" и новый файл в "git diff --cached
".
Этот параметр делает запись в виде нового файла в "git diff
" и не существует в "git diff --cached
".Этот параметр можно вернуть с помощью
--ita-visible-in-index
.Оба варианта являются экспериментальными и могут быть удалены в будущем.
Обновление Q1 2018 (Git 2.16.x/2.17), git status
снова улучшается.
"git status
" , после перемещения пути в рабочем дереве (следовательно,
он появляется "удален" ), а затем добавляется с опцией -N
(следовательно,
что "добавлено" ) обнаружило его как переименование, но не
правильно сообщать старые и новые пути.
См. commit 176ea74, commit 5134ccd, commit ea56f97, commit 98bc94e, commit 06dba2b, зафиксировать 6de5aaf (27 декабря 2017 г.) Nguyễn Thái Ngọc Duy (pclouds
).
Помощник: Игорь Джорджевич (boogisha
).
(слияние Junio C Hamano - gitster
- в commit bc3dca0, 23 января 2018 года)
Примечание: i-t-a
или ita
"предназначено для добавления".
wt-status.c
: переименовать рабочие тэгиДо 425a28e (diff-lib: разрешить записи ita как "еще не существует" в индексе "- 2016-10-24, Git 2.11.0-rc0) в индексе никогда нет" новых файлов ", что существенно отключает обнаружение переименования, потому что мы обнаруживаем только переименования, когда новый файл появляется в паре различий.
После этой фиксации запись i-t-a может появиться в виде нового файла в"
git diff-files
".
Но функция обратного вызова diff вwt-status.c
не обрабатывает этот случай и производит неправильный вывод состояния.