-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
241 lines (228 loc) · 13 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
<!DOCTYPE HTML>
<!--[if IE 6]>
<html id="ie6" lang="en-US" class="ie ie6 lt-ie9">
<![endif]-->
<!--[if IE 7]>
<html id="ie7" lang="en-US" class="ie ie7 lt-ie9">
<![endif]-->
<!--[if IE 8]>
<html id="ie8" lang="en-US" class="ie ie8 lt-ie9">
<![endif]-->
<!--[if gte IE 9]>
<html lang="en-US" class="ie ie9">
<![endif]-->
<!--[if !(IE)]><!-->
<html lang="en-US" class="">
<!--<![endif]-->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="author" content="amine.mbarki">
<title>Gitflow Workflow</title>
<link rel="stylesheet" href="assets/css/reset.css">
<link rel="stylesheet" href="css/flowtime.css">
<link rel="stylesheet" href="css/themes/default.css">
<link rel="stylesheet" href="assets/css/prism.css">
</head>
<body class="">
<div class="flowtime">
<div class="ft-section" data-id="section-1">
<div id="/section-1/page-1" class="ft-page" data-id="page-1" data-title="A successful Git branching model">
<div class="stack-center">
<div class="stacked-center">
<h1 class="page-logo">Gitflow Workflow</h1>
<h2 class="page-title">A successful Git branching model</h2>
<p>By <a href="https://twitter.com/mbarkiamine" target="_blank">@mbarkiamine</a></p>
</div>
</div>
</div>
<div id="/section-1/page-2" class="ft-page" data-id="page-2">
<h1>Git Flow is:</h1>
<p class="ft-fragment">
<blockquote>
A collection of Git extensions to provide high-level repository operations for <a href="http://nvie.com/git-model">Vincent Driessen's branching model</a>.
</blockquote>
<br/>
<a class="refs" href="https://github.com/nvie/gitflow">https://github.com/nvie/gitflow</a>
</p>
</div>
<div id="/section-1/page-3" class="ft-page" data-id="page-3">
<h1>Why use Git Flow?</h1>
<ul>
<li class="ft-fragment" >Separation of production and development code</li>
<li class="ft-fragment" >Flexibility</li>
<li class="ft-fragment" >Better code quality</li>
<li class="ft-fragment" >Encourages collaboration</li>
<li class="ft-fragment" >Encourages peer code reviews</li>
</ul>
</div>
<div id="/section-1/page-4" class="ft-page" data-id="page-4">
<h1>How do I use it?</h1>
<ul>
<li class="ft-fragment" >CLI
<ul>
<li class="ft-fragment" ><code>~ $ brew install git-flow</code></li>
<li class="ft-fragment" ><code>~ $ apt-get install git-flow</code></li>
<li class="ft-fragment" ><code>~ $ yum install gitflow</code></li>
</ul>
</li>
<li class="ft-fragment" >Windows
<ul>
<li><p>Download getopt.exe & libintl3.dll, download the bin file only from :
<a href="http://gnuwin32.sourceforge.net/packages/util-linux-ng.htm"> http://bit.ly/XdYcBc </a>
Copy this file to “C:\Program Files (x86)\Git\bin” if you use x64 OS, or “C:\Program Files\Git\bin” if you run x86 OS.</p>
</li>
<li class="ft-fragment" ><code>~ $ git clone –recursive git://github.com/nvie/gitflow.git</code></li>
<li class="ft-fragment" ><code>~ $ cd gitflow</code></li>
<li class="ft-fragment" ><code>~ $ contrib\msysgit-install.cmd</code> (Run as Administrator)</li>
</ul>
</li>
<li class="ft-fragment current-fragment" data-fragment-index="4"><a href="http://www.sourcetreeapp.com/">SourceTree</a> (free, cross-platform GUI)</li>
</ul>
</div>
<div id="/section-1/page-4" class="ft-page" data-id="page-4">
<h1>Branches</h1>
<p class="ft-fragment"><strong>master </strong>: production code</p>
<p class="ft-fragment"><strong>develop </strong>: development code</p>
<p class="ft-fragment"><strong>feature/ </strong>: a specific task or ticket (multiple)</p>
<p class="ft-fragment"><strong>release/ </strong>: temporary release branch for testing (single)</p>
<p class="ft-fragment"><strong>hotfix/ </strong>: temporary branch for emergency fixes</p>
<p class="ft-fragment"><strong>suport/ </strong>: experimental</p>
</div>
<div id="/section-1/page-5" class="ft-page" data-id="page-5">
<h1>The Branching Model</h1>
<div class="stack-center">
<img class="stacked-center" src="http://nvie.com/img/git-model@2x.png">
</div>
</div>
</div>
<div class="ft-section" data-id="section-2">
<div id="/section-2/page-2" class="ft-page" data-id="page-2">
<h1>Feature development</h1>
<ol>
<li class="ft-fragment">Make sure you are at the latest version of <code>master</code>: <code class="language-none ft-fragment">git pull</code></li>
<li class="ft-fragment">Start your feature branch: <code class="language-none ft-fragment">git flow feature start WP-1157</code>
<span class="ft-fragment">. That will automagically:</span>
<ol>
<li class="ft-fragment">Assign to you the issue in JIRA.</li>
<li class="ft-fragment">Transition the issue to In Progress.</li>
<li class="ft-fragment">Create a new branch named <code>feature/WP-1157</code> and checkout to it.</li>
</ol>
</li>
<li class="ft-fragment">Do your commits as always, ie, <strong>often and small</strong>.</li>
<li class="ft-fragment">If your work is going to last more than few hours, push your branch to Bitbucket (specially if you're leaving the office, as a backup).</li>
<li class="ft-fragment"><strong>Important</strong>: remember to rebase <code>master</code> from time to time.</li>
</ol>
</div>
<div id="/section-2/page-3" class="ft-page" data-id="page-3">
<h1>Finishing your feature</h1>
<p class="ft-fragment">When you are ready, finish your feature, but first pull the latest version from <code>master</code>:</p>
<pre class="language-none ft-fragment"><code>git checkout master
git pull
git flow feature finish WP-1157</code></pre>
</li>
<p class="ft-fragment">That will:</p>
<ol>
<li class="ft-fragment">Transition the issue to Ready for QA in JIRA</li>
<li class="ft-fragment">Checkout <code>master</code>, pull from remote and merge your feature branch into <code>master</code>. If you did everything OK, it should be a fast-forward merge.</li>
<li class="ft-fragment">The feature branch will also be deleted, so you don't need to care about your litter.</li>
</ol>
<p class="ft-fragment">Finally, <code class="language-none ft-fragment">git push origin master</code></p>
</div>
</div>
<div class="ft-section" data-id="section-3">
<div id="/section-3/page-1" class="ft-page" data-id="page-1">
<h1>Releases</h1>
<p class="ft-fragment">Release branches support preparation of a new production release.</p>
<p class="ft-fragment">They allow minor changes and bug fixes to be made, as well as preparing meta-data (version number, JIRA release, etc).</p>
<p class="ft-fragment">Starting a release branch means, in practice, freezing code base from last minute and/or not QA'ed changes.</p>
<p class="ft-fragment">Developers can safely keep merging features to <code>master</code> after that moment. <span class="ft-fragment">It's just their changes won't be part of the release.</span></p>
</div>
<div id="/section-3/page-2" class="ft-page" data-id="page-2">
<h1>Versioning</h1>
<p class="ft-fragment">It is exactly at the start of a release branch that the upcoming release gets assigned a version number —not any earlier.</p>
<p class="ft-fragment">Up until that moment, the develop branch reflected changes for the “next release”, but it is unclear whether that “next release” will eventually become 0.3 or 1.0, until the release branch is started.</p>
<p class="ft-fragment">To create a release branch:</p>
<pre class="language-none ft-fragment"><code>git flow release start 0.41
//JIRA integration with hooks
//grails set-version 0.41
//If necessary, more changes
git flow release finish 0.41</code></pre>
<p class="ft-fragment">Git flow will take care of tagging, merging back to <code>master</code> and <code>stable</code>, removing the release branch, etc.</p>
</div>
<div id="/section-3/page-3" class="ft-page" data-id="page-3">
<h1>JIRA Versioning</h1>
<p class="ft-fragment">We will always have a version in JIRA named <code><strong>next</strong></code>, that will be unreleased.</p>
<p class="ft-fragment">When closed, all issues will have that issue as <strong>Fix version</strong>.</p>
<p class="ft-fragment">Using Git hooks, automatically:</p>
<ol>
<li class="ft-fragment">The appropriate version will be created in JIRA</li>
<li class="ft-fragment">All issues closed with <code>next</code> as fix version, will be updated, setting the new version</li>
<li class="ft-fragment">The new version will be released in JIRA with the current date as release date.</li>
<li class="ft-fragment"><strong>Bonus point</strong>: create a new page in Confluence with the Release Notes generated automatically from JIRA.</li>
</ol>
</div>
</div>
<div class="ft-section" data-id="section-4">
<div id="/section-4/page-1" class="ft-page" data-id="page-1">
<div class="stack-center">
<div class="stacked-center">
<h1>Thanks!</h1>
<p>Q & A?</p>
</div>
</div>
</div>
</div>
</div>
<script src="js/brav1toolbox.js"></script>
<script src="js/flowtime.js"></script>
<script src="assets/js/prism.js"></script>
<script type="text/javascript">
var cacheTitle = document.title.replace("Flowtime.js | ", "");
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1228618-10']);
_gaq.push(['_trackPageview']);
_gaq.push(['_trackEvent', 'Flowtime', 'Landing', document.title]);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
// Configuration API test
Flowtime.showProgress(true);
// Flowtime.fragmentsOnSide(true);
// Flowtime.fragmentsOnBack(true);
// Flowtime.useHistory(false);
// Flowtime.slideInPx(true);
// Flowtime.sectionsSlideToTop(true);
// Flowtime.gridNavigation(false);
// Flowtime.useOverviewVariant(true);
Flowtime.parallaxInPx(true);
//
// event management
Flowtime.addEventListener("flowtimenavigation", onNavigation, false);
function onNavigation(e)
{
_gaq.push(['_trackEvent', 'Flowtime', 'Navigation', cacheTitle + ' > ' + document.title.replace("Flowtime.js | ", "")]);
// console.log(cacheTitle + ' > ' + document.title.replace("Flowtime.js | ", ""));
cacheTitle = document.title.replace("Flowtime.js | ", "");
//console.log('section', e.section, 'sectionIndex', e.sectionIndex);
//console.log('page', e.page, 'pageIndex', e.);
//console.log('pastSectionIndex', e.pastSectionIndex, 'pastPageIndex', e.pastPageIndex);
//console.log('prevSection', e.prevSection);
//console.log('nextSection', e.nextSection);
//console.log('prevPage', e.prevPage);
//console.log('nextPage', e.nextPage);
//console.log('fragment', e.fragment, + 'fragmentIndex', e.fragmentIndex);
//console.log("isOverview", e.isOverview);
//console.log('progress:', e.progress, 'total:', e.total);
// var value = Math.round(e.progress * 100 / e.total);
// console.log('Completion: ' + value + '%');
}
// starts the application with configuration options
Flowtime.start();
</script>
<script type="text/javascript" src="http://slidemote.jit.su/slidemote.js#gitflow"></script>
</body>
</html>