hg addremove в git - PullRequest
       0

hg addremove в git

26 голосов
/ 05 ноября 2011

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

hg addremove

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

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

mv static static2
mv static2/static ./

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

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

hg addremove --similarity 80%

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

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

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

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

Ответы [ 3 ]

25 голосов
/ 07 ноября 2011

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

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

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

9 голосов
/ 05 ноября 2011

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

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

6 голосов
/ 23 апреля 2014

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

git add -A

Oooorr ...

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