Обработка переименований файлов в git

Это гораздо более рудиментарно, но может сделать трюк:

remove_border ()

410
задан James Skemp 27 September 2017 в 13:50
поделиться

4 ответа

Для 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 , вероятно, не использует.

338
ответ дан 22 November 2019 в 23:22
поделиться

Вы не инсценировали результаты своего перемещения искателя. Я полагаю, если бы вы сделали перемещение через Finder, а затем сделали git add css / mobile.css; git rm css / iphone.css , git вычислит хэш нового файла и только тогда поймет, что хеши файлов совпадают (и, следовательно, это переименование).

3
ответ дан 22 November 2019 в 23:22
поделиться

Git распознает файл по содержимому, а не увидит его как новый неотслеживаемый файл

Вот где вы ошиблись.

Только после добавления файла, git узнает его из содержимого.

7
ответ дан 22 November 2019 в 23:22
поделиться

вам необходимо 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 - это не что иное, как сценарий-оболочка, который делает именно это: удаляет файл из индекса и добавляет его под другим именем

10
ответ дан 22 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: