АнглийскийФранцузскийИспанский

Значок OnWorks

reposurgeon - онлайн в облаке

Запустите reposurgeon в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда reposurgeon, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


репохирург - хирургические операции на репозиториях

СИНТАКСИС


хирург [команду...]

ОПИСАНИЕ


Цель хирург состоит в том, чтобы разрешить рискованные операции, которые VCSes (контроль версий
системы) не хотят позволять вам делать это, например (а) редактировать прошлые комментарии и метаданные, (б)
исключение коммитов, (c) объединение и разделение коммитов, (d) удаление файлов и поддеревьев
из истории репо, (e) слияние или прививка двух или более репо, и (f) разделение репо на
two, разрезав ссылку родитель-потомок, сохранив структуру ветвей обоих дочерних репозиториев.

Первоначальная мотивация для хирург должен был очистить артефакты, созданные репозиторием
конверсии. Предполагалось, что у этого инструмента также будут приложения, когда код должен быть
быть удалены из репозиториев по юридическим или политическим причинам.

Хранить хирург простой и гибкий, обычно не имеет собственного репозитория
чтение и письмо. Вместо этого он полагается на возможность синтаксического анализа и выдачи команды
потоки, созданные git-fast-export и читаемые git-fast-import. Это означает, что это может быть
используется в любой системе контроля версий, которая имеет утилиты быстрого экспорта и быстрого импорта.
Формат потока git-import также неявно определяет общий язык примитивов.
операции для хирург говорить.

Полностью поддерживаемые системы (те, для которых хирург может читать и писать репозитории)
включают git, hg, bzr, svn, darcs, RCS и SRC. Полный список с зависимостями и
технические примечания, тип предпочитать до хирург незамедлительный.

Запись в файловые системы RCS и SRC осуществляется через RCS-быстрый импорт(1) и имеет
некоторые серьезные ограничения, потому что эти системы не могут представить все метаданные в
поток git-fast-export. Обратитесь к документации этого инструмента для получения подробной информации и частичного
обходные пути.

Написание репозиториев Subversion также имеет некоторые существенные ограничения, обсуждаемые в
раздел по работе с Subversion.

Файлы репозитория ископаемых можно прочитать с помощью --format = ископаемое вариант читать
команда и записана с --format = ископаемое вариант записывать. Шаблоны игнорирования
не переведено ни в одну из сторон.

CVS поддерживается только для чтения, но не для записи. Для CVS, хирург должен запускаться изнутри
каталог репозитория.

Инструкции по прагматике преобразования репозитория см. В ДВС Миграция КАК[1].

БЕЗОПАСНОСТЬ ПРЕДУПРЕЖДЕНИЯ


хирург достаточно острый инструмент, чтобы порезать вас. Старайтесь никогда не писать
репозиторий находится в действительно несогласованном состоянии и будет завершен с сообщением об ошибке
вместо того, чтобы продолжать, когда его внутренние структуры данных запутались. Однако есть
много вещей, которые вы можете сделать с ним - например, изменить сохраненные временные метки фиксации, чтобы они не
дольше соответствовать последовательности фиксации - это может вызвать хаос после того, как вы закончите.
Действуйте осторожно и проверьте свою работу.

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

См. Также примечания по системным вопросам в разделе «ОГРАНИЧЕНИЯ.
И ГАРАНТИИ ».

РАБОТА


Программа может работать в одном из двух режимов, либо как интерактивный интерпретатор команд.
или в пакетном режиме для выполнения команд, заданных в качестве аргументов в хирург вызов
линия. Единственные различия между этими режимами заключаются в том, что (1) интерактивный режим начинается с
включение опции 'verbose 1', (2) в пакетном режиме все ошибки (включая обычные
исправимые ошибки в синтаксисе набора выбора) являются фатальными, и (3) каждый аргумент командной строки
начинающиеся с «-» убрали это (что, в частности, означает, что --help и
--version будет работать должным образом). Также в интерактивном режиме Ctrl-P и Ctrl-N будут
доступен для прокрутки истории команд, а завершение ключевых слов команды по табуляции
доступен.

Поток git-fast-import состоит из последовательности команд, которые должны выполняться в
указанная последовательность построения репо; чтобы избежать путаницы с хирург команды мы будем
обращайтесь к командам потока как События в этой документации. Эти события неявно
пронумерованы от 1 и выше. Большинство команд требуют указания последовательности событий.
числа так хирург будет знать, какие события изменить или удалить.

Для получения всех подробностей о типах событий и семантике см. git-быстрый импорт(1) справочная страница;
остальная часть этого абзаца - быстрое начало для нетерпеливых. Большинство событий в потоке
совершает описание ревизий репозитория; эти группы вместе под единым
изменить комментарий на один или несколько файловые операции (файловые операции), которые обычно указывают на капли который
являются состояниями ревизий отдельных файлов. Fileop также может быть операцией удаления
указывает на то, что указанный ранее существующий файл был удален как часть версии
совершить; есть еще пара других менее важных типов файловых упоров.

Команды для хирург состоят из ключевого слова команды, которому иногда предшествует выбор
set, иногда за которым следуют аргументы, разделенные пробелами. Часто можно опустить
аргумент selection-set и по умолчанию используется что-то разумное.

Вот несколько мотивирующих примеров. Команды будут объяснены более подробно после
описание синтаксиса выбора.

: 15 редактировать ;; редактировать объект, связанный с меткой: 15

редактировать ;; редактировать все редактируемые объекты

29..71 список ;; список сводный указатель событий 29..71

236 .. $ list ;; Список событий с 236 до последнего

<# 523> осмотреть ;; Найдите фиксацию # 523; они пронумерованы
;; 1-origin из начала репозитория.

<2317> осмотреть ;; Ищите тег с именем 2317, фиксация подсказки
;; ветки с именем 2317 или фиксации с устаревшим идентификатором
;; 2317. Осмотрите, что найдено. Простой номер
;; вероятно, устаревший идентификатор, унаследованный от Subversion
;; номер ревизии.

/ regression / list ;; перечислить все коммиты и теги с комментариями или
;; заголовки коммиттера или заголовки авторов, содержащие
;; строка "регресс"

1 ..: 97 & = T delete ;; удалить теги с события 1 до отметки 97

[Makefile] inspect ;; Проверьте все коммиты с помощью файла, коснувшись Makefile
;; и все капли, указанные в файле
;; касаясь Makefile.

: 46 подсказок ;; Отобразите подсказку ветки, которой принадлежит коммит: 46.

@dsc (: 55) список ;; Показать все коммиты с отслеживанием происхождения до: 55

@min ([. gitignore]) удалить .gitignore удалить
;; Удалите первый файл .gitignore в репо.

ВЫБОР СИНТАКСИС
Синтаксис спецификации набора выбора - это мини-язык, ориентированный на выражения. Большинство
основным термином в этом языке является местоположение. Следующие виды примитивных локаций:
при поддержке:

номера событий
Простой числовой литерал интерпретируется как порядковый номер события с одним источником.

маркировка
Числовой литерал, которому предшествует двоеточие, интерпретируется как знак; увидеть поток импорта
форматная документация для объяснения семантики знаков.

имена тегов и веток
Базовое имя ветки (включая ветки в пространстве имен refs / tags) относится к ее
чаевые совершить. Имя тега эквивалентно его метке (самому тегу, а не
коммит, на который он ссылается). Расположение тегов и веток заключено в скобки <> (угол
скобки), чтобы отличать их от ключевых слов команды.

устаревшие идентификаторы
Если содержимое квадратных скобок (<>) не соответствует имени тега или ветки,
Затем интерпретатор ищет устаревшие идентификаторы коммитов. Это особенно полезно, когда вы
импортировали дамп Subversion; это означает, что сделанные из него коммиты могут быть отнесены к
по их соответствующим номерам ревизий Subversion.

цифры фиксации
Числовой литерал в квадратных скобках имени (<>), которому предшествует #, интерпретируется как 1-источник
порядковый номер фиксации.

$
Относится к последнему событию.

Их можно сгруппировать в наборы следующим образом:

диапазоны
Диапазон представляет собой два местоположения, разделенных знаком "..", и представляет собой набор событий, начинающихся с
слева и заканчивая справа (включительно).

списки
Допускаются списки местоположений и диапазонов, разделенные запятыми, с очевидным значением.

Есть еще несколько способов создания наборов событий:

наборы видимости
Набор видимости - это выражение, определяющее набор типов событий. Он будет состоять из
начальный знак равенства, за которым следуют печатные буквы. Это типовые буквы:

┌──┬───────────────────────────┬──────────────────── ───────
│B │ капли │ Выбор по умолчанию │
│ │ │ наборы исключают капли; они │
│ │ │ нужно манипулировать │
│ │ │ через коммиты они │
│ │ │ прилагаются. │
├──┼───────────────────────────┼──────────────────── ───────
│C │ совершает │ │
├──┼───────────────────────────┼──────────────────── ───────
│D │ коммиты all-delete │ Это артефакты │
│ │ │ произведено некоторыми более старыми │
│ │ │ преобразование репозитория │
│ │ инструменты. │
├──┼───────────────────────────┼──────────────────── ───────
│H │ головка (кончик ветки) │ │
│ │ совершает │ │
├──┼───────────────────────────┼──────────────────── ───────
│O │ сирота (без родителей) │ │
│ │ совершает │ │
├──┼───────────────────────────┼──────────────────── ───────
│U │ фиксируется с уточнениями как │ │
│ │ родители │ │
├──┼───────────────────────────┼──────────────────── ───────
│Z │ фиксируется без файловых операций │ │
├──┼───────────────────────────┼──────────────────── ───────
│M │ merge (несколько родителей) │ │
│ │ совершает │ │
├──┼───────────────────────────┼──────────────────── ───────
│F │ вилка (многодетная) │ │
│ │ совершает │ │
├──┼───────────────────────────┼──────────────────── ───────
│L │ совершает с нечистым │ │
│ │ многострочные комментарии │ │
│ │ (без разделительного │ │
│ │ пустая строка после │ │
│ │ сначала) │ │
├──┼───────────────────────────┼──────────────────── ───────
│I │ совершает, для которого │ │
│ │ метаданные не могут быть │ │
│ │ декодируется в UTF-8 │ │
├──┼───────────────────────────┼──────────────────── ───────
│T │ теги │ │
├──┼───────────────────────────┼──────────────────── ───────
│R │ сбрасывает │ │
├──┼───────────────────────────┼──────────────────── ───────
│P │ Passthrough │ Все типы событий просто │
│ │ │ прошел, │
│ │ │ включая комментарии, │
│ │ │ прогресс команды и │
│ │ │ контрольно-пропускной пункт команды. │
├──┼───────────────────────────┼──────────────────── ───────
│N │ Устаревшие идентификаторы │ Любая строка, соответствующая │
│ │ │ cookie (устаревший идентификатор) │
│ │ │ формат. │
└──┴───────────────────────────┴──────────────────── ───────

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

┌──────────────┬──────────────────────────────────
напишитеинтерпретация
├──────────────┼──────────────────────────────────
│ имя тега │ аннотированный тег с этим именем │
├──────────────┼──────────────────────────────────
│ имя ветки │ фиксация кончика ветки │
├──────────────┼──────────────────────────────────
│ устаревший идентификатор │ зафиксировать с этим устаревшим идентификатором │
├──────────────┼──────────────────────────────────
│ присвоенное имя │ имя, приравненное к выделению │
│ │ назначить │
└──────────────┴──────────────────────────────────
Обратите внимание: если аннотированный тег и ветка имеют одинаковое имя foo, решит
к тегу, а не к фиксации кончика ветки.

марки с датами и действиями
Отметка даты или действия в угловых скобках разрешает выборку всех подходящих
совершает.

┌────────────────────────────────┬────────────────── ───────────────
напишитеинтерпретация
├────────────────────────────────┼────────────────── ───────────────
│ Метка времени RFC3339 │ зафиксировать или пометить этим │
│ │ время / дата │
├────────────────────────────────┼────────────────── ───────────────
│ штамп действия (отметка времени! Электронная почта) │ коммиты или теги с этим │
│ │ отметка времени и автор (или │
│ │ коммиттер, если нет автора). │
├────────────────────────────────┼────────────────── ───────────────
│ гггг-мм-дд часть RFC3339 │ все коммиты и теги с этим │
│ отметка времени │ дата │
└────────────────────────────────┴────────────────── ───────────────
Чтобы уточнить соответствие к одной фиксации, используйте суффикс индекса с 1 исходной точкой, разделенный символом '#'.
Таким образом, «<2000-02-06T09: 35: 10Z>» может соответствовать нескольким коммитам, но
«<2000-02-06T09: 35: 10Z # 2>» соответствует только второму в наборе.

текстовый поиск
Выражение текстового поиска - это регулярное выражение Python, окруженное косой чертой.
(чтобы вставить в него косую черту, используйте escape-строку Python, например \ x2f).

Текстовый поиск обычно сопоставляется с полями комментариев коммитов и аннотированных
теги, или против их имен авторов / коммиттеров, или против имен тегов; так же
текст сквозных объектов.

Объем текстового поиска можно изменить с помощью квалификационных букв после завершающего
слэш. Это следующие:

┌───────┬───────────────────────────────────
письмоинтерпретация
├───────┼────────────────────────────────────
│ имя автора в коммите │
├───────┼────────────────────────────────────
│ b │ имя ветки в коммите; также │
│ │ соответствует каплям, на которые ссылается │
│ │ фиксирует соответствующие ветки, │
│ │ и теги, указывающие на фиксацию │
│ │ на ямочном ремонте веток. │
├───────┼────────────────────────────────────
│ c │ текст комментария коммита или тега │
├───────┼────────────────────────────────────
│ r │ зафиксировать ссылку в теге или │
│ │ сброс │
├───────┼────────────────────────────────────
│ p │ текст в сквозном режиме │
├───────┼────────────────────────────────────
│ т │ теггер в теге │
├───────┼────────────────────────────────────
│ n │ имя тега │
├───────┼────────────────────────────────────
│ B │ содержимое blob │
└───────┴───────────────────────────────────
Несколько квалификационных букв могут добавить больше областей поиска.

(Квалификатор «b» заменяет синтаксис ветвления в более ранних версиях хирург.)

пути
«Выражение пути», заключенное в квадратные скобки, разрешает набор всех коммитов и
капли, связанные с путем, совпадающим с заданным выражением. Само выражение пути
либо литерал пути, либо регулярное выражение, окруженное косой чертой. Незамедлительно после
в конце / регулярного выражения пути вы можете поместить любое количество следующих символов
которые действуют как флаги: 'a', 'c', 'D', "M ',' R ',' C ',' N '.

По умолчанию путь связан с коммитом, если последний имеет файловую вершину, которая касается этого коммита.
путь к файлу - модифицирует, изменяет его, удаляет, что удаляет, переименовывает и копирует
использовать его как источник или цель. Когда используется флаг 'c', значение меняется:
пути, связанные с фиксацией, становятся всеми путями, которые будут присутствовать в проверке для
это коммит.

Литерал пути соответствует фиксации тогда и только тогда, когда литерал пути является точно одним из
пути, связанные с фиксацией (операции с префиксом или суффиксом не выполняются). В частности
литерал пути не будет совпадать, если он соответствует каталогу в выбранном репозитории.

Регулярное выражение соответствует фиксации, если оно соответствует любому пути, связанному с фиксацией.
где угодно на пути. Вы можете использовать '^' или '$', если хотите, чтобы выражение соответствовало только
в начале или в конце пути. Когда используется флаг 'a', выражение пути
выбирает коммиты, каждый путь которых соответствует регулярному выражению. Это не всегда
подмножество коммитов выбрано без флага 'a', потому что оно также выбирает коммиты с
нет связанных путей (например, пустые коммиты, удаления и коммиты с пустыми деревьями). если ты
хотите избежать этого, вы можете использовать, например, '[/ regex /] & [/ regex / a]'.

Флаги 'D', "M ',' R ',' C ',' N 'ограничивают проверку соответствия соответствующей файловой опцией.
типы. Обратите внимание, что это означает, что добиться совпадения «а» легче (не сложнее). Эти
no-iops при использовании с 'c'.

Путь или литерал соответствует BLOB-объекту, если он соответствует любому пути, указанному в
модификация fileop, относящаяся к этому блобу. Чтобы выбрать полностью совпадающие капли или
сопоставление коммитов, составьте выражение пути с помощью = B или = C.

Если вам нужно вставить "[^ /]" в регулярное выражение (например, чтобы выразить "все
символы, но косая черта ") вы можете использовать escape-последовательность Python, например \ x2f.

вызовы функций
Язык выражений назвал специальные функции. Последовательность именованной функции
- это «@», за которым следует имя функции, за которым следует аргумент в круглых скобках. В настоящее время
определены следующие функции:

┌─────┬───────────────────────────────────
имяинтерпретация
├─────┼───────────────────────────────────
│min │ минимальный член выборки │
│ │ набор │
├─────┼───────────────────────────────────
│max │ максимальный член выборки │
│ │ набор │
├─────┼───────────────────────────────────
│amp │ непустой набор выбора становится │
│ │ все объекты, пустое множество │
│ │ возвращается пустым │
├─────┼───────────────────────────────────
│par │ все родители коммитов в │
│ │ набор аргументов │
├─────┼───────────────────────────────────
│chn │ все дочерние элементы коммитов в │
│ │ набор аргументов │
├─────┼───────────────────────────────────
│dsc │ все коммиты произошли от │
│ │ набор аргументов (набор аргументов │
│ │ в комплекте) │
├─────┼───────────────────────────────────
│anc │ все коммитят, кого аргумент │
│ │ множество происходит от (аргумент │
│ │ в комплекте) │
├─────┼───────────────────────────────────
│pre │ события перед набором аргументов; │
│ │ пусто, если набор аргументов │
│ │ включает первое событие. │
├─────┼───────────────────────────────────
│suc │ события после набора аргументов; │
│ │ пусто, если набор аргументов │
│ │ включает последнее событие. │
└─────┴───────────────────────────────────

Выражения множества можно комбинировать с операторами | а также &; это, соответственно, множество
союз и пересечение. | имеет более низкий приоритет, чем пересечение, но вы можете использовать
круглые скобки '(' и ')' для группировки выражений в случае неоднозначности (заменяет
фигурные скобки, используемые в старых версиях синтаксиса).

Любая операция установки может сопровождаться знаком "?" для добавления соседей и референтов членов набора.
Это расширяет набор, чтобы включить в него родителей и потомков всех коммитов в наборе, и
ссылки любых тегов и сбросов в наборе. Каждая ссылка на большой двоичный объект в наборе
заменены всеми относящимися к нему коммитами. '?' можно повторить, чтобы продлить
глубина соседства.

Установите отрицание с префиксом ~; он имеет более высокий приоритет, чем & и | но ниже чем?

ИМПОРТИРОВАТЬ И ЭКСПОРТ
хирург может содержать несколько состояний репозитория в ядре. У каждого есть имя. В любом случае
время, один может быть выбран для редактирования. Команды в этой группе импортируют репозитории, экспортируют
их, а также управлять основным списком и выбором.

читать [--format = ископаемое] [каталог|-|<входной файл]
С аргументом имени каталога эта команда пытается прочитать содержимое
репозиторий в любой поддерживаемой системе контроля версий в этом каталоге; читать без
arguments делает это в текущем каталоге. Если вывод перенаправляется в простой файл,
он будет прочитан как поток быстрого импорта или файл дампа Subversion. С аргументом
«-», эта команда читает поток быстрого импорта или файл дампа Subversion из стандартного
ввод (это будет полезно в фильтрах, построенных с аргументами командной строки).

Если содержимое является потоком быстрого импорта, любое свойство "cvs-revision" в фиксации
считается разделенным новой строкой списком файлов cookie ревизий CVS, указывающих на фиксацию,
и используется для справочного подъема.

Если содержимое представляет собой поток быстрого импорта, любое свойство "legacy-id" при фиксации используется.
быть устаревшим токеном идентификатора, указывающим на фиксацию и используемым для подъема ссылок.

Если место чтения - репозиторий git и содержит файл .git / cvsauthors (например,
остается на месте мерзавец cvsimport -A) этот файл будет прочитан, как если бы он был
дано Авторы читать команда.

Если местом чтения является каталог, а в его подкаталоге репозитория есть файл с именем
legacy-map, этот файл будет прочитан так, как если бы он был передан в устаревшую команду чтения.

Если местом чтения является файл и --format = ископаемое используется, файл
интерпретируется как хранилище ископаемых.

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

Примечание: эта команда не принимает набор выбора.

записывать [--legacy] [--format = ископаемое] [--noincremental] [--callout] [> Outfile|-]
Выгрузить выбранные события в виде потока быстрого импорта, представляющего редактируемый репозиторий; в
набор по умолчанию - все события. Куда делать дамп - это стандартный вывод, если есть
нет аргумента, или аргумент - '-', или цель перенаправления вывода.

В качестве альтернативы, если перенаправления нет и аргумент называет каталог,
репозиторий перестраивается в этот каталог, при этом любой выбранный набор игнорируется; если
этот целевой каталог не пуст, его содержимое копируется в каталог для сохранения.

Если местом записи является файл, а --format = ископаемое используется, файл записывается
в формате репозитория ископаемых.

Для --наследие вариант, Legacy-ID каждой фиксации добавляется к ее фиксации
комментарий во время записи. Эта опция в основном полезна для отладки края преобразования.
случаи.

Если вы укажете набор частичного выбора, так что некоторые коммиты включены, но их
родителей нет, выходные данные будут включать дополнительные файлы cookie дампа для каждой ветки с
источник за пределами набора выбора, непосредственно перед первой ссылкой на эту ветвь в
фиксация. Файл cookie инкрементального дампа выглядит как "refs / Heads / foo ^ 0" и является ключом к
загрузчики export-stream, что ветвь должна быть приклеена к кончику уже существующего
одноименная ветка. В - без увеличения опция подавляет такое поведение.

Когда вы указываете частичный набор выбора, включая объект фиксации, принудительно
включение каждого большого двоичного объекта, на который он ссылается, и каждого тега, который ссылается на него.

Указание частичного выбора может вызвать ситуацию, в которой некоторые родительские отметки в
слияния не соответствуют коммитам, присутствующим в дампе. Когда это произойдет и
--вызывать была указана опция, код записи заменяет метку слияния выноской,
штамп действия родительского коммита; в противном случае родительский знак опускается. Импортеры
не сработает при чтении дампа потока с выносками; он предназначен для использования
Трансплантат команда.

Указание набора выбора записи с пробелами в нем разрешено, но вряд ли приведет к
хорошие результаты при загрузке импортером.

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

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

укажите [переименовать]
Выберите именованное репо, с которым будете работать. Имя репо - обычно базовое имя.
каталога или файла, из которого он был загружен, но репозитории, загруженные со стандартного ввода,
"безымянный". хирург добавит суффикс, устраняющий неоднозначность, если было несколько
читает из того же источника.

Без аргументов перечисляет имена текущих сохраненных репозиториев и их загрузку.
раз. Второй столбец - это «*» для текущего выбранного репозитория, «-» для других.

падение [переименовать]
Отбросьте репо, названное аргументом, из списка репохирургов, освободив память, используемую для
его метаданные и удаление блобов на диске. Без аргументов отбрасывает текущий выбранный
Сделки РЕПО.

переименовать переименовать
Переименовать выбранное в данный момент репо; требует аргумента. Не сделаю, если есть
уже один под новым именем.

ВОССТАНАВЛИВАЕТ IN МЕСТО
хирург может восстановить измененный репозиторий на месте. Файлы без отслеживания обычно сохраняются
и восстанавливается при извлечении содержимого нового репозитория (но см.
документация по команде «сохранить» для предостережения).

перестраивать [каталог]
Восстановить репозиторий из состояния, принадлежащего хирург. Эта команда не принимает
набор выбора.

Единственный аргумент, если он присутствует, указывает целевой каталог, в котором следует выполнять
перестроить; если репозиторий был прочитан из каталога репо (а не из git-import
stream), по умолчанию используется этот каталог. Если целевой каталог непустой, его
содержимое копируется в каталог для сохранения. Файлы и каталоги в репозитории
Список сохранения копируются обратно из каталога резервных копий после восстановления репо. В
список сохранения по умолчанию зависит от типа репозитория и может отображаться с
Статистика команда.

If хирург имеет непустую устаревшую карту, она будет записана в файл с именем
legacy-map в подкаталоге репозитория, как будто с помощью устаревшей команды записи. (Этот
обычно будет иметь место для преобразований Subversion и CVS.)

сохранять [файл ...]
Добавить (предположительно неотслеживаемые) файлы или каталоги в список путей репо, которые будут
восстанавливается из каталога резервных копий после перестраивать. Каждый аргумент, если таковой имеется,
интерпретируется как путь. После этого отображается текущий список сохранений.

Эту функцию необходимо использовать только в том случае, если в вашей системе контроля версий отсутствует
команда для вывода списка файлов под контролем версий. В системах с такой командой (которая
include git и hg), все файлы, которые не находятся ни в одном каталоге точек репозитория
ни в режиме reposurgeon временные каталоги не сохраняются автоматически.

несохранить [файл ...]
Удалите (предположительно неотслеживаемые) файлы или каталоги в список путей репо, которые будут
восстанавливается из каталога резервных копий после перестраивать. Каждый аргумент, если таковой имеется,
интерпретируется как путь. После этого отображается текущий список сохранений.

ИНФОРМАЦИЯ И ДОКЛАДЫ
Команды в этой группе сообщают информацию о выбранном репозитории.

Вывод этих команд может быть индивидуально перенаправлен в именованный выходной файл. Где
указанном в синтаксисе, вы можете префикс имени выходного файла с помощью «>» и дать его как
следующий аргумент. Если вы используете «>>», файл открывается для добавления, а не для записи.

список [>Outfile]
Это основная команда для определения событий, которые вы хотите изменить. В нем перечислены
фиксируется в выборе, установленном порядковым номером события со сводной информацией. В
первый столбец - это необработанные номера событий, второй - метка времени по местному времени. Если
репозиторий имеет устаревшие идентификаторы, они будут отображаться в третьем столбце. Ведущий
часть комментария следует.

печать [>Outfile]
Альтернативная форма листинга, отображающая полные отметки о действиях, которые можно использовать в качестве ссылок в
выбор. Поддерживает> перенаправление.

тип [>Outfile]
Отобразите имена кончиков веток, связанных с коммитами в наборе выбора. Эти будут
не обязательно совпадать с полями их веток (которые часто будут именами тегов, если
репо содержит аннотированные или облегченные теги).

Если фиксация находится на вершине ветки, ее вершиной является имя ее ветки. Если у него только один ребенок,
его наконечник - это наконечник ребенка. Если у него несколько детей, то если есть ребенок с
совпадающее название ветки его кончик - это кончик ребенка. В противном случае эта функция выдает
исправимая ошибка.

имеют теги [>Outfile]
Отображение тегов и сбросов: три поля, номер события, тип и имя. Ветвь
Коммиты советов, связанные с тегами, также отображаются с полем типа «фиксация».
Поддерживает> перенаправление.

Статистика [репо-имя...] [>Outfile]
Статистика размера отчетов и информация о методах импорта / экспорта для именованных репозиториев,
или без аргументов текущий выбранный репозиторий.

считать [>Outfile]
Сообщите количество элементов в наборе выбора. По умолчанию все, что указано в
выбранное в настоящее время репо. Поддерживает> перенаправление.

осмотреть [>Outfile]
Выгрузите поток быстрого импорта, представляющий выбранные события, в стандартный вывод. Так же, как
запись, за исключением (1) индикатор выполнения отключен, и (2) есть идентифицирующий
заголовок перед дампом каждого события.

график [>Outfile]
Создайте визуализацию графа фиксации на языке разметки DOT, используемом
набор инструментов graphviz. Это может быть подано в качестве входных данных в основную программу рендеринга graphviz.
dot(1), что даст видимое изображение. Поддерживает> перенаправление.

Вы можете найти такой сценарий полезным:

график $ 1> / tmp / foo $$
точка оболочки

Вы, конечно, можете заменить его на свой любимый просмотрщик изображений.

Размеры [>Outfile]
Распечатать отчет об объеме данных по филиалу; принимает набор выбора, по умолчанию все
События. Цифры указывают на размер несжатых BLOB-объектов, коммитов и комментариев к тегам, а также
другие строки метаданных (большой двоичный объект считается каждый раз, когда на него указывает фиксация).

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

Поддерживает> перенаправление.

ЛИНТЕР [>Outfile]
Найдите конфигурации DAG и метаданных, которые могут указывать на проблему. В настоящее время проверяет
для: (1) удалений в средней ветке, (2) отключенных коммитов, (3) без родительских коммитов, (4)
наличие нескольких корней, (5) идентификаторы коммиттера и автора, которые не выглядят правильно сформированными
как идентификаторы DVCS, (6) несколько дочерних ссылок с идентичными метками веток, идущих от
та же фиксация, (7) конфликты времени и метки действия.

Поддерживаются варианты создания только частичных отчетов; "lint --options" или "lint -?"
перечисляет их.

Параметры и выходной формат этой команды нестабильны; они могут измениться без
обратите внимание, как добавляются дополнительные проверки работоспособности.

ХИРУРГИЧЕСКИЙ ОПЕРАЦИИ
Это операции, на поддержку которых рассчитан остальной хирург.

сквош [политика ...]
Объединяйте или удаляйте коммиты в выбранном наборе событий. Выбор по умолчанию установлен для
эта команда пуста. Не влияет на события, кроме коммитов, если не указано --delete
политика выбрана; см. обсуждение команды «удалить».

Обычно, когда коммит сдавлен, его список файловых операций (и любой связанный с ним большой двоичный объект)
ссылки) либо добавляются в начало списка операций каждого из
потомков коммита или добавляются к списку операций каждого коммита.
родители. Затем дочерние элементы удаленного коммита удаляют его из родительского набора и
его родители добавили в свой родительский набор.

По умолчанию происходит сдвиг вперед с изменением дочерних элементов; но посмотрите список политик
модификаторы ниже, чтобы узнать, как это изменить.

Предупреждение
Легко ошибиться в пределах команды сквоша, запутывая и
разрушительные результаты. Остерегайтесь думать, что вы можете раздавить выбранный набор для слияния
все коммиты, кроме последней, в последнюю; что вы на самом деле будете делать, так это
объединить их все в первую фиксацию после выбранный набор.
Обычно любой тег, указывающий на комбинированную фиксацию, также будет перемещен вперед. Но смотри
список модификаторов политики ниже, чтобы узнать, как это изменить.

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

После канонизации список файловых операций может по-прежнему содержать несколько M
операции с одним и тем же файлом. Обычно инструмент выдает предупреждение, когда это происходит, но
не пытается решить эту проблему.

Следующие модификаторы изменяют эти политики:

--удалять
Просто отбрасывает все файловые операции и теги, связанные с удаленными фиксациями.

- слиться
Отменить все операции M (и связанные с ними BLOB-объекты), кроме последней.

--отталкивать
Добавляйте fileops к родителям, а не к детям.

--продвигать
Приготовьте филеопы детям. Это значение по умолчанию; может быть указан в лифте
скрипт для ясности о намерениях.

--tagforward
С модификатором tagforward любой тег в удаленной фиксации продвигается вперед в
первый ребенок, а не быть удаленным. Это значение по умолчанию; может быть
указано для ясности.

--tagback
С модификатором "--tagback" любой тег в удаленной фиксации сдвигается назад на
первый родитель, а не удаляется.

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

--жаловаться
Противоположность тишине. Может быть указан для ясности.

Согласно любой из этих политик, кроме «--delete», удаление фиксации, у которой есть дочерние элементы.
не отменяет изменения, сделанные этим коммитом, так как они все еще будут присутствовать в
капли, прикрепленные к версиям после окончания набора для удаления. Все, что делает удаление
когда у фиксации есть дочерние элементы, теряется информация метаданных о том, когда и кем
эти изменения действительно были внесены; после удаления любые такие изменения будут отнесены
первым не удаленным потомкам удаленных коммитов. Ожидается, что это
Команда будет полезна в основном для удаления коммитов, механически сгенерированных
конвертеры репозитория, такие как cvs2svn.

удалять [политика ...]
Удалить выбранный набор событий. Набор по умолчанию для этой команды пуст.
В наборе коммитов это эквивалентно сквошу с флагом --delete. Это
безоговорочно удаляет теги, сбрасывает и передает; капли можно удалить только как
побочный эффект удаления каждого коммита, который на них указывает.

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

Если репо было названо 'foo', вы обычно получаете два репозитория с именем 'foo-early'.
и 'foo-late' (события опций и функций в начале раннего сегмента будут
дублируется на начало позднего.). Но если график фиксации будет
остаются подключенными через другой путь после разреза, поведение меняется. В этом
в случае, если родитель и потомок находились в одной ветке qux, сегменты ветки
переименованы в qux-early и qux-late, но репо не разделено.

EXPUNGE [дорожка | / regexp /] ...
Удалять файлы из выбранной части истории репо; по умолчанию весь
история. Аргументами этой команды могут быть пути или регулярные выражения Python.
совпадающие пути (регулярные выражения должны быть помечены знаком //).

Все операции изменения файла (M) и удаления (D) с участием совпадающего файла в
выбранный набор событий отключается от репо и помещается в набор для удаления.
За переименованием следуют, когда инструмент продвигается вперед в наборе выбора; каждый запускает
предупреждение. Если выбранный файл является целью копии (C), копия будет удалена и
появилось предупреждающее сообщение. Если выбранный файл является источником копирования, цель копирования будет
добавлен в список удаляемых путей и выдано предупреждение.

После удаления файлов любые коммиты без оставшихся файловых операций
будут удалены, и все теги, указывающие на них. Фиксируется с указанием удаленных файлов
как внутри, так и за пределами набора путей не удаляются, а клонируются в набор для удаления.

Набор для снятия не выбрасывается. Он собран в новый репозиторий имени
добавлен старый с суффиксом "-expunges". Таким образом, эту команду можно использовать для вырезания
репозиторий на разделы по совпадению пути к файлу.

пометить [- канонизировать] [--tipdeletes] [--tagify-слияния]
Найдите пустые коммиты и превратите их в теги. Принимает дополнительный набор выбора
аргумент по умолчанию для всех коммитов. Для каждого коммита в выбранном наборе превратите его в
тег с тем же сообщением и информацией об авторе, если в нем нет файловых опор. По умолчанию
коммиты слияния не рассматриваются, даже если у них нет файловых команд (таким образом, нет дерева
различия с их первым родителем). Чтобы изменить это, используйте --tagify-слияния опцию.

Имя сгенерированного тега будет 'emptycommit-идент', где идент генерируется
из устаревшего идентификатора удаленной фиксации, или из его метки, или из его индекса в
репозиторий, с суффиксом значения, если необходимо.

Для - канонизировать, tagify старается сначала обнаружить тривиальные коммиты
гарантируя, что все файловые операции выбранных коммитов будут иметь реальный эффект, когда
обработано методом fast-import.

Для --tipdeletes, tagify также учитывает кончики веток только с удалением всех файловых ошибок
быть кандидатами на пометку. Соответствующие теги получают имена формы
'tipdelete-название ветви'вместо значения по умолчанию' emptycommit-идент'.

Для --tagify-слияния, tagify также помечает коммиты слияния без файловых операций.
Когда это будет сделано, ссылка слияния переместится на родительский объект yagified коммита.

сливаться [--отлаживать}|- журнал изменений] [таймфаз]
Просканируйте выбранный набор на наличие запусков коммитов с одинаковыми комментариями, близкими друг к другу
со временем (это обычная форма рубцовых тканей при повышающих преобразованиях репозиториев от более старых
файловые системы контроля версий). Объедините эти клики, удалив все, кроме
последняя фиксация по порядку; файловые операции из удаленных коммитов продвигаются к этому
последний

Необязательный второй аргумент, если он присутствует, - это максимальное временное разделение в секундах; в
по умолчанию 90 секунд.

По умолчанию для этой команды установлено значение = C, все фиксируются. Иногда вы можете
хотите ограничить его, например, чтобы избежать объединения несвязанных клик "*** empty
сообщение журнала *** "фиксируется из CVS лифтов.

С параметром --debug показывать сообщения о несоответствиях.

С параметром --changelog любой коммит с комментарием, содержащим строку 'empty
сообщение журнала '(например, генерируемое CVS) и содержащее ровно одну файловую операцию
изменение пути, заканчивающегося в журнале изменений, обрабатывается особым образом. Такие коммиты ChangeLog
считается совпадающим с любым предшествующим коммитом по содержанию и сливается с ним, если
коммиттер совпадает, и разделение коммитов достаточно мало. Эта опция обрабатывает
соглашение, используемое в проектах Free Software Foundation.

раскол {at | by} пункт
Первый аргумент должен быть местом фиксации; второй - предлог
который указывает, какой метод разделения использовать. Если предлог - «в», то
Третий аргумент должен быть целочисленным индексом с единицей происхождения файловой операции в пределах
совершить. Если это 'by', то третий аргумент должен быть путевым именем, чтобы быть
сопоставление по префиксу, сначала выполняется сопоставление имени пути).

Фиксация копируется и вставляется в новую позицию в последовательности событий,
немедленно следует за собой; дубликат становится потомком оригинала, и
заменяет его как родительский для потомков оригинала. Метаданные фиксации дублируются; в
Затем знак новой фиксации изменяется с добавлением 'bis' в качестве суффикса.

Наконец, некоторые файловые операции - начиная с той, которая соответствует или проиндексирована разбиением.
аргумент - перемещаются из исходного коммита в новый. Юридические индексы
равны 2-n, где n - количество файловых операций в исходной фиксации.

{D путь | M химическая завивка отметка путь | R источник цель C источник цель}
Из указанной фиксации добавьте указанную файловую команду.

Чтобы операция D была действительной, должна быть операция M для пути в
совершить происхождение. Чтобы операция M была действительной, часть 'perm' должна быть токеном
оканчивается на 755 или 644, а метка должна относиться к blob-объекту, предшествующему фиксации.
место нахождения. Чтобы операция R или C была действительной, должна быть операция M для
источник в происхождении коммита.

удаление [индекс | путь | удалений] [в совершать]
Из указанной фиксации удалите указанную файловую команду. Операция должна быть одной из (а)
ключевое слово «удаляет», (б) путь к файлу, (в) путь к файлу, которому предшествует набор типов операций (некоторые
подмножество букв DMRCN), или (d) числовой индекс с 1 исходной точкой. Ключевое слово «удаляет»
выбирает все файлы D в фиксации; остальные выбирают по одному.

Если присутствует предложение «to», удаленная операция добавляется к фиксации, указанной параметром
следующий одноэлементный набор выбора. Эта опция не может сочетаться с «удаляет».

Обратите внимание, что эта команда не пытается очистить капли, даже если удаленный файл
может быть единственной ссылкой на них. Это поведение может измениться в будущем выпуске.

капля
Создайте каплю в метке: 1 после перенумерации других меток, начиная с: 2. Данные взяты
из stdin, который может быть здесь-доком. Это можно использовать с командой добавления для исправления
синтетические данные в репозиторий.

перенумеровать
Изменить нумерацию меток в репозитории с: 1 до: куда это счет
последняя отметка. На всякий случай, если импортер позаботится о порядке маркировки или пробелах в
последовательность.

почтовый ящик_out [>Outfile]
Создайте файл почтового ящика сообщений в формате RFC822, представляющий содержимое
метаданные репозитория. Принимает набор выбора; члены набора кроме коммитов,
аннотированные теги и сквозные операции игнорируются (то есть, в настоящее время, капли и сбросы).

Выходные данные этой команды при желании могут быть перенаправлены в именованный выходной файл.
Приставьте к имени файла префикс «>» и укажите его в качестве следующего аргумента.

Может иметь параметр --filter, за которым следует = и регулярное выражение, заключенное в /. Если
это дано, излучаются только заголовки с соответствующими им именами. В этом контексте
имя заголовка включает в себя конечное двоеточие.

почтовый ящик_в [<вводить] [--измененный >Outfile]
Принять файл почтового ящика сообщений в формате RFC822, представляющий содержимое
метаданные в выбранных коммитах и ​​аннотированных тегах. Не требует выбора. Если есть
аргумент, который будет взят как имя файла почтового ящика, из которого нужно читать; без аргументов,
или один из '-'; читает со стандартного ввода.

Пользователи должны знать, что изменение поля Event-Number или Event-Mark изменит
к какому событию применяется обновление из этого сообщения. Вряд ли это будет хорошо
результаты.

Если поля Event-Number и Event-Mark отсутствуют, логика mailbox_in будет
попытаться сопоставить фиксацию или тег сначала по Legacy-ID, затем по уникальному идентификатору коммиттера
и пара меток времени.

Если вывод перенаправлен и появляется модификатор «--changed», минимальный набор
фактически сделанные изменения записываются в выходной файл в форме, которая может быть загружена
назад.

Setfield атрибут ценностное
В выбранных объектах (по умолчанию нет) установите для каждого экземпляра именованного поля значение
строковое значение. Строка может быть заключена в кавычки, чтобы включать пробелы, и использовать обратную косую черту.
escape-последовательности, интерпретируемые кодеком Python для преобразования строк, например \ n и \ t.

Попытки установить несуществующие атрибуты игнорируются. Допустимые значения атрибута:
внутренние имена полей Python; в частности, для коммитов «комментарий» и «ветка»
юридический. Обратитесь к исходному коду, чтобы узнать о других интересных значениях.

добавлять [--rstrip] [>текст]
Добавлять текст к комментариям коммитов и тегов в указанном наборе выбора. В
текст - это первый токен команды, он может быть строкой в ​​кавычках. Побег в стиле C
последовательности в строке интерпретируются с использованием кодека Python string_decode.

Если задана опция --rstrip, комментарий удаляется справа перед новым текстом.
прилагается.

фильтр [--оболочка|--regex|--заменять|--дедос]
Запускать большие двоичные объекты, коммитить комментарии или отмечать комментарии в выбранных с помощью фильтра
указан в командной строке.

В любом режиме, кроме --dedos, при попытке указать набор выбора, включающий оба
BLOB-объекты и не-BLOB-объекты (то есть коммиты или теги) вызывают ошибку. Встроенный контент в
коммиты фильтруются, когда набор выбора содержит (только) капли, а фиксация
в пределах диапазона, ограниченного самым ранним и последним blob в спецификации.

При фильтрации больших двоичных объектов, если командная строка содержит волшебный файл cookie '% PATHS%', это
заменяется разделенным пробелами списком всех путей, которые ссылаются на большой двоичный объект.

С --shell оставшаяся часть строки определяет фильтр как команду оболочки. Каждый
блоб или комментарий передаются фильтру на стандартный ввод; содержание заменено
независимо от того, что фильтр испускает на стандартный вывод. В настоящее время требуется оболочка.
Другие режимы фильтрации будут поддерживаться в будущем.

С --regex ожидается, что оставшаяся часть строки будет регулярным выражением Python.
подстановка, записанная как / from / to / с from и to, передается в качестве аргументов в
стандартная функция re.sub () и применяется для изменения содержимого. Собственно, любой
непробельный символ будет работать как разделитель вместо /; это облегчает
использовать / в выкройках. Обычно выполняется только первая такая замена;
помещая 'g' после косой черты, заменяет глобально, а числовой литерал дает максимум
количество замен, которые нужно выполнить. Доступны другие флаги, ограничивающие объем замены
- 'c' только для текста комментария, 'C' только для имени коммиттера, 'a' только для имен авторов.

С --replace поведение похоже на --regexp, но выражения не интерпретируются
как регулярные выражения. (Это немного быстрее).

При использовании --dedos терминаторы строки \ r \ n в стиле DOS / Windows заменяются на \ n.

перекодировать кодер-декодер
Перекодируйте большие двоичные объекты, коммитите комментарии и имена коммиттеров / авторов или отметьте комментарии и отметьте
имена коммиттеров в выбранном варианте установлены на UTF-8 из кодировки символов, указанной на
командная строка.

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

Аргумент кодировки должен называть один из кодеков, известных стандартным кодекам Python.
библиотека. В частности, "latin-1" - допустимое имя кодека.

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

Теория, лежащая в основе разработки этой команды, заключается в том, что репозиторий может содержать
смесь кодировок, используемых для ввода метаданных коммита разными людьми в разных
раз. После использования = I для идентификации метаданных, содержащих в тексте старшие байты, отличные от Unicode,
человек должен использовать контекст, чтобы определить, какие именно кодировки использовались в
определенные интервалы событий и составьте соответствующие команды перекодирования, чтобы исправить их.

отредактировать
Сообщите о выбранном наборе событий во временный файл, как это делает mailbox_out, вызовите редактор
на нем и обновите результат, как это делает mailbox_in. Если вы не укажете редактор
имя в качестве второго аргумента, оно будет взято из переменной $ EDITOR в вашем
окружающей среды.

Обычно эта команда игнорирует капли, потому что почтовый ящик_out делает. Однако, если вы укажете
набор выбора, состоящий из одного большого двоичного объекта, ваш редактор будет вызываться непосредственно на
файл большого двоичного объекта.

временное смещение компенсировать [часовой пояс]
Примените смещение времени ко всем отметкам времени / даты в выбранном наборе. Аргумент смещения
требуется; он может иметь вид [+ -] сс, [+ -] мм: сс или [+ -] чч: мм: сс. Ведущий знак
требуется, чтобы отличить его от выражения выбора.

При желании вы также можете указать другой аргумент в виде [+ -] ччмм, часовой пояс
буквально применять. Чтобы применить часовой пояс без смещения, используйте литерал смещения +0
или -0.

объединяться [--чернослив] переименовать...
Объедините репозитории. Назовите любое количество загруженных репозиториев; они будут объединены в
одно объединенное репо и удалено из списка загрузки. Будет выбрано объединенное репо.

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

Имя нового репо будет состоять из имен всех объединенных частей, разделенных символом
'+'. У него не будет исходного каталога или предпочтительного типа системы.

С параметром --prune при каждой операции соединения D для каждого существующего наследственного файла
будет добавлен к корневому коммиту, затем он будет канонизирован с использованием правил
для сжатия эффект будет заключаться в том, что только файлы с правильно подобранными M, R и C
операции в корне выживают.

Трансплантат [--чернослив] переименовать
Когда объединение не дает вам достаточного контроля. Эта команда может иметь одно из двух
формы, выбранные по размеру набора. Первый аргумент всегда
должно быть именем загруженного репо.

Если набор выбора имеет размер 1, он должен идентифицировать одну фиксацию в текущем
выбранное репо; в этом случае корень репо станет потомком указанного
совершить. Если набор выбора пуст, именованное репо должно содержать один или несколько
выноски, соответствующие коммитам в текущем выбранном репо.

Ярлыки и ветки в названном репо имеют префикс с его именем; затем прививается
к выбранному. Любые другие выноски в названном репо также разрешаются в
контекст выбранного в данный момент. Наконец, именованное репо удаляется из загрузки.
.

С параметром --prune добавьте операцию удаления в корень привитого
репозиторий.

путь [источник] переименовать [--сила}] [цель]
Переименуйте путь в каждой файловой вершине каждой выбранной фиксации. Набор выбора по умолчанию:
все коммиты. Первый аргумент интерпретируется как регулярное выражение Python для соответствия
против троп; второй может содержать синтаксис обратной ссылки.

Обычно, если целевой путь уже существует в файлах или виден в
происхождение фиксации, эта команда выдает ошибку. С --сила вариант, эти
проверки пропускаются.

пути [{sub | sup}] [имя_директории] [>Outfile]
Принимает набор выбора. Без модификатора перечислить все пути, затронутые файловыми операциями, в
набор выбора (по умолчанию используется все репо). Этот вариант отчетности
> -направление.

С модификатором sub возьмите второй аргумент, который представляет собой имя каталога, и добавьте
это на каждый путь. С помощью модификатора sup удалите первый компонент каталога из
каждый путь.

слияние
Создайте ссылку на слияние. Принимает аргумент набора выбора, игнорируя все, кроме самого низкого
(источник) и высшие (целевые) члены. Создает ссылку на слияние от самого высокого члена
(ребенок) к низшему (родитель).

не объединять
Линеаризуйте фиксацию. Принимает аргумент набора выбора, который должен разрешаться в один
commit и удаляет всех своих родителей, кроме первого.

Это эквивалентно возродитьпервый_родитель,совершатьперебазировать, Где совершать та же
набор выбора, используемый с unmerge и первый_родитель это набор разрешающий совершатьпервый
родитель (см. возродить команда ниже

Главный интерес не объединять в том, что вам не нужно искать и указывать первый
заботиться о себе, экономя время и избегая ошибок, когда близлежащая операция может
ручной первый родительский аргумент устарел.

возродить [перебазировать]
Изменяет родительский список коммита. Принимает аргумент набора выбора и необязательный
политический аргумент. Набор выбора должен разрешить ровно две фиксации, последняя из
который является фиксацией для изменения, а самый ранний - это новый первый родительский элемент. Все остальные
родительские ссылки очищаются; если вы хотите, вы можете воссоздать их с помощью команды «объединить».

По умолчанию манифест измененной фиксации вычисляется перед ее изменением; а
deleteall и fileops добавляются к началу, поэтому манифест остается неизменным, даже если
первый родитель был изменен. Использование ключевого слова rebase в качестве третьего аргумента запрещает
это поведение - нет deleteall, и содержимое дерева всех потомков может быть
доработан в результате.

филиал название ветви... {переименовать|удалять} [аргумент]
Переименуйте или удалите ветку (и все связанные сбросы). Первый аргумент должен быть
название существующего отделения; Второй аргумент должен содержать один из глаголов «переименовать» или «удалить».

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

Для любого имени, если оно не содержит символа «/», добавляется префикс «refs / Heads».

день название тэга... {переместить | переименовать | удалить} [аргумент].
Переместите, переименуйте или удалите тег. Первый аргумент должен быть существующим именем тега; второй
аргумент должен быть одним из глаголов «переместить», «переименовать» или «удалить».

Для «перемещения» третий аргумент должен быть одноэлементным набором выбора. Для «переименования»
третьим аргументом может быть любой токен, который является синтаксически допустимым именем тега (но не
имя существующего тега). Для «удалить» третий аргумент не требуется.

Поведение этой команды сложное, потому что функции, представленные в виде тегов, могут быть
любой из трех вещей: (1) истинные объекты тегов, (2) легкие теги, на самом деле последовательности
совершает с общим именем ветки, начинающимся с «refs / tags» - в этом случае тег
считается, что указывает на последнюю фиксацию в последовательности, (3) Сбросить объекты. Эти могут
встречаются в сочетании; Фактически, экспортеры потоков из систем с аннотационными тегами
обычно выражают каждый из них как истинный объект тега (1), указывающий на фиксацию наконечника
последовательность (2), в которой базовое имя общего поля ветвления идентично
название тэга. Экспортер, который генерирует последовательности фиксации с облегченными тегами (2), может или
не могут генерировать сбросы, указывающие на их фиксации наконечника.

Эта команда пытается обработать все комбинации естественным образом, выполняя до трех
операции с любым истинным тегом, последовательность фиксации и сброс, соответствующий имени источника. В
переименовать, все вместе переименовываются. При удалении удаляется любой соответствующий тег или сброс;
затем соответствующие поля ветви изменяются, чтобы соответствовать ветви уникального потомка
помеченного коммита, если он есть. Когда тег перемещается, поля ветки не закрываются.
изменены, и выдается предупреждение.

Попытки удалить облегченный тег могут завершиться ошибкой с сообщением «не удалось определить
уникальный преемник ». Когда это происходит, тег находится в фиксации с несколькими дочерними элементами.
которые имеют разные метки веток. В спецификации git есть дыра
потоки быстрого импорта, что оставляет неясным, как можно безопасно использовать метки веток
переназначен в этом случае; вместо того, чтобы делать что-то рискованное, хирург бросает
исправимая ошибка.

сброс имя сброса... {переместить | переименовать | удалить} [аргумент].
Переместить, переименовать или удалить сброс. Первый аргумент должен соответствовать существующему имени сброса;
вторым аргументом должен быть один из глаголов «переместить», «переименовать» или «удалить».

Для «перемещения» третий аргумент должен быть одноэлементным набором выбора. Для «переименования»
Третий аргумент может быть любым токеном токена, который соответствует синтаксически допустимому имени сброса
(но не имя существующего сброса). Для «удаления» нет третьего аргумента.
требуется.

Для любого имени, если оно не содержит «/», добавляется префикс «голов /». Если оно
не начинается с «refs /», добавляется «refs /».

Аргумент соответствует имени сброса, если это либо вся ссылка
(refs / Heads / FOO или refs / tags / FOO для некоторого значения FOO) или базовое имя (например,
FOO), или суффикс вида головки / FOO или теги / FOO. Неквалифицированное базовое имя
Предполагается, что относится к голове.

Когда сброс переименовывается, поля ветви фиксации, соответствующие тегу, переименовываются вместе с ним в
соответствие. Когда сброс удален, соответствующие поля ветви изменяются, чтобы соответствовать ветви
уникального потомка фиксации наконечника связанной ветки, если таковая имеется.
При перемещении сброса поля ветвления не меняются.

разветвляться исходная ветвь... [целевая ветвь].
Принимает один или два аргумента, которые должны быть именами исходной и целевой ветвей; если
второй (целевой) аргумент опущен, по умолчанию используется refs / Heads / master. Любой трейлинг
сегмент названия филиала принимается как его синоним; таким образом мастер такой же, как
ссылки / главы / мастер. Не требует выбора.

История исходной ветки объединяется с историей целевой ветки,
становится историей подкаталога с именем исходной ветки. Любые сбросы
исходной ветки удаляются.

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

С помощью модификатора blobs замените каждый blob в репозитории на небольшой,
самоидентифицирующаяся заглушка, оставляющая все метаданные и топологию DAG нетронутыми. Это полезно
когда вы сообщаете об ошибке, для сокращения больших репозиториев до тестовых примеров
управляемый размер.

Набор выбора эффективен только с опцией «капли», по умолчанию для всех больших двоичных объектов.
Режим «уменьшить» всегда действует для всего репозитория.

С модификатором 'reduce' выполните топологическое сокращение, которое выбрасывает
неинтересные коммиты. Если в коммите есть все модификации файла (без удалений или копий)
или переименовывает) и имеет ровно одного предка и одного потомка, тогда это может быть скучно. К
быть полностью утомительным, он также не должен упоминаться какими-либо тегами или сбрасываться. Интересно
коммиты не скучны, или у них есть нескучный родитель или нескучный ребенок.

Без модификаторов эта команда удаляет капли.

игнорируемых [Переименование]. [перевести]. [по умолчанию].
Интеллектуальная обработка файлов шаблонов игнорирования. Эта команда не работает, если в репозитории нет
был выбран или для репозитория не задан предпочтительный тип записи. Это не
возьмите набор для выбора.

Если присутствует модификатор переименования, эта команда пытается переименовать все шаблоны игнорирования.
файлы на все, что подходит для предпочтительного типа - например, .gitignore для git,
.hgignore для hg и т. д. Эта опция не вызывает никакого перевода игнорируемых файлов.
он переименовывает.

Если присутствует модификатор перевода, синтаксический перевод каждого файла игнорирования
попытка. В настоящее время единственное преобразование, известное коду, - это добавление синтаксиса ':
glob ', если предпочтительный тип - hg.

Если присутствует модификатор defaults, команда пытается добавить эти значения по умолчанию.
шаблоны для всех игнорируемых файлов. Если при первом коммите не создается файл игнорирования, он
будет изменен, чтобы создать один, содержащий значения по умолчанию. Эта команда выдаст ошибку
предпочитают типы, у которых нет шаблонов игнорирования по умолчанию (в частности, git и hg). Так и будет
также выдает ошибку, когда знает, что инструмент импорта уже установил шаблоны по умолчанию.

СПРАВКА ПОДЪЕМ
Эта группа команд предназначена для исправления ссылок в коммитах, которые имеют формат
старых систем контроля версий. Общий рабочий процесс таков: сначала просмотрите комментарий.
history и замените все устаревшие ссылки на фиксации в файлы cookie, разбираемые машиной.
Затем автоматически превратите файл cookie, обрабатываемый машиной, в штампы действий. Смысл
Такое разделение процесса означает, что машине сложно выполнить первую часть правильно,
в то время как вторая часть подвержена ошибкам, когда это делает человек.

Файл cookie Subversion - это подстрока комментария в форме [[SVN: ddddd]] (пример:
[[SVN: 2355]] с ревизией, прочитанной непосредственно через программу экспорта Subversion, выведенную из
git-svn или сопоставление заголовка $ Revision $, встроенного в данные большого двоичного объекта для имени файла.

Файл cookie CVS - это подстрока комментария в форме [[CVS: имя файла: версия]] (пример:
[[CVS: src / README: 1.23]] с ревизией, соответствующей заголовку CVS $ Id $ или $ Revision $
встроены в данные большого двоичного объекта для имени файла.

Марочный файл cookie имеет форму [[: dddd]] и представляет собой просто ссылку на указанную метку.
Вы можете исправить это вручную, когда одна из предыдущих форм неудобна.

Метка действия - это метка времени RFC3339, за которой следует '!', За которым следует электронное письмо автора.
адрес (автор, а не коммиттер, потому что эта отметка времени не изменяется, когда патч
воспроизводится на ветке). Он пытается ссылаться на фиксацию без привязки к VCS.
Таким образом, вместо «commit 304a53c2» или «r2355», «2011-10-25T15: 11: 09Z![электронная почта защищена]".

Следующие псевдонимы git позволяют git работать напрямую с метками действий. Добавьте его в свой
~ / .gitconfig; если у вас уже есть раздел [псевдоним], опустите первую строку.

[псевдоним]
# git штамп - распечатать штамп действия репохирурга
штамп = шоу -s --format = '% cI!% ce'

# git scommit - перечислить самый последний коммит, который соответствует .
# Также необходимо указать ветвь для поиска или --all после этих аргументов.
scommit = "! f () {d = $ {1 %%! *}; a = $ {1 ## *!}; arg = \" - до = $ d -1 \ "; если [$ a! = $ 1]; затем arg = \ "$ arg --committer = $ a \"; fi; shift; git rev-list $ arg $ {1: + \ "$ @ \"};}; f "

# git scommit - как указано выше, но перечислить все совпадающие коммиты.
scommit = "! f () {d = $ {1 %%! *}; a = $ {1 ## *!}; arg = \" - до = $ d - после $ d \ "; if [ $ a! = $ 1]; затем arg = \ "$ arg --committer = $ a \"; fi; shift; git rev-list $ arg $ {1: + \ "$ @ \"};}; f "

# git smaster - перечислить самую последнюю фиксацию на мастере, которая соответствует .
smaster = "! f () {git scommit \" $ 1 \ "master --first-parent;}; f"
smasters = "! f () {git scommits \" $ 1 \ "master --first-parent;}; f"

# git shs - показать совпадающие коммиты на мастере .
shs = "! f () {штамп = $ (git smasters $ 1); shift; git show $ {штамп:? not found} $ *;}; f"

# git slog - запустить git log в на хозяине
slog = "! f () {штамп = $ (git smaster $ 1); shift; git log $ {штамп:? not found} $ *;}; f"

# git sco - проверить самую последнюю фиксацию на мастере, которая соответствует .
sco = "! f () {штамп = $ (git smaster $ 1); shift; git checkout $ {штамп:? not found} $ *;}; f"

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

Для поддержки ссылочного подъема, хирург внутренне создает устаревшую ссылку
карта, которая связывает идентификаторы ревизий в старых системах контроля версий с коммитами.
Содержимое этой карты взято из трех мест: (1) свойства cvs2svn: rev, если
репозиторий был прочитан из потока дампа Subversion, (2) заголовки $ Id $ и $ Revision $ в
файлы репозитория и (3) .git / cvs-revisions, созданные мерзавец cvsimport.

Подробная последовательность отмены возможных ссылок такова: сначала найдите возможные CVS.
и ссылки Subversion с Рекомендации или = N установлена ​​видимость; затем замените их на
эквивалентные файлы cookie; затем беги Рекомендации поднимать чтобы превратить файлы cookie в штампы действий (используя
информацию в устаревшей справочной карте) без необходимости выполнять поиск вручную.

Рекомендации [список|отредактировать |поднимать] [>Outfile]
С помощью модификатора 'list' перечислите фиксацию и отметьте комментарии для строк, которые могут быть CVS-
или идентификаторы ревизий в стиле Subversion. Это будет полезно, если вы захотите заменить
их с эквивалентными файлами cookie, которые могут автоматически переводиться в независимые от VCS
Марки действия. Эта команда создания отчетов поддерживает> -перенаправление. Это эквивалентно '= N
список'.

С помощью модификатора «редактировать» отредактируйте набор, в котором находятся идентификаторы ревизий. Это
эквивалентно '= N edit'.

С модификатором "лифт" попытайтесь разрешить файлы cookie Subversion и CVS в комментариях.
в штампы действий, используя устаревшую карту. Штамп действия - это
комбинация отметки времени / электронной почты / порядкового номера, однозначно идентифицирующая связанную фиксацию
с этим blob-файлом, как описано в разделе «СТИЛЬ ПЕРЕВОДА».

Не гарантируется, что каждая такая ссылка будет разрешена, или даже что любая из
Все будет. Обычно все ссылки в истории из репозитория Subversion будут
разрешаются, но ссылки CVS с меньшей вероятностью будут разрешены.

МАКРОСЫ И РАСШИРЕНИЯ
Иногда вам нужно будет отдать большое количество сложных хирургических команд очень
похожая форма, и удобно иметь возможность упаковать эту форму, поэтому вам не нужно делать
много ошибок при наборе текста. Для тех случаев, хирург поддерживает простую форму
расширение макроса.

определять имя тело
Определите макрос. Первый токен, разделенный пробелами, - это имя; оставшаяся часть
строка - это тело, если оно не является «{», которое начинается с многострочного макроса, заканчивающегося символом
строка, начинающаяся с «}».

Более поздний вызов do может вызвать этот макрос.

Команда «определить» сама по себе без имени или тела создает список макросов.

do имя Аргументы...
Разверните и выполните макрос. Первый токен, разделенный пробелами, - это имя
вызываемый макрос; оставшиеся токены заменяют {0}, {1} ... в определении макроса (
используются соглашения, принятые в методе форматирования Python). Токены могут содержать пробелы
если они заключены в строковые кавычки; строковые кавычки удаляются. Макросы могут вызывать макросы.

Если раскрытие макроса не начинается с набора выбора, независимо от того, какой набор
указанное до того, как ключевое слово "do" станет доступным для команды, сгенерированной
расширение.

неопределить имя]
Отмените определение названного макроса.

Вот пример, чтобы проиллюстрировать, как это можно использовать. В репозиториях проектов CVS
которые используют соглашение GNU ChangeLog, очень распространенным артефактом перед преобразованием является фиксация
с комментарием «*** пустое сообщение журнала ***», который изменяет только запись журнала изменений, объясняющую
коммит, непосредственно предшествующий этому. Следующий

определить журнал изменений <{0}> & / пустое сообщение журнала / squash --pushback
do changelog 2012-08-14T21:51:35Z
do changelog 2012-08-08T22:52:14Z
do changelog 2012-08-07T04:48:26Z
do changelog 2012-08-08T07:19:09Z
do changelog 2012-07-28T18:40:10Z

эквивалентно более подробному

<2012-08-14T21: 51: 35Z> & / пустое сообщение журнала / squash --pushback
<2012-08-08T22: 52: 14Z> & / пустое сообщение журнала / squash --pushback
<2012-08-07T04: 48: 26Z> & / пустое сообщение журнала / squash --pushback
<2012-08-08T07: 19: 09Z> & / пустое сообщение журнала / squash --pushback
<2012-07-28T18: 40: 10Z> & / пустое сообщение журнала / squash --pushback

но вероятность того, что при вводе первой версии трудно заметить, будет меньше.

(Также обратите внимание на то, что текстовое регулярное выражение действует как предохранитель от возможности ввода
неправильная дата, которая не относится к фиксации с пустым комментарием. Это был реальный мир
пример преобразования groff из CVS в git.)

Когда даже макроса недостаточно, вы можете писать и вызывать собственные расширения Python.

Exec имя
Выполнить пользовательский код из стандартного ввода (обычно файл через <перенаправление). Использовать этот
для настройки пользовательских функций расширения для последующих вызовов eval. Код имеет полный доступ к
все внутренние структуры данных. Определенные функции доступны позже Eval звонки.

Это можно вызвать в сценарии с кодом расширения в документе.

Eval имя-функции
Оцените строку кода в текущем контексте интерпретатора. Обычно это будет
вызов функции, определенной предыдущим exec. Переменные _хранилище и
_выбор будут иметь очевидные ценности. Обратите внимание, что _выбор будет список
целые числа, а не объекты.

АРТЕФАКТ УДАЛЕНИЕ
Некоторые команды автоматизируют исправление различного рода артефактов, связанных с репозиторием.
конверсии из систем заказов.

Авторы [читать|записывать] [имя файла] [>имя файла]
Применить или выгрузить информацию об авторе-карте для указанного набора выбора, по умолчанию
все события.

Лифты из CVS и Subversion могут иметь только имена пользователей, локальные для хоста репозитория в
идентификаторы коммиттера и автора. DVCS хотят адреса электронной почты (общесетевые идентификаторы) и
полные имена. Чтобы передать карту от одного к другому, ожидается файл авторов.
состоит из строк, каждая из которых начинается с идентификатора локального пользователя, за которым следует '=' (возможно,
окруженный пробелом), за которым следует полное имя и адрес электронной почты, необязательно
за которым следует поле смещения часового пояса. Таким образом:

ferd = Ферд Дж. Фунли[электронная почта защищена]> -0500

В файле авторов могут быть строки комментариев, начинающиеся с символа '#'; они игнорируются.

Когда применяется файл авторов, адреса электронной почты в метаданных коммиттера и автора для
локальный идентификатор которого совпадает между <и @, заменяются в соответствии с отображением (это
обрабатывает подъемники git-svn). В качестве альтернативы, если локальный идентификатор - это весь адрес, это
также считается совпадением (это обрабатывает то, что делают git-cvsimport и cvs2git)

С модификатором read или без модификатора примените данные сопоставления авторов (из стандартных
input или <-ориентированный файл). Может быть полезно, если вы редактируете репо или созданный дамп
by cvs2git или путем git-SVN вызывается без -A.

С модификатором 'write' напишите файл сопоставления, который может быть интерпретирован Авторы
читать, с записями для каждого уникального коммиттера, автора и теггера (в стандартный вывод
или <-ориентированный файл сопоставления). Это может быть полезно в качестве начала для создания авторов.
файл, хотя каждая часть справа от знака равенства требует редактирования.

разветвлять [набор путей]
Укажите список каталогов, которые будут рассматриваться как потенциальные ветки (чтобы стать тегами, если
нет никаких модификаций после создания копий) при анализе Subversion
репо. Этот список игнорируется, когда - ветвь используется опция чтения. По умолчанию
набор каталогов "стандартного макета" плюс все нераспознанные каталоги в
корень репозитория.

Без аргументов отображает текущий набор ветвлений.

Звездочка в конце пути в наборе означает «все непосредственные подкаталоги
этот путь, если они не являются частью другого (более длинного) пути в наборе ветвления '.

Обратите внимание, что набор ветвлений является свойством интерпретатора репохирурга, а не какой-либо
индивидуальный репозиторий, и будет сохраняться при чтении файла дампа Subversion. Это может
приведет к неожиданным результатам, если вы забудете его переустановить.

веткаify_map [/ регулярное выражение / ветка /...]
Укажите список регулярных выражений, используемых для сопоставления ветвей svn, которые
обнаружен Branchify. Если ни одно из выражений не соответствует поведению по умолчанию, применяется
который сопоставляет ветвь с именем последнего каталога, за исключением ствола и символа «*», который
отображаются на главный и корневой.

Без аргументов отображаются текущие пары замены регулярного выражения. Прохождение "сброса" приведет к
очистить карту сброса.

Сопоставит имя каждой ветки с регулярным выражением 1 и, если оно совпадает, перезапишет имя ветки
в ветку1. Если нет, он будет пробовать regex2 и т. Д., Пока не найдет совпадение.
regex или регулярных выражений не осталось. Регулярные выражения должны быть в Питона[2].
формат. Имя ветки может использовать обратные ссылки (см. Подфункцию в Python
документация).

Обратите внимание, что регулярные выражения добавляются к 'refs /' без необходимых
"головки /" или "теги /". Это позволяет правильно выбрать тип ветки.

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

Обратите внимание, что набор branchify_map является свойством интерпретатора репохирурга, а не
любой отдельный репозиторий, и будет сохраняться при чтении файла дампа Subversion. Это может
приведет к неожиданным результатам, если вы забудете его переустановить.

ИССЛЕДОВАНИЕ ДЕРЕВО СОСТОЯНИЯ
проявлять [регулярный выражение] [>Outfile]
Принимает необязательный аргумент набора выбора по умолчанию для всех коммитов и необязательный
Регулярное выражение Python. Для каждой фиксации в наборе выбора распечатайте сопоставление
все пути в этом дереве фиксации к соответствующим меткам больших двоичных объектов, зеркально отображая, какие файлы
будет создан при проверке фиксации. Если дано регулярное выражение, только
вывести строки «путь -> пометить» для путей, совпадающих с ним. Эта команда поддерживает> перенаправление.

контроль каталог
Принимает набор выбора, который должен разрешаться в одну фиксацию, и второй аргумент.
Второй аргумент интерпретируется как имя каталога. Состояние кодового дерева в
эта фиксация материализуется под каталогом.

Разница [>Outfile]
Показать разницу между коммитами. Принимает аргумент набора выбора, который должен
разрешить ровно два коммита. Поддерживает перенаправление вывода.

домоводство
Они поддерживаются следующими служебными командами, ни одна из которых не требует выбора
задавать:

помощь
Получите справку по командам интерпретатора. При желании введите пробел и команду
имя; без аргументов перечисляет все команды. '?' также вызывает это.

оболочка
Выполните команду оболочки, указанную в оставшейся части строки. '!' также вызывает это.

предпочитать [репотип]
Без аргументов опишите возможности всех поддерживаемых систем. С аргументом
(которое должно быть именем поддерживаемой системы) это имеет два эффекта:

Во-первых, если в каталоге, который вы читаете, несколько репозиториев, reposurgeon
прочитает предпочтительный (иначе он будет жаловаться, что не может выбрать среди
их).

Во-вторых, это изменит предпочтительный тип вывода для репохирурга. Это означает, что
вы делаете запись в каталог, он создаст репо предпочтительного типа, а не
его первоначальный тип (если он был).

Если предпочтительный тип не был выбран явно, чтение в репозитории (но не
fast-import stream) неявно установит предпочтительный тип на тип этого
репозиторий.

В более старых версиях reposurgeon эта команда меняла тип выбранного
репозиторий, если он есть. Такое поведение плохо взаимодействовало с попытками интерпретировать
устаревшие идентификаторы и был удален.

Тип источника [репотип]
Сообщить (без аргументов) или выбрать (с одним аргументом) текущий репозиторий
Тип источника. Этот тип обычно устанавливается во время чтения репозитория, но может оставаться неустановленным.
если источником был потоковый файл.

Тип источника влияет на интерпретацию устаревших идентификаторов (для целей = N
набор видимости и команда 'ссылки'), управляя регулярными выражениями
привык узнавать их. Если предпочтительный тип вывода не задан, он также может измениться.
формат вывода потоковых файлов из репозитория.

Тип источника надежно устанавливается всякий раз, когда читается живой репозиторий или когда
Поток Subversion или Fossil dump интерпретируется, но не обязательно, другим потоком
файлы. Потоки, созданные cvs-быстрый экспорт(1) с использованием - хирург обнаруживаются как
CVS. В некоторых других случаях исходная система определяется по присутствию магии.
$ -заголовки в BLOB-объектах содержимого.

ПРИБОРЫ
Несколько команд были реализованы в основном для отладки и регрессионного тестирования.
целей, но может быть полезен в необычных обстоятельствах.

Вывод большинства этих команд может быть индивидуально перенаправлен на именованный вывод.
файл. Там, где это указано в синтаксисе, вы можете поставить перед именем выходного файла префикс «>» и указать
это как следующий аргумент.

индекс [>Outfile]
Отобразить четыре столбца информации об объектах в наборе выбора: их количество, их
тип, ассоциированная метка (или «-», если метки нет) и сводное поле, различающееся по типу. За
ветка или тег, это ссылка; для коммита это ветвь коммита; для капли
это путь к репозиторию файла в большом двоичном объекте.

По умолчанию для этой команды выбрано значение = CTRU, все объекты, кроме больших двоичных объектов.

решение [текст-метки ...]
Ничего не делает, но разрешает выражение набора выбора и выводит полученный результат
номер события установлен на стандартный вывод. Остальная часть строки после команды
используется как метка для вывода.

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

назначать [имя]
Вычислите ведущий набор выбора и присвойте ему символическое имя. Это ошибка
назначить имя, которое уже назначено, или любое существующее имя ветки. Задания
может быть очищен мутациями последовательности (но не обычными делециями); вы увидите
предупреждение, когда это происходит.

Без набора выбора и без имени перечислите все назначения.>

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

отменить [имя]
Отмените присвоение символьного имени. Выдает ошибку, если имя не присвоено.

имена [>Outfile]
Перечислите названия всех известных веток и тегов. Сообщает вам, что в рамках закона разрешено
угловые скобки и круглые скобки.

подробный [n]
«verbose 1» включает индикатор выполнения и сообщения, «verbose 0» отключает их. Выше
уровни детализации доступны, но предназначены только для разработчиков.

тихий [on | от]
Без аргумента эта команда запрашивает отчет о тихом логическом значении; с
аргумент «включено» или «выключено» изменяется. Когда тихо включено, меняющиеся во времени поля отчета
которые в противном случае могли бы вызвать ложные сбои в регрессионном тестировании, подавляются.

Распечатать выходной текст ...
Ничего не делает, кроме вывода строки аргумента на стандартный вывод. Полезно в регрессе
тесты.

эхо [номер]
'echo 1' вызывает каждый хирург команда, которая выводится на стандартный вывод непосредственно перед
его выход. Это может быть полезно при построении регрессионных тестов, которые легко
проверено на глаз.

скрипт имя файла [аргумент...]
Принимает имя файла и необязательные следующие аргументы. Читает каждую строку из файла и
выполняет его как команду.

Во время выполнения скрипта имя скрипта заменяет строку $ 0 и
необязательные следующие аргументы (если есть) заменяют строки $ 1, $ 2 ... $ n в скрипте
текст. Это делается до токенизации, поэтому $ 1 в строке типа «foo $ 1bar» будет
расширен. Кроме того, $$ расширяется до идентификатора текущего процесса (что может быть полезно
для скриптов, использующих временные файлы).

Внутри скриптов (и только внутри скриптов) хирург принимает слегка расширенный
синтаксис: во-первых, обратная косая черта в конце строки сигнализирует о том, что команда продолжается на
следующая строка. Любое количество последовательных строк, экранированных таким образом, объединяется без
завершение обратной косой черты до оценки. Во-вторых, команда, которая принимает ввод
аргумент filename может вместо этого принимать буквальные следующие данные в синтаксисе оболочки
здесь-документ. То есть: если имя файла заменено на "<
сценарий до завершающей строки, состоящей только из «EOF», будет прочитан, помещен в
временный файл, и этот файл передается команде, а затем удаляется. EOF может быть
заменяется любой строкой. Обратные косые черты не имеют особого значения при чтении
здесь-документ.

Скрипты могут иметь комментарии. Любая строка, начинающаяся с символа "#", игнорируется. Если в строке есть
конечная позиция, которая начинается с одного или нескольких пробелов, за которыми следует '#',
эта конечная часть игнорируется.

версия [версия...]
Без аргументов напрямую отображать версию программы и список VCS.
поддерживается. С аргументом укажите основную версию (однозначное число) или полную версию.
(major.minor), в рамках которого был разработан прилагаемый сценарий. Программа выдаст ошибку
если основная версия была изменена (что означает, что хирургический язык не
обратная совместимость).

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

подсказка [формат...]
Установите формат командной строки на значение командной строки; с пустой командой
строку, отобразите ее. Формат приглашения оценивается в Python после каждой команды с
следующие словарные замены:

выбранный
Имя выбранного репозитория или «Нет», если в данный момент ничего не выбрано.

Таким образом, одним из полезных форматов может быть 'rs [% (selected) s] %%'.

В будущем могут быть добавлены другие элементы формата. Приглашение по умолчанию соответствует
формат 'reposurgeon %%'. Строка формата оценивается с помощью кавычек оболочки, поэтому
что пробелы могут быть включены.

история
Перечислите команды, которые вы вошли в этот сеанс.

наследие [читать|записывать] [<имя файла] [> имя файла]
Применить или перечислить устаревшую справочную информацию. Не требует выбора. "Читать"
вариант читает из стандартного ввода или из <-ориентированного имени файла; вариант "запись"
записывает в стандартный вывод или в> -направленное имя файла.

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

Обычно нет необходимости использовать эту команду. Унаследованная карта
автоматически сохраняется при чтении и перестроении репозитория, сохраняется в
файл legacy-map в подкаталоге репозитория ..

набор [вариант]
Включите опцию флага. Без аргументов перечислить все варианты

Большинство параметров описываются вместе с конкретными операциями, которые
изменить. Один из наиболее интересных - «compressblobs»; это позволяет сжатие на
blob-файлы во внутреннем представлении, которые хирург использует для редактирования репозиториев.
С этой опцией чтение и запись репозиториев происходит медленнее, но редактирование
репозиторий требует меньше (иногда намного меньше) дискового пространства.

Очистить [вариант]
Отключите флаг опции. Без аргументов перечислить все варианты

профиль
Включить профилирование. Статистика профиля выгружается по пути, указанному в качестве аргумента. Должно быть
один из начальных аргументов командной строки и собирает статистику только по коду
выполняется через '-'.

синхронизация
Отображение статистики по фазам в анализе репозитория. В основном представляет интерес для
разработчики пытаются ускорить работу программы.

выход
Выходим, сообщая время. Включено сюда, потому что, в то время как EOT также будет чисто выходить из
интерпретатор, эта команда сообщает время, прошедшее с момента запуска.

РАБОЧИЕ ПОДВЕРСИЯ


reposurgeon может читать файлы дампа Subversion или редактировать репозиторий Subversion (при этом вы должны
укажите его в репозитории, а не в каталоге оформления заказа). В дистрибутив репохирургии входят:
сценарий с именем «repotool», который можно использовать для создания, а затем постепенного обновления локального
зеркало удаленного репозитория для редактирования или преобразования.

ЧТЕНИЕ ПОДВЕРСИЯ РЕПОЗИТОРИИ
Некоторые необязательные модификаторы команды чтения изменяют ее поведение при чтении Subversion.
репозитории:

- ветвь
Подавить анализ ветвей.

--игнорировать-свойства
Подавить предупреждения во время чтения об отклоненных настройках свойств.

--пользователь-игнорирует
Не создавайте файлы .gitignore из svn: ignore properties. Вместо этого просто пройди через
Файлы .gitignore, найденные в истории.

--use-uuid
Если установлена ​​опция чтения --use-uuid, UUID репозитория будет использоваться как
имя хоста при подделке адресов электронной почты, например, git-svn. В противном случае адреса будут
сгенерирован так, как это делает git cvs-import, просто скопировав имя пользователя в
адресное поле.

Эти модификаторы могут располагаться в любом месте в любом порядке в командной строке чтения после команды чтения.
Они должны быть разделены пробелами.

Вот правила, используемые для сопоставления подкаталогов в репозитории Subversion с ветвями:

1. В любой момент времени существует набор подходящих путей и подстановочных знаков пути, которые объявляют
потенциальные отрасли. См. Документацию разветвлять как изменить этот набор,
который изначально состоит из {ствола, тегов / *, ветвей / * и '*'}.

2. Репозиторий считается "плоским", если в нем нет каталога, соответствующего пути или пути.
подстановочный знак в наборе ветвления. Все коммиты в плоском репозитории назначаются ветке
master, и то, что было бы структурой ветвей, становится структурой каталогов. В этом
случай, мы закончили; все остальные правила применяются к репо без фиксированной ставки.

Если вы дадите возможность - ветвь при чтении репозитория Subversion ветка
анализ пропускается, и репозиторий рассматривается как плоский (оставлен как линейный
последовательность коммитов по реферам / головам / мастеру). Это может быть полезно, если ваш репозиторий
конфигурация очень необычна, и вам нужно сделать операцию на ветвях самостоятельно. Обратите внимание, что
эта опция отключит разделение смешанных коммитов.

3. Если "магистраль" подходит, она всегда становится главной ветвью.

4. Если элемент набора ветвления заканчивается на *, каждый его непосредственный подкаталог будет
считается потенциальной веткой. Если '*' находится в наборе ветвления (что верно по
по умолчанию) все каталоги верхнего уровня, кроме / trunk, / tags и / branch, также
рассмотрены потенциальные филиалы.

5. Каждая потенциальная ветвь проверяется, есть ли в ней коммиты после начальной
создание или копирование. Если есть такие коммиты, он становится веткой. В противном случае он становится
тег, чтобы сохранить метаданные фиксации. (Во всех случаях имя тега или
ветка - это базовое имя каталога.)

6. Файлы в каталоге верхнего уровня назначаются синтетической ветви с именем «корень».

Каждый коммит, который только создает или удаляет каталоги (в частности, копирует коммиты для тегов
и ветки, и коммиты, которые изменяют только свойства) будут преобразованы в тег
названный в честь ветки, содержащий метаданные даты / автора / комментария из коммита. Пока
это дает желаемый результат для тегов, ветки без тегов (включая ствол) также будут
получить таким образом корневые теги. Это очевидное несоответствие было принято, так что хирург
никогда не уничтожит созданные человеком метаданные, которые могут иметь ценность; это оставлено на усмотрение
пользователь может вручную удалить ненужные теги.

Удаление ветки Subversion превращается в удаление, очищая набор файлов из
ветка import-stream. Когда ветка заканчивается с помощью deleteall на конце, deleteall становится
превращается в тег. Это правило очищается после прерванного переименования ветки.

Иногда (и обычно по ошибке) разветвленный репозиторий Subversion будет содержать
ревизии, которые касаются нескольких ветвей. Они обрабатываются путем разделения их на
несколько коммитов import-stream, по одной в каждой затронутой ветке. Legacy-ID такого разделения
commit будет иметь псевдодесятичную часть - например, если версия Subversion 2317 касается
три ветви, три сгенерированных коммита будут иметь идентификаторы 2317.1, 2317.2 и 2317.3.

Свойства svn: executable и svn: special транслируются в настройки разрешений в
входной поток; svn: исполняемый файл становится 100755, а svn: special становится 120000 (что указывает
символическая ссылка; содержимое большого двоичного объекта будет путем, по которому должна разрешаться символическая ссылка).

Любые свойства cvs2svn: rev, сгенерированные cvs2svn, включаются во внутреннюю карту
используется для поднятия ссылки, затем отбрасывается.

Обычно свойства svn: ignore для каждого каталога становятся файлами .gitignore. Фактический .gitignore
предполагается, что файлы в каталоге Subversion были созданы пользователями git-svn
отдельно от собственной Subversion игнорирует свойства и отбрасывается с предупреждением. Это до
пользователю, чтобы вручную объединить содержимое таких файлов в целевой репозиторий. Но
это поведение инвертируется параметром --user-ignores; если он включен, файлы .gitignore
пропускаются, а свойства Subversion svn: ignore отбрасываются.

(Независимо от значения параметра --user-ignores, файлы .cvsignore, найденные в
Репозитории Subversion при переводе всегда становятся .gitignores. Предположение
что они датируются до лифта CVS-to-SVN и должны быть сохранены, чтобы повлиять на поведение
при просмотре этого раздела репозитория.)

Свойства svn: mergeinfo интерпретируются. Любое свойство svn: mergeinfo в ревизии A с
диапазон источника слияния, заканчивающийся на ревизии B, создает ссылку слияния, так что B становится
родитель А.

Все остальные свойства Subversion отбрасываются. (Это может измениться в будущем выпуске.)
Свойство, для которого это, скорее всего, вызовет семантические проблемы, - svn: eol-style.
Однако, поскольку коммиты только для изменения свойств превращаются в аннотированные теги, переведенный
Теги сохранят информацию об изменениях настроек.

Субсекундное разрешение дат фиксации Subversion отбрасывается; Git хочет целое число
только временные метки.

Поскольку формат быстрого импорта не может представлять пустой каталог, пустые каталоги в
Хранилища Subversion будут потеряны при переводе.

Обычно локальные имена пользователей Subversion отображаются в стиле git cvs-import; таким образом пользователь
«фу» становится «фу» ", которого достаточно, чтобы успокоить git и другие системы,
требуются адреса электронной почты. С опцией "svn_use_uuid" имена пользователей отображаются в
git-svn style, где UUID репозитория используется как поддельный домен в адресе электронной почты. Оба
формы можно переназначить на реальный адрес с помощью Авторы читать команда.

Чтение потока Subversion позволяет записывать устаревшую карту как «устаревшую» сквозную передачу
когда репо записывается в потоковый файл.

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

созданный пользователем .gitignore
Это сообщение означает хирург нашел файл .gitignore в Subversion
репозиторий, который он анализирует. Вероятно, это произошло потому, что кто-то использовал git-SVN
как живой шлюз, и созданы игнорируемые, которые могут совпадать, а могут и не совпадать с теми, что в
сгенерированные файлы .gitignore, свойства игнорирования которых Subversion будут
переведено на. Вам нужно будет принять политическое решение о том, какой набор игнорируемых
использовать в преобразовании и, возможно, установить параметр --user-ignores при чтении для передачи
через файлы .gitignore, созданные пользователем; в этом случае это предупреждение не будет выдано.

не удается подключить непустую ветку XXXX к origin
Это серьезная ошибка. хирург не смог найти ссылку из указанного
ответвление на магистральную (главную) ветку. График фиксации не будет полностью связан и
потребуется ручной ремонт.

информация о разрешении может быть потеряна
Изменение узла Subversion в файле устанавливает или очищает свойства, но ни один предок не может быть
нашел для этого файла. Позиция исполняемого файла или символической ссылки может быть установлена ​​неправильно позже
версии этого файла. Пользовательские свойства Subversion также могут быть зашифрованы или
потерял. Обычно эту ошибку можно игнорировать.

набор свойств
хирург обнаружил настройку определяемого пользователем свойства или Subversion
свойства svn: externals. Эти свойства нельзя выразить в потоке импорта;
пользователь получает уведомление, если это препятствие для конверсии или какой-то
требуется корректирующее действие, но обычно эту ошибку можно игнорировать. Это предупреждение
подавляется параметром --ignore-properties.

ссылки на ветки обнаруживаются только файловыми операциями
Ссылки веток обычно выводятся путем изучения операций копирования каталога Subversion. А
типичная ошибка пользователя (создание ветки с копией каталога, отличным от Subversion, а затем выполнение
svn add в состязаниях) может победить это. Пока хирург должен обнаружить и справиться
с большинством таких копий правильно, вам следует изучить график фиксации, чтобы убедиться, что
ветка укоренена в правильном месте.

не удалось пометить корневую фиксацию
Самый ранний коммит в вашем репозитории Subversion имеет файловые операции, а не
являясь чистым созданием каталога. Это, вероятно, означает, что ваш файл дампа Subversion
неверно сформирован, или вы могли попытаться выполнить подъем из инкрементного дампа. Продолжить с
осторожность.

удаление подсказки без родителей удалить
Это сообщение может быть вызвано перемещением ветки Subversion с последующим повторным созданием.
под названием источника. Установите флажок рядом с указанной ревизией, чтобы убедиться, что переименованный
ветка подключена к мастеру.

средняя ветвь deleteall
В середине истории веток была обнаружена операция deleteall. Это обычно
указывает, что тег или ветка Subversion были созданы по ошибке, и кто-то позже
попытался отменить ошибку, удалив каталог тега / ветки, прежде чем воссоздать его с помощью
операция копирования. Внимательно изучите топологию рядом с удалением, может потребоваться
взлом вручную. Вполне вероятно, что оба (а) хирург перевод будет
отличается от других переводчиков (например, git-SVN) производить, и (б) не будет
быть сразу очевидным, что правильно.

не удалось найти корень ветки для копии
Не удалось выполнить анализ ветвей, вероятно, из-за набора копий файлов, которые хирург мысль
он должен интерпретироваться как неудачное создание ветки, но не может вывести историю для.
Используйте параметр --nobranch.

непоследовательно пусто из набора
Это сообщение означает хирург не прошел внутреннюю проверку работоспособности; в
структура каталогов, подразумеваемая его внутренними картами файлов, не согласуется с
что находится в проанализированных узлах Subversion. Этого никогда не должно происходить; если вы видите это, сообщите
ошибка в хирург.

ПИСЬМО ПОДВЕРСИЯ РЕПОЗИТОРИИ
reposurgeon поддерживает запись репозиториев Subversion. Из-за несоответствия между
онтологии Subversion и потоков импорта git, эта поддержка имеет некоторые важные
ограничения и ошибки.

Таким образом, истории репозитория Subversion не обрабатываются при редактировании репозитория.
Изменения содержимого файла сохраняются, но некоторые метаданные неизбежно теряются. Более того,
запись истории DVCS в Subversion также теряет значительную часть своих метаданных.
Подробности следуют далее.

При записи репозитория Subversion или потока дампа информация об авторе сбрасывается,
имя коммиттера и часть имени хоста адреса фиксации; только отметка времени фиксации
и локальная часть адреса электронной почты коммиттера сохраняются, последний становится
Поле автора Subversion. Однако чтение репозитория Subversion и его повторная запись
сохранит поля автора.

Временные метки потока импорта имеют детализацию в 1 секунду. Суб-вторая часть Subversion
временные метки фиксации будут потеряны при повторной хирургии.

Пустые каталоги не представлены в потоках импорта. Следовательно, чтение и письмо
В репозиториях Subversion сохраняется содержимое файлов, но не пустые каталоги. Это тоже не
гарантировано, что после редактирования репозитория Subversion последовательность каталога
создание и удаление по отношению к другим операциям будет идентичным; единственная гарантия
заключается в том, что включающие каталоги будут созданы раньше любых файлов в них.

При чтении репозитория Subversion, reposurgeon отбрасывает специальную копию каталога.
узлы, связанные с созданием ветвей. Их невозможно воссоздать, если и когда
репозиторий записывается обратно в Subversion; скорее, каждая ветвь копирует узел из
оригинал переводится в создание ветки плюс первый набор модификаций файла на
филиал.

При чтении репозитория Subversion репозиторий также автоматически разбивается на части.
коммиты со смешанной ветвью. Они не объединяются повторно, если репозиторий перезаписывается.

При записи в репозиторий Subversion все легкие теги становятся копиями тегов Subversion.
с пустыми комментариями журнала, названными в честь базового имени тега. Имя коммиттера и отметка времени
скопировано из фиксации, на которую указывает тег. Теряется различие между головами и тегами.

Из-за предыдущих двух пунктов не гарантируется, что даже номера ревизий будут
быть стабильным, когда репозиторий Subversion считывается, а затем записывается!

Репозитории Subversion всегда пишутся в стандартном формате (ствол / теги / ответвления).
Таким образом, репозиторий нестандартной формы, проанализированный репохирургом, не будет
написано той же формы.

При написании репозитория Subversion слияния веток переводятся в svn: mergeinfo
properties самым простым способом - как свойство svn: mergeinfo переведенного
коммит слияния, в котором перечислены ревизии источника слияния.

В Subversion есть понятие «потоков»; то есть названные сегменты истории, соответствующие
файлы или каталоги, которые создаются при добавлении пути, клонируются, когда путь
копируется и удаляется при удалении пути. Эта информация не сохраняется при импорте
потоки или внутреннее представление, которое использует репохирург. Таким образом, после редактирования
границы потока истории Subversion могут быть произвольно изменены.

ИГНОРИРУЙТЕ СХЕМЫ


хирург распознает, как поддерживаемые VCS представляют игнорирование файлов (файлы CVS .cvsignore
скрываясь без перевода в старых репозиториях Subversion, Subversion игнорирует свойства,
.gitignore / .hgignore / .bzrignore в других системах) и перемещает объявления игнорирования среди
эти контейнеры на входе и выходе репо. Этого будет достаточно, если шаблоны игнорирования
являются точными именами файлов.

Однако перевод может быть не идеальным, если шаблоны игнорирования являются шаблонами глобусов Unix.
или регулярные выражения. Эта таблица совместимости описывает, какие шаблоны будут преобразованы;
«Plain» указывает на простое имя файла без синтаксиса glob, regexp или отрицания.

В RCS нет файлов игнорирования или шаблонов, поэтому он не включен в таблицу.

┌─────────────┬────────────────┬───────────────┬──── ───────────────┬────────────────────┬─────────────── ───────┬────────────────────────────
│ │ от CVSот СВНот мерзавецот hgот BZRот даркиот SRC
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ все │ все │ все │ все │ все │ простые │ все │
CVS │ │ │ кроме │ │ кроме │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │! .PP │ все │ все кроме │ все │ все кроме │ обычное │ все │
СВН │ │ │! С префиксом │ │ RE: - и │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ все │ все │ все │ все │ все кроме │ простые │ все │
мерзавец │ │ │ │ кроме │ RE: с префиксом │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ все │ все │ все кроме │ все │ все кроме │ простые │ все │
hg │ кроме │ │! С префиксом │ │ RE: - и │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ все │ все │ все │ все │ все │ простые │ все │
BZR │ │ │ │ │ │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ простой │ простой │ простой │ простой │ простой │ все │ все │
дарки │ │ │ │ │ │ │ │
├─────────────┼────────────────┼───────────────┼──── ───────────────┼────────────────────┼─────────────── ───────┼────────────────────────────
в │ все │ все │ все кроме │ все │ все кроме │ простые │ все │
SRC │ кроме │ │! С префиксом │ │ RE: - и │ │ │
└─────────────┴────────────────┴───────────────┴──── ───────────────┴────────────────────┴─────────────── ───────┴────────────────────────────

Строки и столбцы hg таблицы скорее описывают совместимость с синтаксисом hg glob.
чем его синтаксис регулярного выражения по умолчанию. При записи в репозиторий hg из любого
другой вид, хирург добавляет к выводу .hgignore строку "syntax: glob".

ПЕРЕВОД СТИЛЬ


После преобразования репозитория CVS или SVN проверьте и удалите файлы $ -cookies в заголовке.
редакция (и) файлов. Полный набор Subversion: $ Date :, $ Revision :, $ Author :,
$ HeadURL и $ Id :. CVS использует $ Author :, $ Date :, $ Header :, $ Id :, $ Log :, $ Revision :, а также
(редко) $ Locker :, $ Name:, $ RCSfile:, $ Source: и $ State :.

Когда вам нужно указать фиксацию, используйте формат штампа действия, который Рекомендации поднимать
генерируется, когда он может разрешить ссылку на SVN или CVS в комментарии. Лучше, если ты
меняться от этой формат, даже такими тривиальными способами, как опускание буквы "Z" или изменение буквы "T"
или '!' или ':'. Обеспечение единообразия штампов действий и их машинного анализа будет полезно.
последствия для будущих инструментов просмотра репозитория.

Иногда при преобразовании репозитория может потребоваться вставить пояснительный комментарий - для
Например, если метаданные были искажены или отсутствовали, и вам нужно указать на этот факт. Это
полезно для инструментов просмотра репозитория, если для этого существует единый синтаксис, который
вряд ли появится в комментариях репозитория. Мы рекомендуем заключать примечания к переводу в [[
]]. Преимущество этого заключается в том, что он визуально похож на [], традиционно используемый для
редакционные комментарии в тексте.

Хорошей практикой является включение в комментарий для корневого коммита репозитория
обратите внимание на датировку и атрибуцию конверсионной работы и объяснение этих условностей. Пример:

[[Этот репозиторий был преобразован из Subversion в git 2011 Эриком С. Реймондом
<[электронная почта защищена]>. Здесь и в других местах примечания к конверсии заключены в двойной квадрат.
скобки. Нежелательные коммиты, сгенерированные cvs2svn, удалены, ссылки на коммиты
отображены в унифицированный независимый от VCS синтаксис, а некоторые комментарии отредактированы в
форма резюме плюс продолжение.]]

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

mailbox_in --create <
Имя тега: git-conversion

Отмечает место, в котором этот репозиторий был преобразован из Subversion в git.
EOF

ADVANCED ПРИМЕРЫ


определить последнее изменение {
@max (= B & [/ ChangeLog /] & / {0} / B)? список
}

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

STREAM СИНТАКСИС РАСШИРЕНИЯ


Парсер потока событий в «reposurgeon» поддерживает некоторый расширенный синтаксис. Экспортеры разработали
для работы с «репохирургом» может быть опция --reposurgeon, которая позволяет
расширенный синтаксис; в частности, это верно для cvs-быстрый экспорт(1). Остальная часть этого
В разделе описаны эти расширения синтаксиса. Установленные ими свойства (обычно) сохраняются.
и повторно выводить при записи файла потока.

Токен «#reposurgeon» в начале строки комментария в потоке быстрого импорта сигналов
reposurgeon, что оставшаяся часть - это команда расширения, которую должен интерпретировать «reposurgeon».

Реализована одна такая команда расширения: #Тип источника, который ведет себя идентично
хирургТип источника команда. Экспортер системы контроля версий под названием «frobozz»
мог бы, например, сказать

#reposurgeon тип источника frobozz

В коммите волшебный комментарий формы «# legacy-id» объявляет устаревший идентификатор из
система контроля версий исходного файла stream.

Также принят синтаксис bzr для установки свойств для каждой фиксации. При разборе коммита
синтаксис, строка, начинающаяся с лексемы «свойство», должна продолжаться с
токен имени свойства, разделенный пробелами. Если затем следует новая строка, она берется
чтобы установить для этого свойства с логическим значением значение true. В противном случае за ним должен следовать числовой
токен, определяющий длину данных, пробел, следующие данные (которые могут содержать символы новой строки) и
завершение новой строки. Например:

совершить ссылки / головы / мастер
оценка: 1
коммиттер Эрик С. Раймонд[электронная почта защищена]> 1289147634 -0500
Дата 16
Пример фиксации.

свойство legacy-id 2 r1
Встроенный README M 644

В отличие от других расширений, свойства bzr сохраняются при выводе потока только в том случае, если
предпочтительный тип - bzr, потому что любой импортер, кроме bzr, подавится ими.

НЕСТАБИЛЬНУЮ АНГЛИЙСКИЙ ЯЗЫК ШАНГИ


В версиях до 3.0 общий синтаксис команды помещал сначала командную команду, а затем
набор выбора (если есть), затем модификаторы (VSO). Он изменен на необязательный набор выбора
сначала командный глагол, затем модификаторы (SVO). Изменение упростило синтаксический анализ, позволило
отменив некоторые ключевые слова шума, и резюмирует успешный шаблон дизайна в некоторых
другие инструменты Unix - особенно СЕПГ(1).

В версиях до 3.0 выражения пути соответствовали только фиксации, но не фиксации, а
связанные капли. Названия флагов «а» и «с» были разными.

In хирург в версиях до 3.0 команда удаления имела семантику сквоша; также,
флаги политики не требовали префикса «-». Флаг «--delete» был назван
«Стереть с лица земли».

In хирург в версиях до 3.0 чтение и запись опционально принимали аргументы файла, а не
чем требовать перенаправления (а команда записи никогда не записывала в каталоги). Это было
изменено, чтобы позволить этим командам иметь модификаторы. Эти модификаторы заменены
несколько глобальных опций, которых больше нет.

In хирург в версиях до 3.0 самый ранний фактор в команде unite всегда сохранял
имена тегов и веток не изменены. Новое правило разрешения конфликтов имен с приоритетом
к последнему фактору, производит более естественное поведение при объединении двух репозиториев в конце
конец; главная ветвь второго (более позднего) сохраняет свое имя.

In хирург в версиях до 3.0 команда tagify ожидала политики как завершающие
аргументы, чтобы изменить его поведение. В новом синтаксисе используются одноименные параметры с ведущими
тире, которые могут появляться где угодно после команды tagify

В версиях до 2.9. синтаксис "авторы", "наследие", "список" и "почтовый ящик_ {in | out}"
был другим (и «наследием» были «окаменелости»). Они взяли простые аргументы имени файла, а не
с помощью перенаправления <и>.

ОГРАНИЧЕНИЯ И ГАРАНТИИ


Гарантия: в DVC, использующих хэши коммитов, редактирование с хирург никогда не меняет
хэш объекта фиксации, если (а) вы не редактируете фиксацию или (б) он не является потомком
отредактированный коммит в VCS, который включает родительские хэши во входных данных хэша дочернего объекта
(git и hg делают это).

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

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

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

Гарантия: любая строка в потоке быстрого импорта, не являющаяся частью команды. хирург
синтаксический анализ и понимание будут передаваться без изменений. В настоящее время набор потенциальных
как известно, сквозные передачи включают прогресс, кредитаи контрольно-пропускной пункт команды как
а также комментарии во главе с #.

Гарантия: Все хирург операции либо сохраняют все состояние репозитория, которым они не являются
явно сказано изменить или предупредить вас, когда они не могут этого сделать.

Гарантия: хирург обрабатывает расширение bzr commit-properties, правильно передавая
через элементы свойств, в том числе со встроенными символами новой строки. (Такие свойства также
редактируется в формате почтового ящика.)

Ограничение: Потому что хирург полагается на другие программы для генерации и интерпретации
поток команд fast-import, он подвержен ошибкам в этих программах.

Ограничение: bzr сильно не понимает, является ли его единица работы репозиторием.
или плавающая ветка, которая могла быть клонирована из репо или создана с нуля, и
может быть суждено или не суждено однажды быть объединенным в репо. Его экспортер работает только на
ветви, но его импортер создает репо. Таким образом, операция восстановления приведет к
структура подкаталогов отличается от ожидаемой. Ищите свой контент под
подкаталог "ствол".

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

Ограничение: стандартный git (по крайней мере, начиная с версии 1.7.3.2) подавится при расширении свойств.
команды. Соответственно, хирург опускает их при восстановлении репо с типом git.

Ограничение: хотя поддержка стороны чтения Subversion находится в хорошем состоянии, сторона записи
поддержка - это скорее набросок или доказательство концепции, чем надежная реализация; это только
работает с очень простыми случаями и не выполняет двустороннюю обработку. Это может быть улучшено в будущих выпусках.

Ограничение: хирург может неправильно вести себя в файловой системе, что нарушает регистр в именах файлов,
или который номинально сохраняет регистр, но сопоставляет имена, различающиеся только регистром, с одним и тем же
узел файловой системы (Mac OS X по умолчанию ведет себя так). Проблемы возникнут, если любые два
пути в репо различаются только в зависимости от случая. Чтобы избежать проблем с Mac, делайте все операции на
файловая система HFS +, отформатированная со специально включенной чувствительностью к регистру.

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

ТРЕБОВАНИЯ


хирург полагается на импортеров и экспортеров, связанных с поддерживаемыми им VCS.

мерзавец
Core git поддерживает как экспорт, так и импорт.

BZR
Требуется bzr плюс подключаемый модуль bzr-fast-import.

hg
Требуется ядро ​​hg, плагин hg-fastimport и сторонний hg-fast-export.py
скрипты.

СВН
Стандартные команды Subversion поддерживают экспорт и импорт.

дарки
Стандартные команды darcs поддерживают экспорт и импорт.

CVS
Требуется cvs-fast-export. Обратите внимание, что качество подъемников CVS может быть низким, с
индивидуальные подъемники, требующие серьезной ручной рубки. Это связано с врожденными проблемами с
Файловая модель CVS.

RCS
Требуется cvs-fast-export (да, это не опечатка; cvs-fast-export обрабатывает RCS
коллекции). Предостережение для CVS применяется.

КАНОНИКАЛИЗАЦИЯ ПРАВИЛА


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

Напомним, что у каждого коммита есть список файловых операций, каждая из которых M (изменение), D (удаление), R
(переименовать), C (скопировать) или deleteall (удалить все файлы). Только M операций связаны
капли. Обычно в операции фиксации выполняется только одна операция M на отдельный файл.
.

Чтобы понять, как работает процесс редукции, достаточно разобраться в случае, когда
все операции в списке работают с одним и тем же файлом. Подсписки операций
обращение к разным файлам не влияет друг на друга, и можно подумать об их сокращении
как отдельные операции. Кроме того, «deleteall» действует как буква D для всего и отменяет все
операции перед ним в списке.

Процесс редукции проходит по списку с самого начала в поисках соседних пар.
операций, которые он может составлять. В следующей таблице описаны все возможные случаи и все, кроме
одно из сокращений.

┌──────────────────────────┬──────────────────────── ─────────────┐
│ М + Д → Д │ │
│ │ Если файл был изменен │
│ │ затем удалил, результат │
│ │ как будто это было │
│ │ удалено. Если бы М был
│ │ изменять только для файла, │
│ │ он тоже удален. │
├───────────────────────────┼──────────────────────── ─────────────┤
│M a + R ab → R ab + M b │ │
│ │ Цель этого │
│ │ преобразование - нажать │
│ │ переименовывает в │
│ │ начало списка, │
│ │ где они могут стать │
│ │ рядом с другим R или │
│ │ C их можно составить │
│ │ с. Если M - это │
│ │ изменять только операцию для │
│ │ этот файл, переименовать │
│ │ упал. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ M a + C ab │ │
│ │ Без скидки. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ M b + R ab → ничего │ │
│ │ Должно быть невозможно, и │
│ │ может указывать на репозиторий │
│ │ коррупция. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ M b + C ab → ничего │ │
│ │ Копия отменяет │
│ │ модификация. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ Д + М → М │ │
│ │ Если файл удален и │
│ │ изменено, результат │
│ │ как будто удаление │
│ │ не состоялось │
│ │ (поскольку M операций │
│ │ хранить файлы целиком, а не │
│ │ дельты). │
├───────────────────────────┼──────────────────────── ─────────────┤
│ D + {D | R | C} │ │
│ │ Эти случаи должны быть │
│ │ невозможно и было бы │
│ │ предложить репозиторий │
│ │ был поврежден. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ R ab + D a │ │
│ │ Никогда не должно быть, и │
│ │ - это еще один случай, когда │
│ │ предложил бы репозиторий │
│ │ коррупция. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ R ab + D b → D a │ │
│ │ Удаление удаляет │
│ │ только что переименованный файл. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ {R | C} + M │ │
│ │ Без скидки. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ R ab + R bc → R ac │ │
│ │ Условия b должны совпадать │
│ │ для этих операций │
│ │ имели смысл, когда │
│ │ жили отдельно
│ │ совершает; если они этого не сделают, │
│ │ указывает на репозиторий │
│ │ коррупция. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ R ab + C bc │ │
│ │ Без скидки. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ C ab + D a → R ab │ │
│ │ Копировать с последующим удалением │
│ │ источника - это │
│ │ переименовать. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ C ab + D b → ничего │ │
│ │ Это удаление отменяет │
│ │ копия. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ C ab + R ac │ │
│ │ Без скидки. │
├───────────────────────────┼──────────────────────── ─────────────┤
│ C ab + R bc → C ac │ │
│ │ Копирование с последующим переименованием │
│ │ цели уменьшается до │
│ │ единственная копия │
├───────────────────────────┼──────────────────────── ─────────────┤
│ С + С │ │
│ │ Без скидки. │
└───────────────────────────┴──────────────────────── ─────────────┘

CRASH ВОССТАНОВЛЕНИЕ


Этот раздел станет актуальным только в том случае, если хирург или что-то под ним в
программный и аппаратный стек дает сбой во время записи репозитория, в
в частности, если целевой каталог перестроения является вашим текущим каталогом.

Инструмент преследует две противоречивые цели. С одной стороны, мы никогда не хотим рисковать
ранее существовавшее репо. С другой стороны, мы хотим иметь возможность запускать этот инструмент в каталоге
с репо и измените его на месте.

Мы разрешаем эту дилемму, играя в монте с тремя каталогами.

1. Сначала мы создаем репо в только что созданном промежуточном каталоге. Если ваша цель
каталог называется / path / to / foo, промежуточный каталог будет одноранговым именем
/ path / to / foo-stageNNNN, где NNNN - это файл cookie, полученный из хирургID процесса.

2. Затем мы создаем пустой каталог для резервных копий. Этот каталог будет называться /path/to/foo.~N~,
где N увеличивается, чтобы не конфликтовать с существующими каталогами резервных копий.
хирург никогда и ни при каких обстоятельствах не удаляет каталог резервных копий.

Пока все операции безопасны; худшее, что может случиться до этого момента, если
процесс прерывается из-за того, что каталоги промежуточного хранения и резервного копирования остаются позади.

3. Критическая область начинается. Сначала мы перемещаем все в целевом каталоге в
каталог резервных копий.

4. Затем мы перемещаем все, что находится в промежуточном каталоге, в цель.

5. Завершаем восстановлением неотслеживаемых файлов в целевом каталоге из резервной копии.
каталог. На этом критическая область заканчивается.

В критической области все сигналы, которые можно игнорировать, игнорируются.

ОШИБКА ВОЗВРАТ


Возвращает 1 в случае фатальной ошибки, в противном случае - 0. В пакетном режиме все ошибки фатальны.

Воспользуйтесь услугами репохирурга онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    Джин Веб Фреймворк
    Джин Веб Фреймворк
    Джин - невероятно быстрый веб-фреймворк
    написано на Голанге, может выполнять до
    В 40 раз быстрее благодаря
    мартини-подобный API и кастомная версия
    httprout ...
    Скачать Gin Web Framework
  • 2
    ЦЕРЕУС ЛИНУКС
    ЦЕРЕУС ЛИНУКС
    CEREUS LINUX базируется на MX LINUX con
    различные энторнос де эскриториос. Это
    приложение, которое также можно получить
    от
    https://sourceforge.net/projects/cereu...
    Скачать CEREUS LINUX
  • 3
    Тренер по задачам
    Тренер по задачам
    Task Coach - Ваше дружеское задание
    управляющий делами. Task Coach — это бесплатная открытая
    источник todo менеджер. Он вырос из
    разочарование по поводу других программ не
    работа с композитом...
    Скачать тренер задач
  • 4
    Ядро СУБД HyperSQL (HSQLDB)
    Ядро СУБД HyperSQL (HSQLDB)
    HSQLDB — это механизм реляционной базы данных.
    написан на Java, с драйвером JDBC,
    соответствующий ANSI SQL:2016. Маленький,
    быстрый, многопоточный движок и сервер
    с памятью...
    Загрузите ядро ​​базы данных HyperSQL (HSQLDB)
  • 5
    БАТИК-ВОССТАНОВЛЕНИЕ
    БАТИК-ВОССТАНОВЛЕНИЕ
    Проект Recovery, разработанный Батиком
    Команда восстановления из Индонезии, это
    Batik Recovery является производной от
    Официальный TWRP, модифицированный
    разработка ...
    Скачать БАТИК-ВОССТАНОВЛЕНИЕ
  • 6
    TightVNC
    TightVNC
    TightVNC — это улучшенная версия VNC,
    отличный бесплатный инструмент для удаленного рабочего стола.
    Улучшения включают в себя оптимальную пропускную способность
    «Жесткое» кодирование, передача файлов
    дюйма ..
    Скачать TightVNC
  • Больше »

Команды Linux

Ad