Создание собственного проекта с открытым исходным кодом на портале CodePlex

Автор работы: Пользователь скрыл имя, 18 Марта 2013 в 16:38, курсовая работа

Краткое описание

Цель работы – создание собственного проекта с открытым исходным кодом на портале CodePlex.
Объектом исследования данной работы является язык программирования C#, системы управления версиями, а также порта codeplex.com.
В ходе работы проводились:
создание проекта на C# с дальнейшей публикацией на CodePlex;
изучение аспектов системы управления версиями CodePlex.

Вложенные файлы: 1 файл

ПЗ Создание собственного проекта с открытым исходным кодом на портале CodePlex.doc

— 674.00 Кб (Скачать файл)

Блокировка файла или группы файлов (для хранения признака блокировки нужен общедоступный и постоянно находящийся в онлайне центральный сервер). Это вынуждает применять специальные административные меры, если приходится работать с бинарными файлами, непригодными для автоматического слияния.

Слежение за определённым файлом или  группой файлов (изменения файлов происходят на разных серверах, слияния  и выделения ветвей происходят локально, об изменениях становится известно только при синхронизации, причём не всем разработчикам, а только тем, кто в данной синхронизации участвует).

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

Периодическая синхронизация нескольких компьютеров под управлением одного разработчика (рабочего компьютера, домашнего компьютера, ноутбука и так далее). Использование распределённой системы избавляет от необходимости выделять один из компьютеров в качестве сервера, а синхронизация выполняется по необходимости, обычно при «пересадке» разработчика с одного устройства на другое.

Совместная работа над проектом небольшой территориально распределённой группы разработчиков без выделения  общих ресурсов. Как и в предыдущем случае, реализуется схема работы без главного сервера, а актуальность репозиториев поддерживается периодическими синхронизациями по схеме «каждый с каждым».

Крупный распределённый проект, участники  которого могут долгое время работать каждый над своей частью, при этом не имеют постоянного подключения  к сети. Такой проект может использовать централизованный сервер, с которым синхронизируются копии всех его участников. Возможны и более сложные варианты — например, с созданием групп для работы по отдельным направлениям внутри более крупного проекта. При этом могут быть выделены отдельные «групповые» серверы для синхронизации работы групп, тогда процесс окончательного слияния изменения становится древовидным: сначала отдельные разработчики синхронизируют изменения на групповых серверах, затем обновлённые репозитории групп синхронизируются с главным сервером. Возможна работа и без «групповых» серверов, тогда разработчики одной группы синхронизируют изменения между собой, после чего любой из них (например, руководитель группы) передаёт изменения на центральный сервер.

В традиционной «офисной» разработке проектов, когда группа разработчиков  относительно невелика и целиком  находится на одной территории, в  пределах единой локальной компьютерной сети, с постоянно доступными серверами, централизованная система может  оказаться лучшим выбором из-за своей более жёсткой структуры и наличия функциональности, отсутствующей в распределённых системах (например, уже упомянутой блокировки). Возможность фиксировать изменения без их слияния в центральную ветвь в таких условиях легко реализуется путём выделения незавершённых работ в отдельные ветви разработки.

 

3 Руководство по созданию собственного проекта с открытым исходным кодом на портале CodePlex

 

Одним из самых удобных способов создания проекта на CodePlex осуществляется через использования программного продукта Mercurial он же Hg —кроссплатформенная распределённая система управления версиями, разработанная для эффективной работы с очень большими репозиториями кода. В первую очередь он является консольной программой. Система Mercurial написана на Python, хотя чувствительные к производительности части (например, своя реализация diff) выполнены в качестве Python-расширений на C. Mercurial первоначально был написан для Linux, позже пор тирован под Windows, Mac OS X и большинство Unix-систем. Репозитории Mercurial управляются при помощи утилиты командной строки hg.

Наряду с традиционными возможностями  систем контроля версий, Mercurial поддерживает полностью децентрализованную работу (отсутствует понятие основного  хранилища кода), ветвление (возможно вести несколько веток одного проекта и копировать изменения между ветками), слияние репозиториев (чем и достигается «распределённость» работы). Поддерживается обмен данными между репозиториями через HTTP/HTTPS, SSH и вручную при помощи упакованных наборов изменений.

Утилита hg обладает компактным интерфейсом, и Mercurial считается более простой в освоении системой.

Ниже будут приведена пошаговая  инструкция создания проекта в CodePlex:

Шаг 1. Установка Mercurial (TortoiseHg). Данный программный продукт можно скачать с официального сайта разработчика http://tortoisehg.bitbucket.org/.

Либо скачать данный программный продукт с сайта, предоставляемого системой CodePlex  http://tortoisehg.codeplex.com.

Шаг 2. Создайте новый проект CodePlex.В мастере по созданию проекта вы увидите следующее (см. рисунок 1). Выберите Mercurial.

 

Рисунок 1 – Выбор источника контроля

Шаг 3. Клонирование репозитории. Теперь необходимо создать клон репозитория. Этот шаг обязателен, в противном случае продолжение будет невозможно. Во-первых, создайте новую папку на вашем локальном компьютере, куда вы хотите загрузить клон репозитория. Затем с помощью TortoiseHg клонировать репозиторий в созданную папку, как показано на рисунке 2.

Рисунок 2 – Контекстное меню, пункт Clone

TortoiseHg будет предлагать выбор исходного пути. Для продолжения операции клонирования нам нужно получить URL из CodePlex (см. рисунок 3).

Рисунок 3 – Онлайн-меню Mercurial на портале CodePlex, указание URL для клонирования

Данный URL вставляем в диалоговое окно TortoiseHg в путь источника, как показано на рисунке 4.

Рисунок 4 – Диалоговое окно  TortoiseHg, путь источника

Нажимаем на кнопку клонировать. После того, как операция клонирования будет завершена, диалог закроется, и вы увидите зеленую галочку, которая указывает синхронизацию Mercurial с проектом на CodePlex (см. рисунок 5).

Рисунок 5 – Папка проекта на рабочем столе

Шаг 4. Добавление файлов в папку. Теперь вы можете просто добавить файлы проекта в эту папку. После добавления файлов в папку щёлкаем правой кнопкой мыши по данной папке для  вызова контекста Windows Explorer меню, выбираем HG Commit. Команда HG Commit совершит передачу проекта в локальное хранилище TortoiseHg (см. рисунок 6).

Рисунок 6 – Контекстное меню, пункт Hg Commit

В диалоговом окне HG Commit, нужно прокомментировать, описать фиксацию (опять же  это только для локального репозитория). Убедитесь в том, чтобы все файлы проекта прошли фиксацию, как показано на рисунке 7.

Рисунок 7 – Меню программы TortoiseHg, кнопка фиксации

Шаг 5. Проталкивание кода на CodePlex (см. рисунок 8).

Рисунок 8 – Меню программы TortoiseHg, кнопка проталкивания исходящих изменений на выбранный URL

Нажимаем на кнопку протолкнуть  исходящие изменения на выбранный  URL, вводим логин и пароль, который был использован при регистрации на CodePlex.

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

 

Заключение

 

В результате проделанной работы была написана программа на C#, которая строит график по заданным точкам, проекции к точкам (узлам) графика, а также делает прогнозы: неточный прогноз (график регрессии), прогноз методом аппроксимации. Данный проект создавался под системой управления проектами CodePlex, который является хостингом для проектов с открытым исходным кодом от Microsoft.

Было выявлено, что CodePlex позволяет совместно вести развитие программного обеспечения с открытым исходным кодом. В его состав входят wiki-страницы, контроль версий, основанный на Team Foundation Server, но доступный также через Subversion, форум, поддержка RSS.

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

 

Список использованных источников

 

  1. Агуров, П.В. Разработка компонентов в MS Visual Studio 2008 / П.В.  Агуров. – СПб.: Издательство БХВ-Петербург, 2008. –480с.: ил.
  2. Астахова, И. Ф. SQL в примерах и задачах: Учебное Пособие / И.Ф. Астахова, А.П. Толстобров, В.М. Мельников. – Мн.: Издательство Новое знание, 2002. –176 с.
  3. Моисеенко, С.И. SQL. Задачи и решения / С.И. Моисеенко – СПб.: Издательство Питер, 2006. – 256с.
  4. Павловская, Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. / Т.А. Павловская – СПб.: Издательство Питер, 2007 – 432с.
  5. Lucasward.net :  научный электронный блог  [Электронный ресурс]. – М.:   Интра-Плюс, 1997. – Режим доступа http://www.lucasward.net/2010/02/maturity-model-for-source-control-scmm.html., свободный. – Загл. с экрана. 

 

Приложение А

(обязательное)

Техническое задание

 

Министерство образования и науки Российской Федерации

ФГБОУ ВПО «Омский государственный  технический университет»

Кафедра «Прикладная математика и  фундаментальная информатика»

 

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

 

1. Введение

Программное изделие: Программа строит график по заданным точкам, проекции к точкам (узлам) графика, а также делает прогнозы: неточный прогноз (график регрессии), прогноз методом аппроксимации.

2. Функциональные требования

Данная программа будет оснащена настраиваемым удобным пользовательским интерфейсом, все данные будут приведены в виде графиков, описаний текущих состояний.

Данная программа будет иметь 3 способа определения летальной  дозы ЛД100:

    • по заданным значениям;
    • линейная аппроксимация по двум точкам;
    • регрессия (неточный прогноз).

Данный проект должен быть создан под управлением системы контроля, то есть под системой управления версиями CodePlex.

3. Программная совместимость.

Гарантируется совместимость на уровне исходного кода со следующими операционными  системами:

- Windows 7.

 

Заказчик (куратор) ___________________________________________ А.А. Свалов

(подпись, дата)

 

Исполнитель: студент гр. ИТ-319 ______________________________ Д.В. Ковалев

                      (подпись, дата)

 

Приложение Б

(обязательное)

 Исходный  код

 

1

using System;

2

using System.Collections.Generic;

3

using System.ComponentModel;

4

using System.Data;

5

using System.Drawing;

6

using System.Drawing.Imaging;

7

using System.Linq;

8

using System.Text;

9

using System.Windows.Forms;

10

 

11

namespace ZedGraph

12

{

13

    public partial class MainForm : Form

14

    {

15

        private GraphPane myPane = new GraphPane();

16

        private int listCount;

17

        private PointPairList list1 = new PointPairList();

18

        public MainForm()

19

        {

20

            InitializeComponent();

21

            zedGraphControl1.ContextMenuBuilder += new ZedGraphControl.ContextMenuBuilderEventHandler(zedGraphControl1_ContextMenuBuilder);

22

        }

23

        void zedGraphControl1_ContextMenuBuilder(ZedGraphControl sender, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectState objState)

24

        {

25

            // Переименуем (переведем на русский язык) некоторые пункты контекстного меню

26

           menuStrip.Items[0].Text = "Копировать";

27

            menuStrip.Items[1].Text = "Сохранить как картинку…";

28

            menuStrip.Items[2].Text = "Параметры страницы…";

29

            menuStrip.Items[3].Text = "Печать…";

30

           menuStrip.Items[4].Text = "Показывать значения в точках…";

31

            menuStrip.Items[7].Text = "Установить масштаб по умолчанию…";

32

            // Некоторые пункты удалим

33

            menuStrip.Items.RemoveAt(5);

34

           menuStrip.Items.RemoveAt(5);

35

        }

36

        private void GraphCreate_Click(object sender, EventArgs e)

37

        {

38

            CreateGraph(zedGraphControl1,new Point(0,0)); // строим график

39

            SetSize(); // и устанавливаем его положение и размер

40

            zedGraphControl1.Refresh();

41

        }

42

        private void Form1_Resize(object sender, EventArgs e)

43

        {

44

            SetSize();

45

        }

46

        private void SetSize()

47

        {

48

            zedGraphControl1.Location = new Point(15, 15); // задаем положение графика

49

            zedGraphControl1.Size = new Size(ClientRectangle.Width - 375, ClientRectangle.Height - 75); // размеры графика

50

        }

51

        private void CreateGraph(ZedGraphControl zgc, PointF mousePoint)

52

        {

53

            GraphPane myPane = zgc.GraphPane;

54

            myPane.CurveList.Clear();

55

            list1.Clear();

56

            // Задаем название графика и сторон

57

            myPane.Title.Text = "График";

58

            myPane.XAxis.Title.Text = "Доза";

59

            myPane.YAxis.Title.Text = "Число погибших животных";

60

            // --------------------------------

61

            // строим график

62

            double x, y;

63

            List<LineItem> curves = new List<LineItem>();

64

            foreach (DataGridViewRow row in dataGridView1.Rows)

65

            {

66

                x = Convert.ToDouble(row.Cells[0].Value);

67

                y = Convert.ToDouble(row.Cells[1].Value);

68

                list1.Add(x, y);

69

            }

70

            curves.Add(new LineItem("График", list1, Color.Red, SymbolType.Diamond));

71

            foreach (DataGridViewRow row in dataGridView1.Rows)

72

            {

73

             var cell = row.Cells[2] as DataGridViewCheckBoxCell;

74

                if (Convert.ToBoolean(cell.Value) == true)

75

                {

76

                PointPairList listx = new PointPairList();

77

                x = Convert.ToDouble(row.Cells[0].Value);

78

                y = Convert.ToDouble(row.Cells[1].Value);

79

                listx.Add(0,y);

80

                listx.Add(x, y);

81

                listx.Add(x, 0);

82

                curves.Add(new LineItem("", listx, Color.Blue, SymbolType.Diamond));

83

                }

84

            }

85

            PointPairList listProections = new PointPairList();

86

            // Пересчитываем пиксели в координаты на графике

87

            // У ZedGraph есть несколько перегруженных методов ReverseTransform.

88

            listProections.Add(0, mousePoint.Y);

89

            listProections.Add(mousePoint.X, mousePoint.Y);

90

            listProections.Add(mousePoint.X, 0);

91

            curves.Add(new LineItem("График проекции", listProections, Color.Blue, SymbolType.Diamond));

92

            // Выводим результат

93

            listCount = list1.Count;

94

            PointPairList list2 = new PointPairList();

95

            list2.Add(list1[listCount - 1].X, list1[listCount - 1].Y);

96

            if (radioButton1.Checked && listCount>=2)

97

            {

98

                x = (-(list1[listCount - 1].X - list1[listCount - 2].X) * Convert.ToInt32(numericUpDown2.Value) -

99

                    (list1[listCount - 2].X * list1[listCount - 1].Y - list1[listCount - 1].X * list1[listCount - 2].Y)) /

100

                    (list1[listCount - 2].Y - list1[listCount - 1].Y);

101

                list2.Add(x, Convert.ToInt32(numericUpDown2.Value));

102

                curves.Add(new LineItem("График линейной аппроксимации", list2, Color.DarkGreen, SymbolType.Diamond, 2));

103

            }

104

            if (radioButton2.Checked )

105

            {

106

                CreateGraphregress( zgc,  mousePoint);

107

            }

108

            bool isGraphLabelVisible = true;

109

            int i = 0;

110

            foreach (LineItem u in curves)

111

            {

112

                u.Label.IsVisible = isGraphLabelVisible;

113

                myPane.CurveList.Add(u);

114

                i++;

115

            }

116

            double bdl;

117

            bdl = list1[listCount - 2].X;

118

            listCount = list1.Count;

119

            SafeLine.Text = "0 -" + list1[0].X+" мг";

120

            BitDeadyLine.Text = list1[0].X + "-" + bdl+ " мг";

121

            DedyLine.Text = bdl+ "-" + list1[listCount-1].X + " мг";

122

            zgc.AxisChange();

123

        }

124

        private void xyAxis(ZedGraphControl zgc)

125

        {

126

            myPane = zgc.GraphPane;

127

            myPane.XAxis.MajorGrid.IsVisible = true;

128

            myPane.XAxis.MajorGrid.DashOn = 10;

129

            myPane.XAxis.MajorGrid.DashOff = 5;

130

            myPane.YAxis.MajorGrid.IsVisible = true;

131

            myPane.YAxis.MajorGrid.DashOn = 10;

132

            myPane.YAxis.MajorGrid.DashOff = 5;

133

            myPane.YAxis.MinorGrid.IsVisible = true;

134

            myPane.YAxis.MinorGrid.DashOn = 1;

135

            myPane.YAxis.MinorGrid.DashOff = 2;

136

            myPane.XAxis.MinorGrid.IsVisible = true;

137

            myPane.XAxis.MinorGrid.DashOn = 1;

138

            myPane.XAxis.MinorGrid.DashOff = 2;

139

        }

140

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)

141

        {

142

            GraphCreate.Enabled = false;

143

            int colCount = Convert.ToInt32(numericUpDown1.Value);

144

            dataGridView1.RowCount = colCount;

145

            DataGridViewRow row = dataGridView1.Rows[colCount - 1];

146

            row.Cells[0].Value = 0.0;

147

            row.Cells[1].Value = 0.0;

148

            if (numericUpDown1.Value != 1)

149

            {

150

                GraphCreate.Enabled = true;

151

            }

152

        }

153

        private void Form1_Load(object sender, EventArgs e)

154

        {

155

            GraphCreate.Enabled = false;

156

            numericUpDown1_ValueChanged(null, null);

157

            xyAxis(zedGraphControl1);

158

        }

159

        private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)

160

        {

161

            int newInteger;

162

           if(dataGridView1.CurrentCell.ColumnIndex == 1)

163

           {

164

               if (int.TryParse(e.FormattedValue.ToString(), out newInteger) && newInteger > Convert.ToInt32(numericUpDown2.Value))

165

               {

166

                   e.Cancel = true;

167

                   MessageBox.Show("Неверные данные, количество животных не должно превышать их максимального значения");

168

               }

169

           }

170

            dataGridView1.Rows[e.RowIndex].ErrorText = "";

171

            double newDouble;

172

           if (dataGridView1.Columns[e.ColumnIndex].Name == "cheak")

173

           {

174

                return;

175

            }

176

            if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; }

177

            if (!double.TryParse(e.FormattedValue.ToString(),

178

                out newDouble) || newDouble < 0)

179

            {

180

                e.Cancel = true;

181

           MessageBox.Show("the value must be a non-negative integer");

182

            }

183

        }

184

        private void сохранитьКартинкуКакToolStripMenuItem_Click(object sender, EventArgs e)

185

        {

186

            zedGraphControl1.SaveAsBitmap();

187

        }

188

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)

189

        {

190

            Application.Exit();

191

        }

192

        private void копироватьРисунокToolStripMenuItem_Click(object sender, EventArgs e)

193

        {

194

            bool isShowmessage = false;

195

           zedGraphControl1.Copy(isShowmessage);

196

        }

197

        private void параметрыСтраницыToolStripMenuItem_Click(object sender, EventArgs e)

198

        {

199

            zedGraphControl1.DoPageSetup();

200

        }

201

        private void установитьМасштабПоУмолчаниюToolStripMenuItem_Click(object sender, EventArgs e)

202

        {

203

            zedGraphControl1.ZoomOutAll(myPane);

204

        }

205

        private void печатьToolStripMenuItem_Click(object sender, EventArgs e)

206

        {

207

            zedGraphControl1.DoPrint();

208

        }

209

        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

210

        {

211

            aboutForm AboutForm = new aboutForm();

212

            AboutForm.ShowDialog();

213

        }

214

        private bool zedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)

215

        {

216

        // Сюда будут записаны координаты в системе координат графика

217

            if (myPane.CurveList.Count > 0 ||  (myPane.CurveList.Count == 2  &&  myPane.CurveList[0].Points[0].X == 0 && myPane.CurveList[0].Points[0].Y == 0))

218

            {

219

                    double x, y;

220

                DataGridViewRow row = null;

221

        zedGraphControl1.GraphPane.ReverseTransform(e.Location, out x, out y);

222

       

 

223

                    CreateGraph(zedGraphControl1,new PointF((float)x,(float)y));

224

            string text = string.Format("Доза препарата: {0} мг/кг; Число погибших животных: {1}", Math.Round(x,3) , (int)y);

225

            coardlabel.Text = text;

226

            zedGraphControl1.Invalidate();

227

           }

228

            return true;

229

        }

230

        private void CreateGraphregress(ZedGraphControl zgc, PointF mousePoint)

231

    {

232

          double YS, XS, St, Sb, b0, b1;

233

            double x, y;

234

            GraphPane myPane = zgc.GraphPane;

235

            List<LineItem> curves = new List<LineItem>();

236

            PointPairList regress = new PointPairList();

237

            regress.Clear();

238

            list1.Clear();

239

           // myPane.CurveList.Clear();

240

            // Задаем название графика и сторон

241

            myPane.Title.Text = "График";

242

            myPane.XAxis.Title.Text = "Доза";

243

            myPane.YAxis.Title.Text = "Число погибших животных";

244

            // --------------------------------

245

            // строим график

246

            foreach (DataGridViewRow row in dataGridView1.Rows)

247

            {

248

                x = Convert.ToDouble(row.Cells[0].Value);

249

                y = Convert.ToDouble(row.Cells[1].Value);

250

                list1.Add(x, y);

251

           }

252

            listCount = list1.Count;

253

            double[] YR = new double[listCount];

254

            YS = 0;

255

            XS = 0;

256

            for (int i = 0; i < listCount; i++)

257

            {

258

                YS += list1[i].Y;

259

                XS += list1[i].X;

260

            }

261

            YS = YS / listCount;

262

            XS = XS / listCount;

263

            St = 0;

264

            Sb = 0;

265

            for (int i = 0; i < listCount; i++)

266

            {

267

                St += (list1[i].X - XS) * (list1[i].Y - YS);

268

                Sb += (list1[i].X - XS) * (list1[i].X - XS);

269

            }

270

            b1 = St / Sb;

271

            b0 = YS - b1 * XS;

272

            for (int i = 0; i < listCount; i++)

273

            {

274

                YR[i] = b0 + b1 * list1[i].X;

275

            }

276

            for (int i = 0; i < listCount; i++)

277

            {

278

               regress.Add(list1[i].X, YR[i]);

279

            }

280

            curves.Add(new LineItem("График регрессии", regress, Color.DarkMagenta, SymbolType.Diamond,2));

281

                 bool isGraphLabelVisible = true;

282

                 int t = 0;

283

                 foreach (LineItem u in curves)

284

                 {

285

                     u.Label.IsVisible = isGraphLabelVisible;

286

                     myPane.CurveList.Add(u);

287

                     t++;

288

                 }          

289

            zgc.AxisChange();

290

    }

291

        private void button1_Click(object sender, EventArgs e)

292

        {

293

            CreateGraphregress(zedGraphControl1,new Point(0,0)); // строим график

294

            SetSize(); // и устанавливаем его положение и размер

295

            zedGraphControl1.Refresh();

296

        }

297

    }

298

}


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

2 Извлечение документа из хранилища и создание рабочей копии.

3 Синхронизация рабочей копии до некоторого заданного состояния хранилища. Чаще всего это действие означает обновление рабочей копии до самого свежего состояния хранилища. Однако при необходимости можно синхронизировать рабочую копию и к более старому состоянию, чем текущее.

4 Создание новой версии, фиксация изменений. Распространение изменений, сделанных в рабочей копии, на хранилище документов. При этом в хранилище создаётся новая версия изменённых документов.

5 Откладывание изменений. Предоставляемая некоторыми системами возможность создать набор изменений (changeset) и сохранить его на сервере без фиксации (commit’а). Отложенный набор изменений доступен на чтение другим участникам проекта, но до специальной команды не входит в основную ветвь. Поддержка откладывания изменений даёт возможность пользователям сохранять незавершённые работы на сервере, не создавая для этого отдельных ветвей.

6 Ветвь — направление разработки, независимое от других. Ветвь представляет собой копию части (как правило, одного каталога) хранилища, в которую можно вносить свои изменения, не влияющие на другие ветви. Документы в разных ветвях имеют одинаковую историю до точки ветвления и разные — после неё.

7 Слияние — объединение независимых изменений в единую версию документа. Осуществляется, когда два человека изменили один и тот же файл или при переносе изменений из одной ветки в другую.

 


Информация о работе Создание собственного проекта с открытым исходным кодом на портале CodePlex