Почему git показывает «dev / null» в статусе после интерактивного добавления переименованного файла? - PullRequest
2 голосов
/ 07 декабря 2009

В моем выводе git status неожиданно появляется сообщение "dev / null" после интерактивного добавления исправления для файла, который был переименован. Мне интересно, ожидается ли это, и есть ли веские причины для такого поведения, или это может быть ошибкой.

Ниже приведена простая иллюстрация того, как воспроизвести это. В моем реальном сценарии это немного сложнее, и есть веская причина, почему я использую git add -p, но я смог свести его к этому минимальному примеру:

$ git init test
Initialized empty Git repository in /local_disk/tmp/test/.git/
$ cd test
$ echo "foo" > foo
$ git add foo
$ git commit -m 'Add foo'
[master (root-commit) 3643b5d] Add foo
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 foo
$ mv foo bar
$ git add -p
diff --git a/foo b/foo
index 257cc56..0000000
--- a/foo
+++ /dev/null
@@ -1 +0,0 @@
-foo
Stage this hunk [y,n,q,a,d,/,e,?]? y

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       new file:   dev/null
#       deleted:    foo
#
# Changed but not updated:
#   (use "git add/rm ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       deleted:    dev/null
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       bar

Что такое с "новым файлом: dev / null" и "удаленным файлом: dev / null"? Я ожидаю, что это приведет к точно так же, как если бы я сделал:

$ mv foo bar
$ git rm foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       deleted:    foo
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       bar

Я использую Git версии 1.6.5.5, а также воспроизвел ее в 1.6.5.4. Я не смог воспроизвести его в моей среде Cygwin с Git версии 1.6.1.2.

1 Ответ

1 голос
/ 07 декабря 2009

Как упоминает thenduks, вы не должны пытаться git add удалить файл. git add новый файл, git rm старый файл (или git mv old new для простого подхода). С другой стороны, git должен либо жаловаться на то, что вы делаете, либо не запутываться и пытаться добавить несуществующий файл dev / null.

Обновление
git add -p действительно является допустимым методом для удаления файлов, но похоже, что ошибка была введена в git apply при исправлении другой git apply ошибки .

Обновление
Я могу воспроизвести его на Linux с 1.6.1.2, поэтому может случиться так, что cygwin git отличается от обычного поведения. В этом случае ранее упомянутое исправление ошибки, возможно, не ввело это поведение, и рабочий git add -p может быть определенным для мерзавца cygwin. Я пытался разделить пополам, чтобы найти, где git add -p начал терпеть неудачу.

Обновление
Оказывается, это была скорее ошибка в интерактивном аспекте git add, для которого Джефф Кинг предложил патчей для.

...