Подтвердить что ты не робот

Изменение имен файлов в git repo

Как изменится имя файла git?

Будет ли обнаружено изменение имени файла в качестве модификации или будет "потерянный" файл, который необходимо удалить, и новый файл должен быть добавлен с помощью git add?

4b9b3361

Ответ 1

Он будет автоматически обнаружен как модификация, и "новый" файл будет добавлен в индекс, поэтому вам потребуется только одна команда:

$ git mv application.py newApplication.py
$ git status
# On branch buildServer
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    application.py -> newApplication.py

И коммит конечно..

Ответ 2

В каждом коммите git записывается состояние исходного дерева, а не есть ли переименование (или что-то еще), создавшее это состояние. Итак, если вы просто переименовываете файл обычно (а не с git mv), вывод git status будет примерно таким:

# On branch master
# 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:    foo.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   bar.txt
no changes added to commit (use "git add" and/or "git commit -a")

Если вы затем решите, что хотите записать состояние дерева с переименованным файлом, вы можете выполнить это изменение с помощью:

 git rm foo.txt
 git add bar.txt

... тогда git status покажет вам:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    foo.txt -> bar.txt

... и вы можете зафиксировать это с помощью git commit, как обычно:

git commit -m "Renamed foo.txt to bar.txt"

Важно помнить, что когда git сообщает вам, что файл был переименован при просмотре истории, это потому, что он решил, что переименование, должно быть, произошло, сравнивая состояние дерева с одним версия для другой - это не значит, что в истории была записана операция переименования.

Ответ 3

Как объяснили предыдущие ответы, Git выводит операцию переименования файла из изменения содержимого в исходном дереве. Чтобы записать операцию переименования, Git хранит операцию удаления и добавления, а не операцию переименования.

Как Magnus Skog указал git mv <filename1> <filename2> сообщает Git добавить контент в <filename1> to <filename2> и удалите <filename1> из дерева файлов.

Как Mark Longair объяснил, если вместо git mv вы используете команду оболочки mv <filename1> <filename2>, Git не будет обнаруживать операцию переименования, пока вы не вызовете git rm <filename1> и git add <filename2>.

Однако другой способ сообщить Git о переименовании операций с mv заключается в использовании git add --all. Эта команда указывает Git обнаруживать и готовить к фиксации всех файлов в вашей рабочей области, которые отличаются от файлов в репозитории, включая те, которые вы переименовали:

$ ls
a  b  c  d
$ mv d e
$ git status
# On branch master
# 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:    d
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   e
no changes added to commit (use "git add" and/or "git commit -a")
$ git add --all
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    d -> e
#

git add --all - очень удобный способ зафиксировать большое количество файлов, которые вы переименовали в своей рабочей области, например, с помощью инструмента script или массового переименования.

Ответ 4

git mv

Сохраняет историю и перемещает файл. Необходимо выполнить фиксацию после этого, чтобы репо было до даты.

git также будет собирать файлы, которые перемещаются в файловой системе при фиксации (несколько раз), а иногда появляется ложное положительное значение при удалении файла и создается новый (но похожий) файл.

Он также переместит файл в файловой системе (это можно переопределить). Поэтому не нужно делать git add

Ответ 5

'git mv old_file_name new_file_name'

произведет необходимые изменения, по умолчанию будет переименовано старое имя файла в более новое, как показано ниже,

[email protected] MINGW64 ~/Documents/GitHub/project-euler-solutions/python (development)
$ git status
On branch development
Your branch is up to date with 'origin/development'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        problem_2.py

nothing added to commit but untracked files present (use "git add" to track)

[email protected] MINGW64 ~/Documents/GitHub/project-euler-solutions/python (development)
$ git mv problem_1.py multiples_of_3_and_5.py

[email protected] MINGW64 ~/Documents/GitHub/project-euler-solutions/python (development)
$ git status
On branch development
Your branch is up to date with 'origin/development'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    problem_1.py -> multiples_of_3_and_5.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        problem_2.py