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

Hg addremove в git

Мне действительно нужна эта команда в git

hg addremove

Итак, посмотрите на сценарий и посмотрите, как mercurial меня спасет здесь:

У меня был какой-то dir здесь var/htdocs/static/static. Я переместил файлы в неправильное место (с помощью git -mv). в любом случае... теперь я переместил несколько папок вручную:

mv static static2
mv static2/static ./

Возможно, я тоже здесь сменил некоторые файлы... и теперь все отлично... так что теперь git не знает, что случилось? Как он мог отслеживать движение файлов, не уведомляя его, как mercurial делает с addremove.

Например, теперь с меркуриальным я мог бы сделать:

hg addremove --similarity 80%

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

один парень в здесь имеет некоторые трюки для этого:

git add .
git ls-files --deleted | xargs git rm

но это похоже на CVS. вы удаляете файлы, добавляете файлы. как насчет сохранения истории файлов?

4b9b3361

Ответ 1

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

В вашем примере сценария просто скажите git о новых файлах: git add static и об удаленных файлах: git add -u static, и вы готовы к фиксации. Если вы совершили git status перед фиксацией, вы увидите, что он уже обнаружил переименование.

[Как уже упоминалось, git add -A - хороший ярлык, который просто добавляет все в рабочее дерево, включая новые и удаленные файлы; единственная причина использования более узких команд выше - это если вы хотите избежать добавления других изменений, которые происходят в рабочем дереве.]

Ответ 2

Git не отслеживает переименования через дополнительные метаданные, поэтому вы можете просто сделать git add -A с полной уверенностью, что вам не хватает метаданных.

В то время как Git отслеживает историю всего дерева, а не историю файлов, вы можете активировать свое обнаружение имени и копии после факта с помощью команд типа git log -M -C и git log --follow <file>.

Ответ 3

Короткий ответ. Команда, наиболее похожая на hg addremove в git:

git add -A

Oooorr...

git add --all