Jujutsu: дело с контролем версий как боевого искусства

Как и большинство разработчиков за эти годы, я чувствовал себя комфортно с горсткой команд GIT, которые мне нужны ежедневно — и старался не вступать в большие слияния. Несмотря на то, что я регулярно продвигал использование GIT, я говорю разработчикам использовать Google, если они не могут вспомнить, как что -то сделать, чтобы не пытаться запомнить различные сценарии. Я помню сопротивление, когда приходилось объяснять, переходя от подрывной деятельности Apache, в основном вам нужны три команды, где ранее вам нужно было только две.

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

Так почему же Google использует что -то другое? Я все еще использую GIT сегодня в некоторых проектах, но в основном пластиковый SCM (теперь контролируется Unity), потому что он полностью подходит для больших файлов. Но что может сломать мертвую хватку, которую GIT имеет над большинством разработчиков?

Введите Jujutsu. В учебном пособии Стива Клабника он отмечает, что Jujutsu (или JJ) — это «DVCS, который берет лучшее из GIT, лучшее из Mercurial и синтезирует его во что -то новое, но странно знакомое». А так как Google использует его, он не вдруг исчезнет. Я знаю, что jujutsu звучит как контроль версий как боевое искусство, что не обязательно сует, но может быть основной истиной.

Для этого поста я облегчу различия, поэтому я предполагаю, что читатель, по крайней мере, знаком с GIT на работе.

Итак, с git мы знаем, что у нас Индекса Площадьи не отказавшись файламиПолем Это то, о чем говорит GIT, когда вы используете статус GIT после работы:

Таким образом, GIT распознает уже отслеживаемые файлы, которые изменились, и не отказались от появления файлов.

Рабочая копия

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

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

Хорошо, теперь я объяснил что -то интересное — и мы уже знаем, что JJ совместим с GIT — давайте установим его и сделаем игру.

Начиная

Поскольку Jujutsu сделан из ржавчины, есть различные способы его установить. С моим MacBook я просто использую:

Brew Install JJ 1 Brew Install JJ

Теперь, когда я сказал: «JJ совместим с GIT», я имел в виду, что Jujutsu использует совместимую модель, а не JJ может просто работать напрямую с существующим GIT Repo. Если я попытаюсь использовать простую инструкцию JJ статус в GIT, я получаю:

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

& gt; JJ Git Clone 1 & GT; JJ Git Clone

Как и в случае с GIT, мы предупреждаем, что мы не настроили имя пользователя и электронную почту. Нам дали подсказки об этом репо, но давайте прямо спросим, ​​каков статус с JJ St:

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

Теперь JJ ясно использует два набора идентификаторов: он использует идею Изменить удостоверение личности и Commit IdПолем Первым номером, начиная с «Y» в рабочей копии, является идентификатор изменения, второе начало с «3» — это идентификатор коммита, а у родителей есть своя собственная пара. Мы также можем увидеть, что выглядит как название Master в филиале на родительском коммите. Наша рабочая копия не имеет набора описания, тогда как родитель был запросом на притяжение.

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

Здесь это из пейджера для нашего нового репо:

Теперь мы видим, что родительский коммит имеет очень специфическую идентификационную пару, с идентификатором изменения «Zzzzzzz» и идентификатором Commit «00000000». Неудивительно, что это называется корневой коммитПолем На этот раз новый добавленный файл помечен как таковой. И помните, нет никакого указателя. Как и ожидалось, нет заданной истории или названия филиала.

Я установил свой user.name и user.email, как это было предложено, когда я сделал клон раньше, чтобы я мог путешествовать вперед. Теперь, или на самом деле, в любое время я могу описать свой рабочий коммит:

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

Итак, давайте закроем петлю и «регистрация». Мы делаем это, сказав JJ New. Это небольшое изменение акцента — мы отмечаем начало, а не конец:

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

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

Я едва использую журнал GIT, но JJ Log — это другое животное. Во-первых, вернемся к каталогу Hello-World, чтобы увидеть, как выглядит клонированное репо:

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

Хорошо, давайте сделаем то же самое с нашим свежим репо:

Мы видим корень, мой первый коммит и новый рабочий коммит. Теперь вы можете видеть, что AT Symbol — это рабочая копия, а алмаз представляет корень в этом случае. Я предполагаю, что тильда в клоне означает «историю, которой у нас нет», оставляя круг, чтобы означать «другие коммиты».

Заключение

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

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид был лондонским профессиональным разработчиком программного обеспечения в Oracle Corp. и British Telecom, а также консультантом, помогающим командам работать более гибким образом. Он написал книгу по дизайну пользовательского интерфейса и с тех пор пишет технические статьи …. Подробнее от Дэвида Истмана

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

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