8-900-374-94-44
[email protected]
Slide Image
Меню

Как пользоваться sourcetree: Как пользоваться SourceTree? — Хабр Q&A

Git, SourceTree, ветки и несколько пользователей. : AutoLISP / VisualLISP

Автор: Кулик Алексей aka kpblc | Дата: 27 Апрель 2015 · 7 коммент. 

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

Я отчетливо понимаю, что «тру-программеры», суровые линуксоиды, а также приверженцы «нормального Git» порвут меня как Тузик грелку… Но тем не менее.

Рассматриваются вопросы и подробности работы с Git на примере SourceTree. Для примера имитируется следующая ситуация:

  1. Над проектом работает 4 человека
  2. 3 человека — разработчики. Могут и постоянно вносят изменения в серверный репозиторий
  3. 1 человек — тестировщик. В серверный репозиторий изменения не вносит, только считывает
  4. Кроме всего прочего, существует еще один репозиторий («пользовательский»), с которым (впоследствии) будут работать конечные пользователи.
    Синхронизацию этого репозитория с серверным выполняет любой из разработчиков
  5. Разработчики и тестировщики могут использовать любые ветки. Пользовательский репозиторий использует и синхронизирует только основную ветку — master

Для упрощения работы используется только физический компьютер. Все репозитории располагаются внутри каталога c:\Repositories

Создание серверного репозитория

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

[Терминал] или нажимаем клавиши

Shift+Alt+t.
Вводим команду

1

git init —bare c:/Repositories/Server

Перед bare указывается двойной минус. Путь к “серверному” репозиторию указывается прямыми слешами, а не обратными, как мы привыкли в Windows. В случае использования абсолютного пути закон не меняется.

После выполнения команды вводим команду

Окно терминала закроется.

Создание и настройка репозиториев для клиентов системы

Теперь внутри каталога

c:\Repositories создаются несколько подкаталогов —

Dev1,

Dev2,

Dev3 (репозитории для разработчиков),

Test1 (для тестировщика) и

User («пользовательский»). Внутри этих каталогов создаются раздельные репозитории, каждый из которых «привязывается» к серверному как к единственному внешнему. В реальной жизни, естественно, эти локальные репозитории будут находиться где угодно и в любом виде. Ниже приведена последовательность создания репозитория для разработчика (Dev1).

Нажимаем кнопку [Клонировать / Создать]
Выбрать [Создать новый репозиторий], установить тип — Git, целевой путь c:\Repositories\Dev1, указать имя Dev1, [Создавать закладку] — да.
После создания выполнить щелчок правой кнопкой мыши на столбце с “Состояния файлов” и выбрать “Добавить новое внешнее хранилище”
В диалоге нажать кнопку [Добавить]
В диалоге установить галочку [Внешний по умолчанию]; ввести (вручную) URL c:\Repositories\Dev1 и нажать ОК. Остальные поля оставить пустыми — никакой интеграции с интернет-репозиториями не планируется и не выполняется.

Аналогичным образом создаются репозитории для Dev2, Dev3, Test и User:

На данный момент у всех «пользователей» системы есть свои собственные репозитории (пускай они сейчас пустые), приступаем к процессу разработки. Чтобы не усложнять ситуацию попусту, будем работать с текстовыми файлами — их и контролировать проще, и менять.

Ветка master

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

Допустим, разработчик Dev1 создает текстовый файл Dev1master.txt с содержимым

1

Dev1 | master

…и выполняет фиксацию внесенных изменений в своем репозитории
При выполнении фиксации изменений (коммите) обязательно пишется комментарий и устанавливается галочка [Сразу отправить изменения в . ..]

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

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

Теперь вид SourceTree для Dev1 выглядит таким образом:

Обратите внимание, установлена галочка Показать внешние ветки, и в перечне изменений показывается origin/master и master. Первое – это название той ветки, с которой синхронизируется текущее состояние дел. Второе – имя ветки, с которой работает пользователь.

Любой другой пользователь получает сообщение (как – неважно: по телефону, через почту и т.д.) о том, что в серверный репозиторий были внесены изменения. Изменения коснулись ветки master.

Пользователь активирует свой SourceTree со своим репозиторием (например, это будет пользователь Test1) и нажимает кнопку [Получить]
В диалоговом окне выбирается синхронизируемая ветка (в данном случае – master) и указывается, что после слияния выполнить фиксацию изменений

Теперь у пользователя Test1 вид окна SourceTree полностью аналогичен окну Dev1:


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

1

Dev1 | master

:

Множество веток, их синхронизация и работа. Начало ветвления и процесс синхронизации

Теперь начинается то, с чем мы и столкнулись: ветвление процесса разработки.
Dev1 создает отдельную ветку Dev1Br#1 и в этой ветке создает отдельный файл Dev1br1.txt, а Dev3 – свою ветку Dev3Br#1 с файлом Dev3br1.txt. Создание ветки автоматически переводит соответствующего клиента на эту ветку. При фиксации изменений галочка “Сразу отправить изменения в…” установлена. В результате состояние дел у пользователей будет таким:

Имя пользователяВид окна SourceTree
Dev1
Dev3
Остальные пользователи

Обращаем внимание на то, что установлена галочка “Показать внешние ветки”. Если она не будет установлена, вид немного упростится: будут показываться только те ветки и коммиты, которые существуют в текущем репозитории.

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

Подчеркну: и Dev1, и Dev3 успешно создали собственные ветки и “залили” их в серверный репозиторий. Теперь Dev1 решает, что пора бы и протестировать внесенные изменения. Он отправляет пользователю Test1 сообщение с указанием названия ветки, которую надо получить: Dev1Br#1. Каковы будут действия пользователя Test1?

Пользователь Test1 активирует SourceTree и нажимает кнопку [Получить]
В выпадающем списке выбрать нужную ветку – Dev1Br#1
Результирующий вид окна SourceTree для пользователя Test1

Обратите особое внимание на несколько моментов:

  1. У пользователя Test1 до сих пор только одна его ветка – master:

    Импорт ветки Dev1Br#1 не изменил название локальной ветки, не создал новую ветку – ни-че-го! Изменения из внешней ветки origin\Dev1Br#1 просто были помещены поверх старого состояния репозитория
  2. Состояние репозитория в результате получения изменений из Dev1Br#1 стало таким:
  3. SourceTree (точнее, Git) считает, что ему есть что отправить в серверный репозиторий:

    Хотя, конечно, это не так. Просто обновилась локальная ветка master, и Git предполагает, что ее надо срочно синхронизировать с серверной. Ни в коем случае этого делать нельзя! Ветку master в серверном (общем) репозитории обновляют только разработчики (ну или специально обученные люди, обладающие достаточной квалификацией и правами).

Теперь Dev3 сообщает пользователю Test1, что у него тоже есть что “обновить”. Действия пользователя Test1 ничем не отличаются от уже описанных, только выбираемая ветка будет Dev3Br#1. Правда, результат будет совсем другим:

А вот что будет твориться в репозитории с точки зрения файловой системы:

Таким образом, получается, что Test1 “подхватил” новые файлы и из ветки Dev1Br#1, и из ветки Dev3Br#1. При этом сам пользователь Test1 находится на своей собственной ветке master. Фактически произошло слияние (merge) веток Dev1Br#1 и Dev3Br#1 в локальной ветке master пользователя Test1.

А теперь в игру вступает Dev2, про которого мы почти забыли – и вносит изменения в начальный файл Dev1master. txt, добавляя строку

1

Dev2 | master

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

Естественно, что Dev2 сообщает об изменениях всем причастным (каким образом – неважно) и в обязательном порядке называет имя ветки, которую надо обновлять. Каковы будут действия пользователей системы и как это отразится на состоянии из репозиториев?

Пойдем, пожалуй, по алфавиту: Dev1, Dev3, Test1, User. Пользовательский репозиторий затрагивается обязательно: изменения касаются все, еще раз повторюсь.

Рассмотрим последовательность действий пользователя Dev1:

Пользователю не надо ничего отправлять в серверный репозиторий, поэтому он нажимает кнопку [Получить]
Поскольку известно, что надо обновлять ветку master, в выпадающем списке выбираем именно ее. Для гарантии безошибочности работы настоятельно рекомендуется нажать кнопку [Обновить] Галочка “Выполнять фиксацию сразу после слияния” устанавливаем включенной
Обратите внимание: обновление осуществляется в локальную ветку Dev1Br#1, как нам и требуется. Если в процессе работы пользователь “перескакивал” между ветками, то синхронизация будет выполняться с текущей.
Таким образом будет выглядеть окно SourceTree. Обратите внимание: активирована ветка Dev1Br#1

А что же будет твориться в каталоге репозитория Dev1?
Во-первых, оба файла на месте:

Во-вторых, проверим измененявшийся файл Dev1master.txt:

1
2

Dev1 | master
Dev2 | master

Отлично, сработало! Теперь такие же действия выполняет Dev3, Test1 и User, расписывать уже не буду – картина в результате будет полностью аналогична.

Множество веток, их синхронизация и работа. Завершение ветки, слияние

В общем и целом, сейчас ситуация, кажется, нормализовалась: у всех пользователей именно то, что необходимо, все синхронизировано и все работает. Проходит какое-то время, и выясняется, что ветка Dev1Br#1 (которую, если помните, создавал Dev1) стала не нужна. Ее надо удалить – так, чтобы она не мозолила глаза никому и нигде. Какие действия будет выполнять Dev1?

В контекстном меню выбирается “Перейти на master”, либо двойной клик на имени локальной ветки, на которую планируется перейти
Вызвать контекстное меню для ветки Dev1Br#1 и выбрать [Удалить Dev1Br#1]
В диалоговом окне нажать ОК

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

Чтобы ветка во внешнем хранилище не мешалась, не помешает удалить и ее:

Естественно, что о таких действиях тоже надо сообщить всем пользователям системы.

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

Теперь возьмем пользователя Dev3: его ветка оказалась настолько удачной и нужной, что ее следует “внедрить” в рабочую (master). На данный момент SourceTree для Dev3 выглядит так:

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

Dev3, во-первых, отправляет свои изменения ветки на внешнее хранилище (если этого еще не было сделано). Описывать уж не стану – выше это было рассмотрено достаточно подробно.
Далее – он получает ветку master с внешнего хранилища и активирует ее:

Выполняет слияние своей ветки с master:

И удаляет свою ветку.

Несколько советов самому себе

Советы пишу именно для себя, исходя из сегодняшнего понимания ситуации.

  1. Отработанные ветки крайне желательно удалять. Лишняя информация
  2. Имена веткам стоит задавать более-менее осмысленные: через полгода вспомнить, о чем была ветка “Ветка1634″ – нереально
  3. Из отслеживания крайне желательно убирать backup- и debug-файлы и каталоги (это отдельная песня, в качестве подсказки – гугл, gitignore)
  4. Использовать кнопку [Слияние] я бы не стал (по крайней мере пока): неочевидно, что с чем сливается и что станет в результате
Здесь не были рассмотрены варианты конфликтов и из разрешений — я не поднимал вопрос «а что будет, если два или несколько человек одновременно изменили один и тот же файл». Оставляю «на потом» — все равно придется расписывать

Размещено в CSV, git, Новости, Прочее ПО · Метки: cvs, git, Практика, Разное

Сравнение слияния и перебазирования | Atlassian Git Tutorial

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

Обзор основных моментов

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

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

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

Способ слияния (merge)

Проще всего слияние ветки main в функциональную ветку выполняется с помощью следующей команды:

git checkout feature
git merge main

При желании этот код можно записать в одну строку:

git merge feature main

Эта операция создает в ветке feature новый «коммит слияния», связывающий истории обеих веток. Структура веток будет выглядеть так:

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

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

Способ перебазирования (rebase)

Вместо слияния можно выполнить перебазирование функциональной ветки feature на главную ветку main с помощью следующих команд:

git checkout feature
git rebase main

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

Главное преимущество rebase — более чистая история проекта. Во-первых, эта команда устраняет ненужные коммиты слияния, необходимые для git merge. Во-вторых, как показано на рисунке выше, команда rebase создает идеальную линейную историю проекта — вы сможете отследить функционал до самого начала проекта без каких-либо форков. Это упрощает навигацию в проекте с помощью таких команд, как git log, git bisect и gitk.

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

Интерактивное перебазирование

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

Чтобы запустить интерактивное перебазирование, передайте параметр i команде git rebase:

git checkout feature
git rebase -i main

Откроется текстовый редактор. В нем будут перечислены все коммиты, подготовленные к перемещению:

pick 33d5b7a Message for commit #1
pick 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3

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

pick 33d5b7a Message for commit #1
fixup 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3

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

Удаление незначительных коммитов помогает быстрее разобраться в истории функциональной ветки. Команда git merge просто не в состоянии этого сделать.

Золотое правило перебазирования

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

К примеру, представьте, что произойдет, если вы выполните rebase главной ветки main на свою функциональную ветку feature.

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

Единственный способ синхронизировать две главные ветки main — выполнить их обратное слияние. Это приведет к дополнительному коммиту слияния и двум наборам коммитов, которые содержат одни и те же изменения (исходные изменения и изменения из вашей ветки после rebase). Нужно ли говорить, что ситуация получится крайне запутанная?

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

Принудительная отправка изменений

Git заблокирует попытку поместить перебазированную ветку main обратно в удаленный репозиторий, поскольку она вступит в конфликт с удаленной веткой main. Но эту операцию можно выполнить принудительно, добавив флаг --force:

# Будьте крайне осторожны с этой командой! git push --force

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

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

Пошаговый разбор процесса

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

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

Локальная очистка

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

При использовании команды git rebase есть два варианта для нового положения ветки: вышестоящая ветка для функциональной ветки (например, ветка main) или более ранний коммит в функциональной ветке. Первый вариант описывался в примере в разделе Интерактивное перебазирование. Второй вариант удобен, когда нужно исправить лишь несколько недавних коммитов. Например, следующая команда запускает интерактивную операцию rebase только для трех последних коммитов.

git checkout feature git rebase -i HEAD~3

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

Если с помощью этого способа вы хотите переписать всю функциональную ветку, найти начальное положение функциональной ветки поможет команда git merge-base. Следующая команда возвращает ID коммита начального положения, который затем можно передать в команду git rebase:

git merge-base feature main

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

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

Варианта очистки локальных коммитов с интерактивным использованием rebase с помощью команды git merge не существует.

Включение восходящих изменений в функциональную ветку

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

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

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

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

С таким ветвлением можно работать так же, как и при включении вышестоящих изменений из ветки main: либо выполнить слияние в локальную ветку feature для ветки john/feature, либо выполнить перебазирование локальной ветки feature на конец ветки john/feature.

Обратите внимание: такое перебазирование не нарушает «золотое правило», поскольку перемещаются только коммиты вашей ветки feature, тогда как предшествующие элементы остаются нетронутыми. В сущности, эта операция позволяет лишь добавить ваши изменения к наработкам Джона. Чаще всего это проще, чем выполнять синхронизацию с удаленной веткой посредством коммита слияния.

По умолчанию команда git pull выполняет слияние. Однако если передать ей параметр --rebase, будет выполнено перебазирование для удаленной ветки.

Проверка функции с помощью запроса pull

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

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

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

Внедрение утвержденной функции

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

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

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

git checkout feature
git checkout -b temporary-branch
git rebase -i main
# [Clean up the history]
git checkout main
git merge temporary-branch

Резюме

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

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

Что такое SourceTree и как его использовать

Дата публикации: 5 ноября 2019 г.
Последнее обновление: 21 июля 2022 г. Если вы не уверены в определении и цели, читайте дальше. Вы получите ответы на большинство своих вопросов раньше, чем увидите последний абзац.

Вот что мы рассмотрим в этой записи блога:

  • Вместо глоссария
  • Классные функции SourceTree, которые поставляются с клиентом
  • Как использовать SourceTree
  • Расскажите

Вместо глоссария

SourceTree — это клиент Mercurial и Git. Он доступен для обеих платформ под управлением Windows и iOS. Программное обеспечение бесплатное. Sourcetree удобен для новичков. Он имеет интуитивно понятный графический интерфейс для репозиториев, сокращающий разрыв между пользователем и Git. Используя технологию, вы быстро освоите репозиторий. Что касается зрелых разработчиков, то они также выиграют от использования исходного дерева, поскольку оно позволяет им сосредоточиться на написании кода и работать более продуктивно.

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

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

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

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

Отличные функции SourceTree, с которыми поставляется клиент

Sourcetree — это больше, чем Git GUI, он позволяет использовать все возможности Git через упрощенный интерфейс.

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

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

  • SourceTree совместим с двумя популярными ОС, поэтому вы можете использовать всю мощь Git независимо от ваших предпочтений (Windows или Mac).

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

  • Ваша команда может следить за активами больших данных из одного места благодаря поддержке SourceTree в Git Large File Support.

  • Вам не нужно покидать SourceTree, чтобы найти ветки, коммиты и изменения файлов, делайте это в приложении.

  • SourceTree и готовое ветвление git-flow позволяют не загромождать репозитории, что способствует разработке больших объемов.

  • Вам понравится интерактивный инструмент перебазирования, который предлагает SourceTree. Используйте его, чтобы сделать коммиты чище и понятнее.

  • Управляйте своими проектами с помощью подмодулей. Группируйте их, устанавливайте зависимости и делайте другие полезные вещи.

  • Поиск и копирование удаленных репозиториев через удобный интерфейс SourceTree.

Как использовать SourceTree

Когда вы работаете в команде, некоторые члены или все они работают удаленно. Это не проблема, поскольку современные технологии, включая SourceTree, позволяют нам управлять проектами из любого места.

Дело в том, что SourceTree позволяет синхронизировать работу и управление проектами, хранящимися в Git.

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

  1. Чтобы начать работу с SourceTree, создайте новый проект на GitHub (нажмите «Начать проект»).
Затем вам нужно будет заполнить различную информацию в репозитории. Это необходимо, чтобы оставить четкие подсказки для людей, связанных с проектом.

2. Вам нужно назвать репозиторий. Затем кратко опишите, что такое репозиторий.

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

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

Все доступные репозитории будут видны в левой части панели инструментов.

5. Вы можете войти в любой репозиторий, нажать «Клонировать или загрузить» и увидеть раскрывающийся список. Скопируйте веб-URL и перейдите в SourceTree.

6. Откройте форму клонирования и вставьте https в поле «Ссылка на источник».

7. После этого вам нужно будет определить «Путь назначения» и «Имя».

Здесь мне нужно сделать небольшое примечание:

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

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

8. Вы можете создать новую ветку на вкладке «Ветки».

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

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

b) Затем отметьте «Отправлять изменения немедленно». Программное обеспечение отправит изменения в соответствующую ветку, когда вы нажмете кнопку «Зафиксировать».

c) Нажмите «Отправить» в правом верхнем углу. После этого вы увидите выпадающее меню с репозиториями. Здесь вы можете указать, в какую ветку загружать код.

Вот как SourceTree взаимодействует с GitHub и загружает изменения. Теперь вы можете увидеть изменения на GitHub после обновления страницы.

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

Говорите

Надеюсь, эта статья помогла вам, и теперь вы знаете, что такое SourceTree и чем он может вам помочь. Собираетесь ли вы начать использовать SourceTree для визуализации процессов Git? Согласны ли вы с тем, что использование командной строки ограничивает представление, и вы не можете наблюдать за тем, что происходит в фоновом режиме? Это может быть особенно запутанным, когда вы управляете большими проектами, которые включают в себя множество веток, разработчиков и коммитов. SourceTree может разобраться за вас. Хорошая новость заключается в том, что программное обеспечение можно загрузить бесплатно. Имеет ли это смысл для вас?

Подпишитесь на блог Alpha Serve

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

Как использовать Confluence с Jira — лучшие примеры использования

Как максимально эффективно использовать программное обеспечение Jira с Git

Соединитель Tableau для Jira: как подключить Jira к Tableau

Соединение Jira и Power BI Desktop: Jira API vs Add -ons

Зачем и как интегрировать Git с Jira?

Зачем интегрировать Git и JIRA и как это сделать

Что такое SourceTree и как его использовать

Опубликовано: 5 ноября 2019 г.
Последнее обновление: 21 июля 2022 г. Если вы не уверены в определении и цели, читайте дальше. Вы получите ответы на большинство своих вопросов раньше, чем увидите последний абзац.

Вот что мы рассмотрим в этой записи блога:

  • Вместо глоссария
  • Отличные функции SourceTree, которые поставляются с клиентом
  • Как использовать SourceTree
  • Расскажите

Вместо глоссария

SourceTree — это клиент Mercurial и Git. Он доступен для обеих платформ под управлением Windows и iOS. Программное обеспечение бесплатное. Sourcetree удобен для новичков. Он имеет интуитивно понятный графический интерфейс для репозиториев, сокращающий разрыв между пользователем и Git. Используя технологию, вы быстро освоите репозиторий. Что касается зрелых разработчиков, то они также выиграют от использования исходного дерева, поскольку оно позволяет им сосредоточиться на написании кода и работать более продуктивно.

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

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

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

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

Отличные возможности SourceTree, с которыми поставляется клиент

Sourcetree — это больше, чем Git GUI, он позволяет использовать все возможности Git через упрощенный интерфейс.

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

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

  • SourceTree совместим с двумя популярными ОС, поэтому вы можете использовать всю мощь Git независимо от ваших предпочтений (Windows или Mac).

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

  • Ваша команда может следить за активами больших данных из одного места благодаря поддержке SourceTree в Git Large File Support.

  • Вам не нужно покидать SourceTree, чтобы найти ветки, коммиты и изменения файлов, делайте это в приложении.

  • SourceTree и готовое ветвление git-flow позволяют не загромождать репозитории, что способствует разработке больших объемов.

  • Вам понравится интерактивный инструмент перебазирования, который предлагает SourceTree. Используйте его, чтобы сделать коммиты чище и понятнее.

  • Управляйте своими проектами с помощью подмодулей. Группируйте их, устанавливайте зависимости и делайте другие полезные вещи.

  • Поиск и копирование удаленных репозиториев через удобный интерфейс SourceTree.

Как использовать SourceTree

Когда вы работаете в команде, некоторые члены или все они работают удаленно. Это не проблема, поскольку современные технологии, включая SourceTree, позволяют нам управлять проектами из любого места.

Дело в том, что SourceTree позволяет синхронизировать работу и управление проектами, хранящимися в Git.

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

  1. Чтобы начать работу с SourceTree, создайте новый проект на GitHub (нажмите «Начать проект»).
Затем вам нужно будет заполнить различную информацию в репозитории. Это необходимо, чтобы оставить четкие подсказки для людей, связанных с проектом.

2. Вам нужно назвать репозиторий. Затем кратко опишите, что такое репозиторий.

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

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

Все доступные репозитории будут видны в левой части панели инструментов.

5. Вы можете войти в любой репозиторий, нажать «Клонировать или загрузить» и увидеть раскрывающийся список. Скопируйте веб-URL и перейдите в SourceTree.

6. Откройте форму клонирования и вставьте https в поле «Ссылка на источник».

7. После этого вам нужно будет определить «Путь назначения» и «Имя».

Здесь мне нужно сделать небольшое примечание:

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

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

8. Вы можете создать новую ветку на вкладке «Ветки».

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

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

b) Затем отметьте «Отправлять изменения немедленно». Программное обеспечение отправит изменения в соответствующую ветку, когда вы нажмете кнопку «Зафиксировать».

c) Нажмите «Отправить» в правом верхнем углу. После этого вы увидите выпадающее меню с репозиториями. Здесь вы можете указать, в какую ветку загружать код.

Вот как SourceTree взаимодействует с GitHub и загружает изменения. Теперь вы можете увидеть изменения на GitHub после обновления страницы.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *