Что делает тильду (~), символ действительно здесь [копируют]

Обновление : Этот процесс так распространен, что команда мерзавца сделала его намного более простым с новым инструментом, git subtree. Посмотрите здесь: Отсоединение (перемещение) подкаталог в отдельный репозиторий Мерзавца

Вы хотите клонировать свой репозиторий и затем использовать git filter-branch для маркировки всего кроме подкаталога, Вы хотите в своем новом repo быть собранными "мусор".

  1. Для клонирования локального репозитория:

    git clone /XYZ /ABC
    

    (Примечание: репозиторий будет клонирован с помощью жестких ссылок, но это не проблема, так как трудно связанные файлы не будут изменены в себе - будут созданы новые.)

  2. Теперь, давайте сохраним интересные ответвления, которые мы хотим переписать также и затем удалить источник, чтобы не продвигать там и удостоверяться, что на старые фиксации не сошлется источник:

    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
    
  3. Теперь Вы могли бы хотеть также удалить теги, которые не имеют никакого отношения с подпроектом; можно также сделать это позже, но Вы, возможно, должны были бы сократить свой repo снова. Я не сделал так и добрался WARNING: Ref 'refs/tags/v0.1' is unchanged для всех тегов (так как они были все не связаны с подпроектом); дополнительно, после удаления таких тегов больше пространства будет освобождено. По-видимому git filter-branch должен смочь переписать другие теги, но я не мог проверить это. Если Вы хотите удалить все теги, используйте git tag -l | xargs git tag -d.

  4. Затем ответвление фильтра использования и сброс для исключения других файлов, таким образом, они могут быть сокращены. Давайте также добавим --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
    
  5. Затем удаляют резервное копирование, повторно порет так пространство, может быть действительно исправлен (хотя теперь операция является разрушительной)

    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.

Редактирование: различные предложения из комментариев ниже были включены, чтобы удостовериться, например, что репозиторий на самом деле уменьшается (который не всегда имел место прежде).

7
задан Community 23 May 2017 в 12:22
поделиться

6 ответов

То есть деструктор . Он заботится о том, чтобы все ресурсы были освобождены после сборки мусора.

10
ответ дан 6 December 2019 в 11:50
поделиться

Реализует финализатор (метод Finalize) класса. Обычно вы не должны реализовывать финализатор.

Например, сделайте это для классов, которые содержат внешние неуправляемые ресурсы, но обязательно реализуйте IDisposable Pattern и в этом случае.

3
ответ дан 6 December 2019 в 11:50
поделиться

Как и в C ++, ~ ClassName является методом деструктора. Он вызывается в C #, когда рассматриваемый объект очищается сборщиком мусора. В отличие от C ++, где существует детерминированное время, когда вызывается деструктор, в C # нет способа предсказать, когда он будет вызван (или даже будет ли он вызван).

Вы, вероятно, ищете ] IDisposable , который обеспечивает гораздо лучший подход к этому.

3
ответ дан 6 December 2019 в 11:50
поделиться

Хорошо, я только что нашел ответ и не вижу, как удалить свой вопрос. он определяет деструктор класса

0
ответ дан 6 December 2019 в 11:50
поделиться

Я понятия не имею о C #, но судя по тому, что делает код, это выглядит как деконструктор, говорящий, что

  1. освобождает ресурс, на который ссылается handle
  2. set обращайтесь к - 0 , чтобы убедиться, что

будет как бы соответствовать понятию «не» ... :)

Я могу ошибаться ...

greetz

back2dos

0
ответ дан 6 December 2019 в 11:50
поделиться

Это Деструктор . Это дает вам неявный контроль над высвобождением ресурсов. То есть он вызывается сборщиком мусора . Если вам нужен явный контроль над высвобождением ресурсов, вы можете реализовать IDisposable Ознакомьтесь с Реализация финализации и удаления для очистки неуправляемых ресурсов . В Руководстве по проектированию каркаса также содержится дополнительная информация.

1
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: