Это гораздо более рудиментарно, но может сделать трюк:
remove_border ()
Для git mv
на странице руководства
указано
Индекс обновляется после успешного завершения, [… ]
Итак, сначала вам нужно обновить индекс самостоятельно
(используя git add mobile.css
).Однако
git status
по-прежнему будет показывать два разных файла
$ git status
# On branch master
warning: LF will be replaced by CRLF in index.html
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
# new file: mobile.css
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: iphone.css
#
Вы можете получить другой результат, запустив
git commit --dry-run -a
, в результате чего вы
ожидаете:
Tanascius@H181 /d/temp/blo (master)
$ git commit --dry-run -a
# On branch master
warning: LF will be replaced by CRLF in index.html
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
# renamed: iphone.css -> mobile.css
#
Я не могу точно сказать, почему мы видим эти различия
между git status
и
git commit - -dry-run -a
, но
вот подсказка от
Линуса :
мерзавцу на самом деле все равно обо всем "обнаружении переименования" внутри, и любые коммиты, которые вы сделали с переименованием, полностью не зависят от эвристики , которую мы затем используем для показа переименовывает.
Пробный прогон
использует настоящие механизмы переименования, тогда как
git status
, вероятно, не использует.
Вы не инсценировали результаты своего перемещения искателя. Я полагаю, если бы вы сделали перемещение через Finder, а затем сделали git add css / mobile.css; git rm css / iphone.css
, git вычислит хэш нового файла и только тогда поймет, что хеши файлов совпадают (и, следовательно, это переименование).
Git распознает файл по содержимому, а не увидит его как новый неотслеживаемый файл
Вот где вы ошиблись.
Только после добавления файла, git узнает его из содержимого.
вам необходимо git add css / mobile.css
новый файл и git rm css / iphone.css
, так что git знает об этом. тогда он покажет тот же результат в git status
, вы можете четко увидеть его в выходных данных состояния (новое имя файла):
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
и (старое имя):
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
я думаю, что позади сцены git mv
- это не что иное, как сценарий-оболочка, который делает именно это: удаляет файл из индекса и добавляет его под другим именем