Метод-1:
Мы можем использовать функцию списка и .join()
.
>>> my_list = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]
>>> for item in my_list:
print ' '.join(str(x) for x in item)
1 2 3
2 3 4
4 5 6
Метод-2:
>>> my_list = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]
>>> for item in my_list:
for x in item:
print x,
print
1 2 3
2 3 4
4 5 6
Внутренний print
с запятой гарантирует, что элементы внутреннего списка будут напечатаны в одной строке. Внешний print
гарантирует, что для следующего внутреннего списка он печатает в следующей строке.
Ответвление для каждого запроса на изменение походит на излишество и возможно некоторую проблему позже.
попытайтесь сгруппировать запросы на изменение в логические области так, чтобы Вы видели, что определенный набор изменений имеет логически связанный эффект на приложение. Создайте ответвления для них.
Я думаю, что реальный ответ на вопрос, хотя должен зафиксировать клиент. Необходимо прояснить по контракту, что они, произвольный запрос на изменение собирается стоить им денег и это могло бы замедлить их. Если это поддержит на высоком уровне, то Ваш репозиторий SVN будет наименьшим количеством беспокоящегося аспекта проекта.
Ответвление на протестированное, рабочее изменение.
Тег на выпуск версии.
Разработайте в соединительной линии.
Повториться.
:)
Что относительно того, чтобы создать ответвление для активной версии Вашего клиента, ответвление для Вашей новой разработки и ответвление для Ваших продолжающихся изменений.
Работа в новой разработке переходит, когда Вы не наводняетесь задачами.
Работа в продолжающихся изменениях переходит при фиксации всего этого забавного материала, они продолжают сводить Вас с ума с. Когда Вы имеете фиксацию, объединяете ее с "живым" ответвлением и с ответвлением "новой разработки".
Тем путем распределение Вашего клиента находится в своем собственном мире, Ваша новая разработка продвигается (и может быть объединен каждый раз, когда Вам нужен он), и Ваше обслуживание также получено.
Мы работаем в ответвлении новой разработки, затем каждый раз, когда мы решаем сделать патч, мы переходим соединительная линия и затем отсылаем тот патч для Q/A. Если это идет назад и вперед некоторое время, мы работаем в том ответвлении для фиксации тех проблем, объединяющихся назад с соединительной линией в случае необходимости, чтобы гарантировать, что все находится в синхронизации. Если что-то возвратилось после факта, который должен был быть обращен в предыдущей версии, мы можем всегда фиксировать ее назад в том ответвлении, с другой стороны, просто объединять ее в соединительную линию.
Ответвление на запрос на изменение, с соответствующим увеличением стоимости для клиента для дополнительного управления, является прекрасным подходом для этой проблемы.
Это будет стоить Вам больше, с точки зрения времени, ресурсы, доступные для работы над другими функциями, и т.д., но с большим количеством несвязанных изменений или функциями проекта, которые останавливаются или отменили, это - вероятно, один из лучших подходов.
Это - действительно системный агностик SCM - но Подверсия может, конечно, сделать то, что необходимо.
Сценарий, объясненный новичком потока, является примером шаблона ответвлений функции: http://svnbook.red-bean.com/en/1.5/svn.branchmerge.commonpatterns.html#svn.branchmerge.commonpatterns.feature
Они очень usefule, когда необходимо сохранить основную строку разработки (соединительная линия) стабильный, и необходимо разработать много функций, которые потенциально могли повредить основную строку.
Оборотная сторона - то, что необходимо сохранить различные ответвления в синхронизации с соединительной линией: в то время как ответвление для функции A находится в разработке, ответвление для функции B могло достигнуть стабильного состояния и закрывается и объединилось в соединительной линии: в этой ситуации необходимо объединить изменения, представленные ответвлением B от соединительной линии до ответвление. Так, это - хорошая привычка часто объединять ответвления с соединительной линией для предотвращения проблематичной ситуации уникального большого слияния в конце жизни ответвления с большим количеством конфликтов, чтобы разыскать и решить.
Возможно, Подверсия здесь не является лучшим инструментом для задания. Хотя создание всех этих ответвлений является дешевым в SVN, повторно объединение их может стать трудоемким и болезненным.
Если Вы взглянете на МЕРЗАВЦА вместо SVN, то Вы найдете систему управления версиями, которая более мощна при слиянии в целом. Добавленный к этому, это имеет определенную функцию "избирательного подхода к выбору". Таким образом, единственные фиксации могут быть легко "выбраны" от одного дерева разработки и добавлены к другому (живое ответвление). Кроме того, это легко и удобно в МЕРЗАВЦЕ объединить несколько фиксаций в один сингл один (можно даже добавить к определенной фиксации от другого дерева).
Так создание фиксаций единственной функции и затем избирательный подход к выбору их могли быть решением для Вас.
Имейте ответвление для каждого ВЫПУСКА. Объединение столько изменений в единственный выпуск, сколько имеют смысл - имеющий больше ответвлений, обычно хорошо, можно объединить их легко в большинстве случаев, разбивание их немного более хитро.
Наличие ответвления для каждого выпуска означает, что у Вас также есть ответвление для того, что в настоящее время находится на производстве (или что как раз собирается быть выпущенным, когда выпуски находятся на рассмотрении после слияния, но перед фактическим развертыванием).
Это - то, что мы делаем так или иначе.
На моем рабочем месте у нас есть следующая система:
При выполнении партии быстрых изменений в "живом" ответвлении проекта у Вас должен быть серьезный процесс рассмотрения кода для сокращения шанса повреждения его. Обзор кода должен быть сделан прежде, чем сделать регистрацию; и держите базовую разработку отдельно от того ответвления.
После того как изменение утверждено, Вы можете регистрация изменение (и/или объединитесь от Вас работающий ответвление), и создайте новый "тег", после того как это сделано.
Когда предполагаемые часы будут больше чем 8, используйте ответвление.
С помощью git я делаю ветку для каждого небольшого изменения, и мне это нравится!