Sourcetree, Mercurial и создание ветки отладки

Я безуспешно пытался найти актуальную документацию для Sourcetree, поэтому решил спросить здесь. Я относительно новичок, когда дело доходит до контроля версий, и мой текущий проект - моя первая попытка. Я использую Sourcetree в Windows 7 в качестве интерфейса для Mercurial, у меня есть код разработки на моем локальном компьютере в C:\inetpub, и всякий раз, когда я делаю фиксацию, я затем переключаю Sourcetree на клонированный репозиторий на моей резервной копии. сетевой диск и сделайте Pull изменений, которые я только что зафиксировал, чтобы у меня была резервная копия истории разработки.

Что я пытаюсь понять, так это использование Sourcetree для настройки ветки отладки, чтобы я мог исправлять ошибки в версии кода, работающей на рабочем сервере, одновременно занимаясь разработкой. Очевидно, общая потребность, но я не могу понять это. Я ожидаю, что будет два места кода, поэтому я могу приостановить редактирование в середине ветки «Разработка», внести изменения в «Отладку», а они вернутся к моим изменениям в «Разработке» и закончат их, прежде чем объединять изменения в «Отладке». Если это не так, как это работает, вероятно, это часть моего замешательства. Любые предложения о том, где я могу найти ясность? Указатели на существующие учебники и тому подобное были бы в порядке, просто мне не повезло с поиском в Google, и я не смог найти никакой фактической документации Sourcetree.

ПРИМЕЧАНИЕ. Основываясь на ответах, которые я видел на другие вопросы, которые я читал о Sourcetree и Mercurial, я заранее заявляю, что не заинтересован в обсуждении хостинга внешнего репозитория, если кто-то не сможет объяснить, почему это поможет решить эту проблему.


person dspitzle    schedule 25.03.2014    source источник


Ответы (1)


Две вещи здесь:

  1. Вам не нужно менять репозиторий для получения, вы также можете отправить из своего локального репозитория;
  2. Вам не нужно 2 места кода для переключения с одной ветки на другую. Это может помочь для более крупных проектов, но я предлагаю вам сначала освоиться с Mercurial.

Итак, для номера 1 для каждого локального репо существует исходный или удаленный репозиторий по умолчанию. Он либо определяется пользователем, либо является исходным репозиторием, откуда он был клонирован. Независимо от того, нажимаете вы или тянете, по умолчанию будет использоваться тот же источник. Вы также можете использовать push/pull для нескольких источников, но на данный момент это не ваш случай. В обычном рабочем процессе просто отправляйте hg push каждый раз, когда вы делаете коммит, и ваши изменения будут распространяться на другое репо.

Во-вторых, репозиторий Mercurial, как вы уже знаете, может иметь несколько веток. Когда вы фиксируете набор изменений, это автоматически выполняется в текущей ветке. В SourceTree нажмите кнопку «Ветвь» и введите имя новой ветки. Следующий коммит, который вы сделаете, будет головой (и началом) вашей новой ветки. После этого вы можете обновлять туда и обратно между двумя ветвями, и ваш код соответственно изменится. Это означает, что вы можете в любое время обновить заголовок любой ветки, внести некоторые изменения, зафиксировать, а затем перейти к другой ветке и так далее. Так что нет, вам не нужно несколько репозиториев.

Обычно правильной практикой является наличие ветки по умолчанию (имя по умолчанию редко меняется!), где у вас есть текущий исходный код разработки. Для каждой проблемы или функции, которую вы исправляете/реализуете, создайте новую ветку из ветки по умолчанию, чтобы разместить новый код. После того, как эта ветка будет проверена и протестирована, объедините ее обратно со стандартной и закройте предыдущую.

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

Как правило, убедитесь, что на вашем сервере всегда работает код из ветки Production для более стабильного кода. По крайней мере, это то, что я понял из вашего первоначального вопроса.

person Vince    schedule 25.03.2014
comment
Что касается пункта 1, я как бы предполагал, что должна быть возможность нажать, но я начал тянуть, и, поскольку переход между репозиториями — это просто вопрос переключения вкладки, на которой я нахожусь, это не имеет большого значения. - person dspitzle; 26.03.2014
comment
В остальном, вот сценарий, который я не могу понять без двух репозиториев: я работаю над изменениями кода в example.php в репозитории по умолчанию, а на лайв-версии приходит отчет об ошибке того же файла. Я открываю версию example.php ветки debug, исправляю ошибку, фиксирую это изменение в debug и загружаю экземпляр debug примера. php на живой сервер. Затем я завершаю работу, которую делал в версии по умолчанию, фиксирую изменения в версии по умолчанию, а затем извлекаю изменения из отладки. Как мне сделать это только с одним репозиторием? - person dspitzle; 26.03.2014
comment
Просто чтобы уточнить, что меня смущает в этом сценарии, так это то, что на моем локальном сервере есть только один экземпляр example.php, поэтому не может быть двух одновременных редактируемых версий. - person dspitzle; 26.03.2014
comment
Как я уже говорил, если вам удобно работать с несколькими репозиториями, это вполне допустимый рабочий процесс. В одном репозитории у вас будет новый набор изменений в ветке debug, а в другом — новый набор изменений по по умолчанию. Просто не забудьте синхронизировать оба репозитория, нажав/потянув. Работа с одним репозиторием подразумевает фиксацию ваших текущих изменений как фиксацию по умолчанию, обновление до ветки debug, фиксацию, а затем повторное обновление по по умолчанию. для продолжения разработки. Разница в том, что у вас есть только одно репо для синхронизации и, возможно, менее подверженное ошибкам. - person Vince; 26.03.2014
comment
Синхронизация 2 репозиториев с одним общим источником подразумевает отправку обоих репозиториев в общее репо, а затем обратное откатывание. - person Vince; 26.03.2014
comment
Хорошо, я думаю, что начинаю добираться туда, но я все еще немного смущен вашим комментарием, синхронизирующим 2 репозитория с общим источником. Что является общим источником? Я более или менее думаю о том, чтобы рассматривать ветку default как содержащую эквивалент версии 1.1, в то время как debug содержит версию 1.0.x, при этом мой рабочий сервер работает копию v1.0.x, пока я не обновлю ее до v1.1. В этом случае по умолчанию является основным репозиторием, в который я буду помещать любые изменения, которые я делаю в отладке, но я не думаю, что это то, что вы подразумеваете под синхронизацией 2 репозиториев. с одним общим источником. Я что-то упускаю? - person dspitzle; 27.03.2014
comment
Кстати, спасибо, что остаетесь со мной, я нахожу ваши комментарии очень полезными. - person dspitzle; 27.03.2014
comment
Без проблем! Является ли ваш сервер внешней системой? Если это так, значит, у него также есть копия репо? Затем у вас есть 2 локальные копии и одна удаленная. Когда у вас всего 2 репозитория, синхронизация проста, каждое нажатие/вытягивание из одного в другое реплицирует полное репо в обоих местах. Если у вас есть 3 репозитория, A должен синхронизироваться с B, а затем синхронизироваться с C. И если в C также были изменения, вы синхронизируете снова. Сложность возрастает в геометрической прогрессии, пока вы не решите, что одно репо станет общим... Для вашей текущей настройки, почему бы не использовать репозиторий сервера! - person Vince; 27.03.2014
comment
Хорошо, кажется, я понимаю, что вы имеете в виду. Из-за того, как я думаю, я, вероятно, выберу 2 местных и 1 удаленную настройку, но я понимаю ваши опасения. Спасибо, что помогли мне это обдумать. - person dspitzle; 27.03.2014
comment
Конечно, дайте мне знать, если вам нужна дополнительная информация. - person Vince; 27.03.2014