Amazon Best VPN GoSearch

Значок OnWorks

git-subtree - Интернет в облаке

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

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

ПРОГРАММА:

ИМЯ


git-subtree - объединяет поддеревья вместе и разделяет репозиторий на поддеревья

СИНТАКСИС


мерзавец поддерево добавить -P
мерзавец поддерево добавить -P
мерзавец поддерево тянуть -P
мерзавец поддерево push -P
мерзавец поддерево слияние -P
мерзавец поддерево сплит -P [ПАРАМЕТРЫ] [ ]

ОПИСАНИЕ


Поддеревья позволяют включать подпроекты в подкаталог основного проекта,
опционально, включая всю историю подпроекта.

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

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

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

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

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

КОМАНДЫ


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

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

Если вы используете --давить, направление слияния не всегда должно быть вперед; вы можете
используйте эту команду, чтобы вернуться во времени, например, с v2.5 на v2.4. Если ваше слияние
вводит конфликт, вы можете разрешить его обычными способами.

тянуть
В точности как слияние, но параллели мерзавец тянуть в том, что он извлекает данный ref из
указанный удаленный репозиторий.

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

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

После успешного разделения в стандартный вывод выводится один идентификатор фиксации. Этот
соответствует ГОЛОВКЕ только что созданного дерева, которым вы можете манипулировать, однако
Вы хотите.

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

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

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


-к, --тишина
Подавить ненужные выходные сообщения на stderr.

-д, --отладка
Создавать еще больше ненужных выходных сообщений на stderr.

-П , --prefix =
Укажите путь в репозитории к поддереву, которым вы хотите управлять. Этот вариант
обязательно для всех команд.

-м , --сообщение =
Эта опция действительна только для добавления, слияния и извлечения (не уверен). Указать как
сообщение фиксации для фиксации слияния.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ Для ДОБАВИТЬ, СЛИЯНИЕ, ТОЛКАТЬ, PULL


--давить
Эта опция действительна только для команд добавления, слияния и извлечения.

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

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

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

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

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

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ Для SPLIT


--annotate =
Эта опция действительна только для команды разделения.

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

Всякий раз, когда вы делитесь, вам нужно использовать одно и то же , иначе у вас нет
гарантия того, что новая воссозданная история будет идентична старой. Что будет
препятствовать правильной работе слияния. git subtree все равно пытается заставить его работать,
особенно если вы используете --rejoin, но это не всегда может быть эффективным.

-b , --branch =
Эта опция действительна только для команды разделения.

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

--игнорировать-присоединяется
Эта опция действительна только для команды разделения.

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

--onto =
Эта опция действительна только для команды разделения.

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

Если вы использовали мерзавец поддерево добавить, вам никогда не понадобится эта опция.

--присоединяйтесь
Эта опция действительна только для команды разделения.

После разделения объедините вновь созданную синтетическую историю обратно в свою основную
проект. Таким образом, будущие расколы могут искать только ту часть истории, которая была
добавлено с момента последнего --rejoin.

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

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

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

ПРИМЕР 1. ДОБАВИТЬ КОМАНДА


Предположим, у вас есть локальный репозиторий, в который вы хотите добавить внешний
библиотека поставщика в. В этом случае мы добавим репозиторий git-subtree в качестве подкаталога
вашего уже существующего репозитория git-extensions в ~ / git-extension /:

$ git subtree add --prefix = git-subtree --squash \
git: //github.com/apenwarr/git-subtree.git master

мастер должен быть действительным удаленным ref и может иметь другое имя ветки

Вы можете опустить флаг --squash, но это увеличит количество коммитов, которые
включены в ваш локальный репозиторий.

Теперь у нас есть ~ / git-extension / git-subtree каталог, содержащий код от мастера
ветка git: //github.com/apenwarr/git-subtree.git в нашем репозитории git-extensions.

ПРИМЕР 2. ВЫПИСКА A ПОДДЕРЕВО С ПОМОЩЬЮ СОВЕРШИТЬ, MERGE И PULL


В качестве примера воспользуемся репозиторием для исходного кода git. Во-первых, получите свою копию
репозитория git.git:

$ git clone git: //git.kernel.org/pub/scm/git/git.git test-git
$ компакт-диск тест-git

gitweb (commit 1130ef3) был объединен с git с момента фиксации 0a8f4f0, после чего не было
дольше сохраняется отдельно. Но представьте, что он поддерживался отдельно, и мы хотели
для извлечения изменений, внесенных git в gitweb с того времени, для обмена с апстримом. Ты мог бы
сделай это:

$ git subtree split --prefix = gitweb --annotate = '(разделить)' \
0a8f4f0 ^ .. --onto = 1130ef3 --rejoin \
- ветка gitweb-latest
$ gitk gitweb-последний
$ git толчок [электронная почта защищена]: что угодно / gitweb.git gitweb-latest: master

(Мы используем 0a8f4f0 ^ .. потому что это означает "все изменения с 0a8f4f0 на текущий
версия, включая саму 0a8f4f0. ")

Если изначально gitweb был объединен с использованием мерзавец поддерево добавить (или предыдущий раскол имел
уже было сделано с указанием --rejoin), тогда вы можете делать все свои разбиения, не имея
чтобы запомнить любые странные идентификаторы коммитов:

$ git subtree split --prefix = gitweb --annotate = '(split)' --rejoin \
- ветка gitweb-latest2

И вы можете так же легко объединить изменения обратно из вышестоящего проекта:

$ git subtree pull --prefix = gitweb \
[электронная почта защищена]: что угодно / gitweb.git master

Или, используя --давить, вы можете вернуться к более ранней версии gitweb:

$ git subtree merge --prefix = gitweb --squash gitweb-latest ~ 10

Затем внесите некоторые изменения:

$ date> gitweb / myfile
$ git добавить gitweb / myfile
$ git commit -m 'создал мой файл'

И снова перемотайте вперед:

$ git слияние поддеревьев --prefix = gitweb --squash gitweb-latest

И обратите внимание, что ваше изменение все еще в силе:

$ ls -l gitweb / myfile

И вы можете разделить его и посмотреть на свои изменения по сравнению со стандартным gitweb:

git log gitweb-latest .. $ (git subtree split --prefix = gitweb)

ПРИМЕР 3. ВЫПИСКА A ПОДДЕРЕВО С ПОМОЩЬЮ ФИЛИАЛ


Предположим, у вас есть исходный каталог с множеством файлов и подкаталогов, и вы хотите
извлеките каталог lib в собственный проект git. Вот краткий способ сделать это:

Сначала создайте новый репозиторий там, где хотите:

$
$ git инициализация --bare

Вернемся в исходный каталог:

$ git subtree split --prefix = lib --annotate = "(split)" -b split

Затем вставьте новую ветку в новый пустой репозиторий:

$ git push сплит: мастер

Используйте git-subtree онлайн с помощью сервисов onworks.net


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

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

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.