Недавно я изменил то, как я работаю над репозиториями, когда мне приходится работать с другими. Это была спасательная жизнь.
Внизу есть пример 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»