Рубрики
Uncategorized

Мой рабочий процесс git worktree

Недавно я изменил то, как я работаю над репозиториями, когда мне приходится работать с другими. Это был … Tagged with git, DevOps, учебник.

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

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

Болевые точки

Давайте начнем с обычного рабочего процесса GIT и причины его боли. Сначала вы клонируете репо. Вы создаете свою филиал и начинаете кодировать. Тогда ваш приятель поражает вас в Slack с помощью огромного пиара и прокручивая Diff в GitHub недостаточно, чтобы вас одобрить. Большой. Теперь вам нужно спрятать код, над которым вы работаете, обновить свою базу, чтобы у вас была их филиал и все это вытащило. Теперь вы можете наконец просмотреть PR. Это чокнутые. Это раздражает, и вы полностью теряете след, над чем просто работали. Я даже не прикрывал возвращение к твоему филиалу и снова начинал.

Рисовать картину с историей разработчика

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

Введите git worktree

Во -первых, вот ссылка на Git Worktree Документация Анкет Я не буду покрывать все предостережения. Так что проверьте это, чтобы узнать о гораздо больше информации.

GIT способен поддерживать несколько рабочих деревьев одного репо. Вы слышали это правильно. С помощью git worktree вы можете проверить более одной ветви за раз и разумно поддерживать каждую из этих ветвей.

Мне пришлось переосмыслить структуру папок, когда я начал использовать Worktree. Сначала это было странно. Но это было удивительно после того, как я поселился.

Когда я клонирую репозиторий с учетом Worktree, я сделаю это немного по -другому.

$ git clone git@github.com:googleapis/python-tasks.git python-tasks/main

Здесь живет главная ветвь. Я действительно не трогаю его, кроме как получить/тянуть и создавать новые ветви с Worktree. Это мой чистый источник истины, и мне нравится держать ее таким образом.

Отсюда я создам новую филиал для того, над чем я работаю Но я не буду использовать Git Branch $ {BranchName} или git cakeout -b $ {branchname} Анкет Я сделаю это с Worktree, пока я нахожусь в папке основной ветви.

$ git worktree add -b my-awesome-branch ../my-awesome-branch main

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

Итак, теперь у нас есть:

~/Projects
  /python-tasks
    /main
    /my-awesome-branch

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

$ git worktree list
~/Projects/python-tasks/main                63df2ef [master]
~/Projects/python-tasks/my-awesome-branch   63df2ef [my-awesome-branch]

Я перехожу к этому каталогу. Я делаю свою работу. Следующее, что я знаю, я получаю сообщение от товарища по команде, и ему нужно, чтобы я сделал этот пиар -обзор, о котором мы говорили. С git worktree это слишком легко. Я просто возвращаюсь к Майн и добавляю его ветвь в свой Worktree.

$ git worktree add --track -b add-appengine-flexible-tasks-samples ../ppr-review origin/add-appengine-flexible-tasks-samples

Preparing worktree (new branch 'add-appengine-flexible-tasks-samples')
Branch 'add-appengine-flexible-tasks-samples' set up to track remote branch 'add-appengine-flexible-tasks-samples'  from 'origin'.
HEAD is now at e2c8eee chore: generate noxfile.py for samples

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

git worktree добавить : Мы видели это. Это базовая команда создать ветвь и рабочее дерево

-Трак : Это устанавливает режим отслеживания. Нам нужно, чтобы отслеживать удаленную ветку

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

../pr-review Путь, который мы хотим, чтобы он проверил. Не забывай, что ../

Происхождение/Add-Appengine-Flegeble Tasks-Samples Наконец -то / что мы хотим проверить.

Теперь, если мы сделаем GIT Worktree List Мы увидим ветвь наших друзей в нашем рабочем дереве, готовом к обзору.

$ git worktree list
~/Projects/python-tasks/main                63df2ef [master]
~/Projects/python-tasks/my-awesome-branch   63df2ef [my-awesome-branch]
~/Projects/python-tasks/pr-review           e2c8eee [add-appengine-flexible-tasks-samples]

Довольно мило.

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

$ git worktree remove pr-review

Пуф, папка ушла, и нам больше не нужно засорять наше рабочее дерево. Иногда мы леним, верно? Может, я сделал rm -rf ./pr -review Анкет Это плохо. Я только что сломал свое рабочее дерево. Папки исчезли, но GIT все еще знает об этом, когда я это делаю git worktree list Как мы можем это исправить? Пришло время просто выбрасывать все репо и снова клонировать? Что мы делаем?

От основного, как обычно:

$ git worktree prune

И теперь наша ошибка была удалена из GIT, и мы можем продолжить наш день.

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

Пример TLDR

$ git worktree add -b emergency-fix ../temp main
$ pushd ../temp
# ... hack hack hack ...
$ git commit -a -m 'emergency fix for boss'
$ popd
$ git worktree remove ../temp

Оригинал: «https://dev.to/jamesatintegratnio/my-git-worktree-workflow-186f»