Рабочий процесс Git для разработчика-одиночки (общий новичок в git)

Я решил, что мне пора начать использовать Git в PHP-проекте, который я случайно разрабатывал более десяти лет. (Пожалуйста, никаких лекций от полиции контроля версий!) Из-за сложной настройки, необходимой на моем VPS для выполнения всего, что нужно проекту (особенно структура с одной кодовой базой и несколькими клиентами и установка TeX с поддержкой японского языка для создания специальных PDF-файлов). ), невозможно настроить среду разработки на моем локальном компьютере с Windows. Но у меня есть тестовая зона на сервере, где я могу играть, так что это моя область разработки. В настоящее время я использую Filezilla для доступа к серверу и открываю файлы непосредственно в Notepad++, и когда я готов увидеть свое редактирование в действии, я просто сохраняю и позволяю Filezilla загрузить. Когда на тестовом стенде все выглядит хорошо, я копирую файлы в зону рабочей кодовой базы. Да, это не дает мне никакой истории моих изменений, кроме моих собственных комментариев, и я должен быть осторожен, чтобы не смешивать исправления ошибок с недоработанными новыми функциями. Я вижу ценность веток Git для различных текущих обновлений.

Вчера у меня промокли пальцы на ногах. Сначала я создал учетную запись Github, а затем (по рекомендации учебника) установил Git для Windows (с собственным Bash и крошечным графическим интерфейсом) и Kdiff3 и выполнил некоторые инструкции по настройке Git Bash. Однако после всего этого мне пришлось установить что-то еще, чтобы взаимодействовать с моей учетной записью Github (соответственно названной Github для Windows), которая, похоже, делает все то, что две другие программы должны были делать для меня. Во всяком случае, затем я сделал простую задачу в качестве своего первого набега на мир Github - я добавил функциональность в чужой плагин jQuery и хотел поделиться ею с разработчиком, поэтому я разветвил его репозиторий, клонировал его на свой компьютер, перезаписал файл, который я ранее отредактировал и протестировал, синхронизировал с моей учетной записью Github и отправил запрос на извлечение. Вся терминология в этом последнем предложении была для меня совершенно новой, поэтому я был очень горд собой, что продвинулся так далеко. ;) Но я думаю, что мне нужно было только программное обеспечение Github, а не программное обеспечение Git - трудно понять, каким учебникам верить.

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

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

  2. Установите версию Git для Linux на моем VPS, чтобы «локальное» расположение файла Git было испытательным стендом, и используйте Git через PuTTY для выполнения локальных коммитов. Проще для файловой структуры (копия на моем ПК вообще не нужна), но более громоздко использовать Git:

    • I'm not on PuTTY very frequently, and for some reason the connection often dies on me and I have to restart.
    • Несмотря на то, что командная строка Linux является родной средой обитания Git, мне, вероятно, удобнее работать с графическим интерфейсом (потому что я быстро забываю синтаксис команд — думаю, старый мозг).

    Кроме того, поскольку я никогда не использовал программу Git, которую я установил здесь, я не уверен, буду ли я использовать Git или Github на сервере.

  3. Какой-то другой сценарий, поскольку ни № 1, ни № 2 вообще не используют Git/Github для управления областью производственных файлов, что, вероятно, было бы хорошей идеей, чтобы я не забыл скопировать все, что мне нужно.

Я попытался изучить возможность использования графического интерфейса на основе PHP для реализации идеи № 2 (чтобы мне не приходилось использовать PuTTY для повседневных операций), но, похоже, все обсуждения таких инструментов предполагают, что либо вы пытаетесь создать свой собственный сервис Github или что «локальный» клонированный репозиторий физически находится на вашем локальном ПК (с xAMP, работающим на любой ОС). Но, может быть, программного обеспечения Github, которое я использовал, достаточно для всего этого — трудно сказать. Я еще не понимаю взаимодействие между основным общедоступным репозиторием на Github, где-то ветками (также на Github?), по крайней мере, двумя наборами файлов на моем веб-сервере (испытательная и рабочая зона), программным обеспечением Github, программным обеспечением Git, и клавиатура/экран компьютера, за которым я сижу.

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


person OsakaWebbie    schedule 03.04.2013    source источник
comment
TLDR — но если вам нужна локальная установка для зеркалирования вашей удаленной, проверьте vagrant.   -  person Paul Dixon    schedule 03.04.2013
comment
Всегда можно настроить среду разработки, и это первое, на что следует обратить внимание. VirtualBox и vagrant помогут.   -  person deceze♦    schedule 03.04.2013
comment
Хотя вы сказали, что не возражаете против того, чтобы ваши репозитории git были общедоступными в github, вы можете иметь частные репозитории git на bitbucket.org (до 5 разработчиков IIRC)   -  person Carlos Campderrós    schedule 03.04.2013
comment
Пол: Я пока не знаю, что мне нужно, поэтому объяснил свою ситуацию. Извините, это было слишком длинно для вас, но я с нетерпением жду ответа от людей, которые ДЕЙСТВИТЕЛЬНО читали это. deceze: Извините, что сказал, это невозможно. Это, вероятно, возможно для гуру Linux, но мне потребовались месяцы, чтобы все это заработало на моем VPS. Я не могу скопировать весь свой VPS в коробку, поэтому мне придется установить CentOS и большинство других вещей в тех же версиях (а затем синхронизировать их). Я даже не помню, как я сделал большую часть этого (особенно TeX). Кажется, не стоит просто иметь возможность тестировать в автономном режиме - я ошибаюсь?   -  person OsakaWebbie    schedule 03.04.2013
comment
Карлос: Да, несколько минут назад я видел руководство по использованию только git полностью локально — я не осознавал такой возможности (я продолжаю путать git и github). Но я не знаю, разумно ли это, или мне следует каким-то образом держать хранилище кода моего VPS в цикле.   -  person OsakaWebbie    schedule 03.04.2013
comment
@Osaka Если вы не можете воспроизвести свою настройку, это должно чрезвычайно беспокоить. Если что-нибудь, вообще что-нибудь случится с вашим рабочим сервером... вы облажались? Если жесткий диск, на котором он работает, выйдет из строя (а однажды будет), вы просто облажались? Гораздо лучше потратить некоторое время на то, чтобы воспроизвести вашу настройку, чем отказаться от 10 лет работы из-за прихоти аппаратного обеспечения. Вы можете создавать сценарии, которые автоматизируют настройку сервера. Это одноразовая инвестиция с бесконечной отдачей. Посмотрите на Ansible, Chef, Puppet или подобные инструменты.   -  person deceze♦    schedule 03.04.2013
comment
Думаю, я слишком сильно завишу от резервных копий хостера - я вас слышу, и я посмотрю на инструменты. Я просто слишком размазан - я не могу идти в ногу с новыми стандартами и ожиданиями (в лучшем случае я все еще новичок в jQuery/AJAX, мой PHP-код еще не является ООП, а на нескольких страницах даже все еще есть таблица -макет!), список дел, которые я обещал своим пользователям, становится длиннее, а не короче, я слаб в системном администраторе (как вы уже догадались), у меня никогда не было времени написать пользователю документы и т. д. (Я занимаюсь этим неполный рабочий день, волонтер, и мое последнее формальное школьное образование было в 80-х годах.) Остановите вращение мира - мне нужно наверстать упущенное! :-о   -  person OsakaWebbie    schedule 03.04.2013


Ответы (3)


Вот один из способов решения проблемы:

Вам понадобятся три репозитория:

  • локальное репо для редактирования кода. [1]
  • голый удаленный репозиторий на вашем сервере. Это будет место, которое недоступно для публичного просмотра, но вы можете подключиться к нему по ssh. [2]
  • Производственная среда. [3]

Вот реализация:

workstation$ cd localWorkingDirectory/
workstation$ git init
workstation$ git add .
workstation$ git commit -m 'initial commit'
workstation$ ssh login@myserver
myserver$ mkdir myrepo.git
myserver$ cd myrepo.git
myserver$ git init --bare
myserver$ exit
workstation$ cd localWorkingDirectory/
workstation$ git remote add origin login@myserver:myrepo.git
workstation$ git push origin master

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

workstation$ git push origin BRANCH

Когда вы будете готовы перевести ветку version2 в производство: сделайте это

workstation$ git push origin version2
workstation$ ssh login@myserver
myserver$ git clone path/to/myrepo.git productionDirectory
myserver$ cd productionDirectory
myserver$ git checkout version2

О, нет! Это не работает! лучше переключитесь обратно на версию 1!

workstation$ ssh login@myserver
myserver$ cd productionDirectory
myserver$ git checkout version1
person Hal Canary    schedule 03.04.2013
comment
Спасибо за примеры - я еще не понимаю каждую команду, но суть потока я уловил. Вы даже включили способ dev-производства, если я буду осторожен с ветками. Вопрос: Какова связь между вашим репозиторием № 2 и каталогом испытательного стенда dev? Поскольку я буду проводить тестирование (в том числе метод проб и ошибок, сделанный задолго до того, как потребуются какие-либо коммиты) в каталоге разработчиков (по крайней мере, пока, пока troelskn и Ник не убедят меня воссоздать его локально [подмигивает]), что, если я просто сделаю свое локальное репо там? (т.е. есть только #2 и #3, но не #1) - person OsakaWebbie; 03.04.2013
comment
репозиторий № 2 — голый репо (посмотрите, что я имею в виду); это упрощает отправку с вашей рабочей станции. Сделайте свой тестовый каталог еще одним клоном репозитория № 2. - person Hal Canary; 03.04.2013
comment
Ха-ха! Я погуглил голый репозиторий и первую страницу, которую я посмотрел at не только хорошо все объяснил, но и почитайте комментарии — похоже, что Луис делает именно то, что делаю я! Вы все еще упомянули мою рабочую станцию ​​(предположительно, имея в виду мой локальный ПК), но прямо сейчас, когда у меня еще нет локальной среды разработки, есть ли какая-либо причина для извлечения/передачи чего-либо на/с моего ПК? №1: голая версия, №2: клонирование в разработку, №3 клонирование в рабочую среду звучит неплохо. - person OsakaWebbie; 03.04.2013
comment
«…есть ли какая-либо причина для извлечения/передачи чего-либо на/с моего ПК?» Не совсем. Мне нравится использовать локальный редактор, потому что он более отзывчив. Это также означает, что где-то есть дополнительная избыточная копия всего репозитория. - person Hal Canary; 03.04.2013
comment
Я тоже использую локальный редактор — Filezilla обрабатывает загрузку/выгрузку внутри с помощью временной папки. В Filezilla я щелкаю правой кнопкой мыши имя удаленного файла и выбираю «Просмотр/редактирование», и файл появляется в Notepad++. После того, как я сохраняю свои изменения, когда я переключаю фокус на окно Filezilla, оно автоматически предлагает сделать такое же сохранение на удаленной стороне. Я могу решить проблему избыточности, просто выработав привычку делать резервную копию репо при переходе в производственную среду. Я делаю что-то подобное сейчас, но это немного менее организовано. Спасибо всем за ваши мысли и помощь - кажется, у меня есть план! - person OsakaWebbie; 04.04.2013
comment
Еще один быстрый вопрос: имеет ли значение, где находится голое репо? Я установил git на свой CentOS 5.6 VPS и собираюсь создать для него пользователя, которого я буду использовать через SSH для выполнения команд git. Я предполагаю, что как только я выберу домашний каталог для этого пользователя, репозиторий автоматически перейдет туда (хотя это всего лишь предположение), поэтому я решил остановиться на этом месте и спросить. - person OsakaWebbie; 04.04.2013
comment
Традиционно пустой каталог репозитория называется ProjectName.git. Я бы рекомендовал $HOME/repository/ProjectName.git . - person Hal Canary; 04.04.2013
comment
И я обычно помещаю свои рабочие репозитории в $HOME/src/ProjectName. - person Hal Canary; 04.04.2013

Вам не нужен github (или любой другой центральный магазин), чтобы начать использовать git. Тем более, что вы разработчик-одиночка. Git работает прямо на вашем компьютере, без каких-либо серверных компонентов (в отличие, например, от subversion). Просто git init и начинайте коммитить.

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

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

person troelskn    schedule 03.04.2013
comment
Что вы подразумеваете под фиктивным сервисом? Две самые большие вещи, которые в настоящее время требуют странностей на сервере: (1) код ожидает поддомен в URL-адресе для определения клиента (база данных, хранилище файлов, пользовательский CSS, если таковой имеется), поэтому необходимо настроить сервер разработки. туда; (2) Японская версия TeX со встраиваемыми шрифтами. Я полагаю, что я мог бы просто не тестировать материал TeX локально, но среда с одной кодовой базой / несколькими БД на основе vhost должна быть довольно хорошо смоделирована, чтобы код был счастливым. Возможно, есть лучшая архитектура, но это то, что у меня есть на данный момент. - person OsakaWebbie; 03.04.2013
comment
Что касается развертывания по сценарию: я мог бы легко написать сценарий оболочки для синхронизации всего этого, но когда у меня есть вещи на стороне разработчиков, которые все еще выполняются (что происходит почти все время), мне нужно быть осторожным. Вот почему я подумал, что git может как-то помочь с этим. - person OsakaWebbie; 03.04.2013
comment
Я бы посоветовал вам, по крайней мере, нуждаться в среде разработки, которая как минимум максимально приближена к жизни. Здесь нет действительно правильного ответа. Иногда у меня есть несколько локальных виртуальных машин, а иногда я просто копирую свою живую среду на aws и использую сценарии/шапку для развертывания кода разработки. Разделение кода разработки и живого кода осуществляется с помощью разных веток. Так что вам предстоит осваивать/жить и развиваться. Затем, когда вы будете готовы выпустить код разработки в live, вы просто объедините его с live/master. - person Nick; 03.04.2013
comment
Что касается развертывания, очень простое решение - написать скрипт, который создает новый клон вашего репо во временной папке rm -rf .git, заархивирует все это и скопирует на сервер, а затем извлечет его туда. Таким образом, вы не получите никаких незафиксированных изменений. - person troelskn; 03.04.2013
comment
@Nick: виртуальные машины являются локальными, но AWS — это тип удаленного сервера, так чем же репликация живой среды на AWS отличается от моей репликации на том же сервере, что и моя живая среда, чтобы она могла использовать те же самые инструменты? Простите меня, если это глупый вопрос, но, если не считать замечания Дезиза о безопасности, это просто звучит как дополнительная работа. - person OsakaWebbie; 03.04.2013
comment
Да в принципе они одинаковые. Однако, с моей точки зрения, удаленная настройка моей среды означает, что я полностью отделяю свою работу от моих локальных компьютеров. Имея пару ноутбуков и настольных компьютеров, становится неважно, где я работаю, что и где настраивается. Вместе с github я могу развиваться где угодно и где угодно. Но вы совершенно правы - на самом деле не имеет значения, где он установлен. Мне тоже помогает, когда мне нужно показать работу другим и т. д. - person Nick; 04.04.2013
comment
Что я обычно делаю при запуске или принятии проекта, так это настраиваю среду (без кодовой базы, где это возможно) и сохраняю ее как изображение на aws. Тогда создание новых экземпляров с использованием предварительно настроенной среды является тривиальной задачей. Так что, если у вас настроена живая среда, это означает, что dev уже настроен и т. д. - person Nick; 04.04.2013

Я бы определенно посмотрел на что-то вроде capistrano для вашей текущей настройки разработки.

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

git commit -a 
git push origin develop
cap deploy:dev

Когда я работаю над Windows, я обычно пытаюсь воспроизвести среду развертывания, которая у меня есть, с виртуальными машинами локально, используя что-то вроде виртуального бокса Sun. Таким образом, вы можете свести к минимуму потенциальные проблемы со средой, продолжая вести локальную разработку. Затем вы можете просто использовать шпатлевку для подключения по ssh к вашей локальной виртуальной машине. Настройте совместное использование виртуальной машины и вашей хост-ОС, и все ваши стандартные IDE/редакторы также будут работать. Я считаю, что это предпочтительнее, чем удаленная настройка vps, но все работает.

person Nick    schedule 03.04.2013
comment
Capistrano — прекрасный инструмент, но для тех, кто только начинает работать с VC и, предположительно, не имеет никакого опыта работы с Ruby, я думаю, что это может быть излишеством. Лучше всего начать с простого сценария оболочки. - person troelskn; 03.04.2013
comment
Это правда, но я думаю, что это одна из тех вещей с небольшим подмножеством команд и опций, а не изучение bash/ssh/scp и т. д. Но верный момент. - person Nick; 03.04.2013
comment
У меня даже не установлен Ruby. Кроме того, у меня есть только одно место, где я развертываю свой код (это служба с одной кодовой базой, а не веб-приложение с несколькими установками), так что это было бы не очень полезно. Но я согласен с тем, что мне, вероятно, нужно использовать командную строку, чтобы почувствовать Git — у меня такое впечатление от руководств. Должен ли я тогда сделать свой испытательный стенд местом расположения репо? - person OsakaWebbie; 03.04.2013
comment
Как было сказано ранее, github не нужен, но он и другие сервисы, безусловно, упрощают работу. Репозиторий git по своей природе является автономным, но github (или ваш собственный сервер/другая служба) необходим, если вы хотите обновить свой код на удаленном сервере через git. Однако так же легко использовать что-то вроде scp/rsync/ftp, чтобы получить этот код. Проблема заключается в том, насколько доступно ваше локальное репо для vps разработки. Поскольку его всегда нужно будет «вытягивать» из того, что вы считаете авторитетным. - person Nick; 03.04.2013
comment
@nick - или вы можете просто передать ssh на рабочий сервер, а не тянуть с сервера. git через ssh очень прост. - person troelskn; 03.04.2013
comment
В настоящее время мне интересно, могу ли я, чтобы мой локальный репозиторий был на самом деле на моем VPS - в этом случае он был бы вполне доступен для каталога разработки. (Просто для уточнения: области разработки и производства — это просто соседние каталоги на одном сервере с немного разными правилами vhost — это не два сервера.) Если я это сделал, достаточно ли git? Или ваше второе предложение означает, что мне нужен github, если я физически не сижу за компьютером, где находится репо? - person OsakaWebbie; 03.04.2013