Mercurial: удалить файл из всех наборов изменений - PullRequest
14 голосов
/ 24 августа 2010

Я понимаю, как удалить весь набор изменений из истории, но не ясно, как вместо этого удалить подмножество.

Например, как мне удалить все файлы DLL из существующего набора изменений, оставив исходный код в покое?

Ответы [ 2 ]

18 голосов
/ 24 августа 2010

Поскольку идентификаторы ревизий (например, a8d7641f ...) основаны на хэше набора изменений, на самом деле удалить подмножество набора изменений из истории невозможно.

Однако можно создать новое репо с параллельной историей, за исключением определенного набора файлов, используя расширение Convert . Вы будете конвертировать репозиторий Mercurial в репозиторий Mercurial, используя карту файлов, чтобы исключить ненужные файлы, добавив exclude s. Это создаст новый, не связанный репозиторий, что означает, что любые клоны, которые люди больше не смогут извлекать из него, будут вынуждены повторно клонировать из этого нового репо.

13 голосов
/ 24 марта 2014
  1. Убедитесь, что все ваши товарищи по команде отправили свои локальные изменения в центральное хранилище (если есть)
  2. Сделайте резервную копию вашего хранилища
  3. Создайте файл "map.txt" со следующимиcontent:
    # this filemap is used to exclude specific files
    exclude "subdir/filename1.ext"
    exclude "subdir/filename2.ext"
    exclude "subdir2"
  4. Запустите эту команду:
    hg convert --filemap map.txt c:/oldrepo c:/newrepo
    ПРИМЕЧАНИЕ: Вы должны использовать «косую черту» в путях, даже в окнах.
  5. Подождите и наберитесь терпения
  6. Теперь у вас есть новый репо на c:\newrepo, но без файлов

PS.В «верхнем» репо вы должны удалить все ревизий и , повторно подтолкнуть вашего нового репо.

PPS.На самом деле я написал сообщение в блоге об этом, в котором есть больше деталей (включая удаление изменений в Bitbucket и т. Д.

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