Обновление : Этот процесс так распространен, что команда мерзавца сделала его намного более простым с новым инструментом, git subtree
. Посмотрите здесь: Отсоединение (перемещение) подкаталог в отдельный репозиторий Мерзавца
Вы хотите клонировать свой репозиторий и затем использовать git filter-branch
для маркировки всего кроме подкаталога, Вы хотите в своем новом repo быть собранными "мусор".
Для клонирования локального репозитория:
git clone /XYZ /ABC
(Примечание: репозиторий будет клонирован с помощью жестких ссылок, но это не проблема, так как трудно связанные файлы не будут изменены в себе - будут созданы новые.)
Теперь, давайте сохраним интересные ответвления, которые мы хотим переписать также и затем удалить источник, чтобы не продвигать там и удостоверяться, что на старые фиксации не сошлется источник:
cd /ABC
for i in branch1 br2 br3; do git branch -t $i origin/$i; done
git remote rm origin
или для всех удаленных ответвлений:
cd /ABC
for i in $(git branch -r | sed "s/.*origin\///"); do git branch -t $i origin/$i; done
git remote rm origin
Теперь Вы могли бы хотеть также удалить теги, которые не имеют никакого отношения с подпроектом; можно также сделать это позже, но Вы, возможно, должны были бы сократить свой repo снова. Я не сделал так и добрался WARNING: Ref 'refs/tags/v0.1' is unchanged
для всех тегов (так как они были все не связаны с подпроектом); дополнительно, после удаления таких тегов больше пространства будет освобождено. По-видимому git filter-branch
должен смочь переписать другие теги, но я не мог проверить это. Если Вы хотите удалить все теги, используйте git tag -l | xargs git tag -d
.
Затем ответвление фильтра использования и сброс для исключения других файлов, таким образом, они могут быть сокращены. Давайте также добавим --tag-name-filter cat --prune-empty
для удаления пустых фиксаций, и переписать теги (обратите внимание, что это должно будет разделить их подпись):
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter ABC -- --all
или альтернативно, чтобы только переписать ГЛАВНОЕ ответвление и проигнорировать теги и другие ответвления:
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter ABC HEAD
Затем удаляют резервное копирование, повторно порет так пространство, может быть действительно исправлен (хотя теперь операция является разрушительной)
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
, и теперь у Вас есть локальный репозиторий мерзавца подкаталога ABC со всей его сохраненной историей.
Примечание: Для большей части использования, git filter-branch
должен действительно иметь добавленный параметр -- --all
. Да это действительно - - пространство - - all
. Это должно быть последними параметрами для команды. Как обнаруженный Matli, это сохраняет ответвления проекта и отмечает включенный в новый repo.
Редактирование: различные предложения из комментариев ниже были включены, чтобы удостовериться, например, что репозиторий на самом деле уменьшается (который не всегда имел место прежде).
То есть деструктор . Он заботится о том, чтобы все ресурсы были освобождены после сборки мусора.
Реализует финализатор (метод Finalize) класса. Обычно вы не должны реализовывать финализатор.
Например, сделайте это для классов, которые содержат внешние неуправляемые ресурсы, но обязательно реализуйте IDisposable Pattern и в этом случае.
Как и в C ++, ~ ClassName
является методом деструктора. Он вызывается в C #, когда рассматриваемый объект очищается сборщиком мусора. В отличие от C ++, где существует детерминированное время, когда вызывается деструктор, в C # нет способа предсказать, когда он будет вызван (или даже будет ли он вызван).
Вы, вероятно, ищете ] IDisposable
, который обеспечивает гораздо лучший подход к этому.
Хорошо, я только что нашел ответ и не вижу, как удалить свой вопрос. он определяет деструктор класса
Я понятия не имею о C #, но судя по тому, что делает код, это выглядит как деконструктор, говорящий, что
handle
обращайтесь к
- 0
, чтобы убедиться, что будет как бы соответствовать понятию «не» ... :)
Я могу ошибаться ...
greetz
back2dos
Это Деструктор . Это дает вам неявный контроль над высвобождением ресурсов. То есть он вызывается сборщиком мусора . Если вам нужен явный контроль над высвобождением ресурсов, вы можете реализовать IDisposable Ознакомьтесь с Реализация финализации и удаления для очистки неуправляемых ресурсов . В Руководстве по проектированию каркаса также содержится дополнительная информация.