Mercurial: удалить файл из всех наборов изменений - программирование
Подтвердить что ты не робот

Mercurial: удалить файл из всех наборов изменений

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

PS. В "верхнем" репо вам нужно удалить все changeets и повторно нажать ваше новое репо.

ПФС. Я на самом деле написал сообщение в блоге об этом, которое содержит более подробную информацию (включая снятие изменений в Bitbucket и т.д.