запустить алгоритм сравнения файлов git - PullRequest
1 голос
/ 10 июля 2011

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

Краткое изложение того, что я набрал :

mkdir ./libs
git mv ./src-code ./libs/src-code #I might just have used mv
#a few changes
git status 
# nothing changed, huh?
# oh, I am ignoring all libs directories in .gitignore, 
#   I meant to only ignore the one at the root - fixed
git status
#   deleted:    ./src-code/...
# Untracked files:
#       ./libs/src-code

Ответы [ 3 ]

1 голос
/ 23 октября 2011

git mv на самом деле ничего не делает без него, потому что у git нет на самом деле понятия "ход" на большинстве уровней. По большей части ходы представлены в git как пара добавленный файл / удаленный файл, которую git может обнаружить и обрабатывает как ход при отображении различий или обновлении рабочего дерева. [Из твоего вопроса, похоже, ты уже знаешь это, но только для полноты ...]

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

Однако , как и при любых изменениях в вашем рабочем дереве, git на самом деле не «знает» об этом, пока вы не добавите измененную вещь в индекс с помощью git add.

Так что git mv A B - это просто вспомогательная команда, примерно эквивалентная mv A B; git add -u A; git add B; поскольку вы уже сделали mv, вы могли бы просто использовать git add таким же образом, чтобы сообщить git о новых и удаленных файлах. Если проще внести другие изменения в ваше рабочее дерево в индекс, можно просто ввести git add -A, который добавляет в индекс как новые файлы, так и изменения в рабочем дереве (включая удаленные файлы).

[Обычно это то, что я делаю: mv A B; ... больше изменений ... ; git add -A; git commit ...]

────────
Это отличается от многих других систем управления исходным кодом, которые могут иметь явное понятие ходов, которые хранятся в коммитах и ​​т. Д.

1 голос
/ 10 июля 2011

Когда у меня возникает эта проблема, это потому, что я mv ed вместо git mv ed. Попробуйте просто mv вернуть их обратно, затем git mv указать их там, где вы хотите.

0 голосов
/ 10 июля 2011

git mv довольно излишнее решение. Просто git add libs/src-code, а затем git commit -a. git обнаружит переименование.

Тем не менее, людям, как правило, лучше, если вы переименуете свой коммит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...