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. вы удаляете файлы, добавляете файлы. как насчет сохранения истории файлов?
Ответы
Ответ 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