Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
demo
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
shenjinzhu
demo
Commits
39c32f55
Commit
39c32f55
authored
Jan 06, 2018
by
byeage
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
complete admin
parent
864fd9a3
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
1111 additions
and
0 deletions
+1111
-0
admin.md
+0
-0
团队协作.html
+1111
-0
No files found.
admin.md
0 → 100644
View file @
39c32f55
团队协作.html
0 → 100644
View file @
39c32f55
<!DOCTYPE html>
<html><head><meta
charset=
"utf-8"
><style>body
{
<!DOCTYPE html>
<html><head><meta
charset=
"utf-8"
><style>body
{
max-width
:
980px
;
border
:
1px
solid
#ddd
;
outline
:
1300px
solid
#fff
;
margin
:
16px
auto
;
}
body
.markdown-body
{
padding
:
45px
;
}
@font-face
{
font-family
:
fontawesome-mini
;
src
:
url(data:font/woff;charset=utf-8;base64,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)
format
(
'woff'
);
}
@font-face
{
font-family
:
octicons-anchor
;
src
:
url(data:font/woff;charset=utf-8;base64,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)
format
(
'woff'
);
}
.markdown-body
{
font-family
:
sans-serif
;
-ms-text-size-adjust
:
100%
;
-webkit-text-size-adjust
:
100%
;
color
:
#333333
;
overflow
:
hidden
;
font-family
:
"Helvetica Neue"
,
Helvetica
,
"Segoe UI"
,
Arial
,
freesans
,
sans-serif
;
font-size
:
16px
;
line-height
:
1.6
;
word-wrap
:
break-word
;
}
.markdown-body
a
{
background
:
transparent
;
}
.markdown-body
a
:active
,
.markdown-body
a
:hover
{
outline
:
0
;
}
.markdown-body
b
,
.markdown-body
strong
{
font-weight
:
bold
;
}
.markdown-body
mark
{
background
:
#ff0
;
color
:
#000
;
font-style
:
italic
;
font-weight
:
bold
;
}
.markdown-body
sub
,
.markdown-body
sup
{
font-size
:
75%
;
line-height
:
0
;
position
:
relative
;
vertical-align
:
baseline
;
}
.markdown-body
sup
{
top
:
-0.5em
;
}
.markdown-body
sub
{
bottom
:
-0.25em
;
}
.markdown-body
h1
{
font-size
:
2em
;
margin
:
0.67em
0
;
}
.markdown-body
img
{
border
:
0
;
}
.markdown-body
hr
{
-moz-box-sizing
:
content-box
;
box-sizing
:
content-box
;
height
:
0
;
}
.markdown-body
pre
{
overflow
:
auto
;
}
.markdown-body
code
,
.markdown-body
kbd
,
.markdown-body
pre
,
.markdown-body
samp
{
font-family
:
monospace
,
monospace
;
font-size
:
1em
;
}
.markdown-body
input
{
color
:
inherit
;
font
:
inherit
;
margin
:
0
;
}
.markdown-body
html
input
[
disabled
]
{
cursor
:
default
;
}
.markdown-body
input
{
line-height
:
normal
;
}
.markdown-body
input
[
type
=
"checkbox"
]
{
box-sizing
:
border-box
;
padding
:
0
;
}
.markdown-body
table
{
border-collapse
:
collapse
;
border-spacing
:
0
;
}
.markdown-body
td
,
.markdown-body
th
{
padding
:
0
;
}
.markdown-body
.codehilitetable
{
border
:
0
;
border-spacing
:
0
;
}
.markdown-body
.codehilitetable
tr
{
border
:
0
;
}
.markdown-body
.codehilitetable
pre
,
.markdown-body
.codehilitetable
div
.codehilite
{
margin
:
0
;
}
.markdown-body
.linenos
,
.markdown-body
.code
,
.markdown-body
.codehilitetable
td
{
border
:
0
;
padding
:
0
;
}
.markdown-body
td
:not
(
.linenos
)
.linenodiv
{
padding
:
0
!important
;
}
.markdown-body
.code
{
width
:
100%
;
}
.markdown-body
.linenos
div
pre
,
.markdown-body
.linenodiv
pre
,
.markdown-body
.linenodiv
{
border
:
0
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
;
-webkit-border-top-left-radius
:
3px
;
-webkit-border-bottom-left-radius
:
3px
;
-moz-border-radius-topleft
:
3px
;
-moz-border-radius-bottomleft
:
3px
;
border-top-left-radius
:
3px
;
border-bottom-left-radius
:
3px
;
}
.markdown-body
.code
div
pre
,
.markdown-body
.code
div
{
border
:
0
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
;
-webkit-border-top-right-radius
:
3px
;
-webkit-border-bottom-right-radius
:
3px
;
-moz-border-radius-topright
:
3px
;
-moz-border-radius-bottomright
:
3px
;
border-top-right-radius
:
3px
;
border-bottom-right-radius
:
3px
;
}
.markdown-body
*
{
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
.markdown-body
input
{
font
:
13px
Helvetica
,
arial
,
freesans
,
clean
,
sans-serif
,
"Segoe UI Emoji"
,
"Segoe UI Symbol"
;
line-height
:
1.4
;
}
.markdown-body
a
{
color
:
#4183c4
;
text-decoration
:
none
;
}
.markdown-body
a
:hover
,
.markdown-body
a
:focus
,
.markdown-body
a
:active
{
text-decoration
:
underline
;
}
.markdown-body
hr
{
height
:
0
;
margin
:
15px
0
;
overflow
:
hidden
;
background
:
transparent
;
border
:
0
;
border-bottom
:
1px
solid
#ddd
;
}
.markdown-body
hr
:before
,
.markdown-body
hr
:after
{
display
:
table
;
content
:
" "
;
}
.markdown-body
hr
:after
{
clear
:
both
;
}
.markdown-body
h1
,
.markdown-body
h2
,
.markdown-body
h3
,
.markdown-body
h4
,
.markdown-body
h5
,
.markdown-body
h6
{
margin-top
:
15px
;
margin-bottom
:
15px
;
line-height
:
1.1
;
}
.markdown-body
h1
{
font-size
:
30px
;
}
.markdown-body
h2
{
font-size
:
21px
;
}
.markdown-body
h3
{
font-size
:
16px
;
}
.markdown-body
h4
{
font-size
:
14px
;
}
.markdown-body
h5
{
font-size
:
12px
;
}
.markdown-body
h6
{
font-size
:
11px
;
}
.markdown-body
blockquote
{
margin
:
0
;
}
.markdown-body
ul
,
.markdown-body
ol
{
padding
:
0
;
margin-top
:
0
;
margin-bottom
:
0
;
}
.markdown-body
ol
ol
,
.markdown-body
ul
ol
{
list-style-type
:
lower-roman
;
}
.markdown-body
ul
ul
ol
,
.markdown-body
ul
ol
ol
,
.markdown-body
ol
ul
ol
,
.markdown-body
ol
ol
ol
{
list-style-type
:
lower-alpha
;
}
.markdown-body
dd
{
margin-left
:
0
;
}
.markdown-body
code
,
.markdown-body
pre
,
.markdown-body
samp
{
font-family
:
Consolas
,
"Liberation Mono"
,
Menlo
,
Courier
,
monospace
;
font-size
:
12px
;
}
.markdown-body
pre
{
margin-top
:
0
;
margin-bottom
:
0
;
}
.markdown-body
kbd
{
background-color
:
#e7e7e7
;
background-image
:
-moz-linear-gradient
(
#fefefe
,
#e7e7e7
);
background-image
:
-webkit-linear-gradient
(
#fefefe
,
#e7e7e7
);
background-image
:
linear-gradient
(
#fefefe
,
#e7e7e7
);
background-repeat
:
repeat-x
;
border-radius
:
2px
;
border
:
1px
solid
#cfcfcf
;
color
:
#000
;
padding
:
3px
5px
;
line-height
:
10px
;
font
:
11px
Consolas
,
"Liberation Mono"
,
Menlo
,
Courier
,
monospace
;
display
:
inline-block
;
}
.markdown-body
>*
:first-child
{
margin-top
:
0
!important
;
}
.markdown-body
>*
:last-child
{
margin-bottom
:
0
!important
;
}
.markdown-body
.headeranchor-link
{
position
:
absolute
;
top
:
0
;
bottom
:
0
;
left
:
0
;
display
:
block
;
padding-right
:
6px
;
padding-left
:
30px
;
margin-left
:
-30px
;
}
.markdown-body
.headeranchor-link
:focus
{
outline
:
none
;
}
.markdown-body
h1
,
.markdown-body
h2
,
.markdown-body
h3
,
.markdown-body
h4
,
.markdown-body
h5
,
.markdown-body
h6
{
position
:
relative
;
margin-top
:
1em
;
margin-bottom
:
16px
;
font-weight
:
bold
;
line-height
:
1.4
;
}
.markdown-body
h1
.headeranchor
,
.markdown-body
h2
.headeranchor
,
.markdown-body
h3
.headeranchor
,
.markdown-body
h4
.headeranchor
,
.markdown-body
h5
.headeranchor
,
.markdown-body
h6
.headeranchor
{
display
:
none
;
color
:
#000
;
vertical-align
:
middle
;
}
.markdown-body
h1
:hover
.headeranchor-link
,
.markdown-body
h2
:hover
.headeranchor-link
,
.markdown-body
h3
:hover
.headeranchor-link
,
.markdown-body
h4
:hover
.headeranchor-link
,
.markdown-body
h5
:hover
.headeranchor-link
,
.markdown-body
h6
:hover
.headeranchor-link
{
height
:
1em
;
padding-left
:
8px
;
margin-left
:
-30px
;
line-height
:
1
;
text-decoration
:
none
;
}
.markdown-body
h1
:hover
.headeranchor-link
.headeranchor
,
.markdown-body
h2
:hover
.headeranchor-link
.headeranchor
,
.markdown-body
h3
:hover
.headeranchor-link
.headeranchor
,
.markdown-body
h4
:hover
.headeranchor-link
.headeranchor
,
.markdown-body
h5
:hover
.headeranchor-link
.headeranchor
,
.markdown-body
h6
:hover
.headeranchor-link
.headeranchor
{
display
:
inline-block
;
}
.markdown-body
h1
{
padding-bottom
:
0.3em
;
font-size
:
2.25em
;
line-height
:
1.2
;
border-bottom
:
1px
solid
#eee
;
}
.markdown-body
h2
{
padding-bottom
:
0.3em
;
font-size
:
1.75em
;
line-height
:
1.225
;
border-bottom
:
1px
solid
#eee
;
}
.markdown-body
h3
{
font-size
:
1.5em
;
line-height
:
1.43
;
}
.markdown-body
h4
{
font-size
:
1.25em
;
}
.markdown-body
h5
{
font-size
:
1em
;
}
.markdown-body
h6
{
font-size
:
1em
;
color
:
#777
;
}
.markdown-body
p
,
.markdown-body
blockquote
,
.markdown-body
ul
,
.markdown-body
ol
,
.markdown-body
dl
,
.markdown-body
table
,
.markdown-body
pre
,
.markdown-body
.admonition
{
margin-top
:
0
;
margin-bottom
:
16px
;
}
.markdown-body
hr
{
height
:
4px
;
padding
:
0
;
margin
:
16px
0
;
background-color
:
#e7e7e7
;
border
:
0
none
;
}
.markdown-body
ul
,
.markdown-body
ol
{
padding-left
:
2em
;
}
.markdown-body
ul
ul
,
.markdown-body
ul
ol
,
.markdown-body
ol
ol
,
.markdown-body
ol
ul
{
margin-top
:
0
;
margin-bottom
:
0
;
}
.markdown-body
li
>
p
{
margin-top
:
16px
;
}
.markdown-body
dl
{
padding
:
0
;
}
.markdown-body
dl
dt
{
padding
:
0
;
margin-top
:
16px
;
font-size
:
1em
;
font-style
:
italic
;
font-weight
:
bold
;
}
.markdown-body
dl
dd
{
padding
:
0
16px
;
margin-bottom
:
16px
;
}
.markdown-body
blockquote
{
padding
:
0
15px
;
color
:
#777
;
border-left
:
4px
solid
#ddd
;
}
.markdown-body
blockquote
>
:first-child
{
margin-top
:
0
;
}
.markdown-body
blockquote
>
:last-child
{
margin-bottom
:
0
;
}
.markdown-body
table
{
display
:
block
;
width
:
100%
;
overflow
:
auto
;
word-break
:
normal
;
word-break
:
keep-all
;
}
.markdown-body
table
th
{
font-weight
:
bold
;
}
.markdown-body
table
th
,
.markdown-body
table
td
{
padding
:
6px
13px
;
border
:
1px
solid
#ddd
;
}
.markdown-body
table
tr
{
background-color
:
#fff
;
border-top
:
1px
solid
#ccc
;
}
.markdown-body
table
tr
:nth-child
(
2n
)
{
background-color
:
#f8f8f8
;
}
.markdown-body
img
{
max-width
:
100%
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
.markdown-body
code
,
.markdown-body
samp
{
padding
:
0
;
padding-top
:
0.2em
;
padding-bottom
:
0.2em
;
margin
:
0
;
font-size
:
85%
;
background-color
:
rgba
(
0
,
0
,
0
,
0.04
);
border-radius
:
3px
;
}
.markdown-body
code
:before
,
.markdown-body
code
:after
{
letter-spacing
:
-0.2em
;
content
:
"\00a0"
;
}
.markdown-body
pre
>
code
{
padding
:
0
;
margin
:
0
;
font-size
:
100%
;
word-break
:
normal
;
white-space
:
pre
;
background
:
transparent
;
border
:
0
;
}
.markdown-body
.codehilite
{
margin-bottom
:
16px
;
}
.markdown-body
.codehilite
pre
,
.markdown-body
pre
{
padding
:
16px
;
overflow
:
auto
;
font-size
:
85%
;
line-height
:
1.45
;
background-color
:
#f7f7f7
;
border-radius
:
3px
;
}
.markdown-body
.codehilite
pre
{
margin-bottom
:
0
;
word-break
:
normal
;
}
.markdown-body
pre
{
word-wrap
:
normal
;
}
.markdown-body
pre
code
{
display
:
inline
;
max-width
:
initial
;
padding
:
0
;
margin
:
0
;
overflow
:
initial
;
line-height
:
inherit
;
word-wrap
:
normal
;
background-color
:
transparent
;
border
:
0
;
}
.markdown-body
pre
code
:before
,
.markdown-body
pre
code
:after
{
content
:
normal
;
}
/* Admonition */
.markdown-body
.admonition
{
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
position
:
relative
;
border-radius
:
3px
;
border
:
1px
solid
#e0e0e0
;
border-left
:
6px
solid
#333
;
padding
:
10px
10px
10px
30px
;
}
.markdown-body
.admonition
table
{
color
:
#333
;
}
.markdown-body
.admonition
p
{
padding
:
0
;
}
.markdown-body
.admonition-title
{
font-weight
:
bold
;
margin
:
0
;
}
.markdown-body
.admonition
>
.admonition-title
{
color
:
#333
;
}
.markdown-body
.attention
>
.admonition-title
{
color
:
#a6d796
;
}
.markdown-body
.caution
>
.admonition-title
{
color
:
#d7a796
;
}
.markdown-body
.hint
>
.admonition-title
{
color
:
#96c6d7
;
}
.markdown-body
.danger
>
.admonition-title
{
color
:
#c25f77
;
}
.markdown-body
.question
>
.admonition-title
{
color
:
#96a6d7
;
}
.markdown-body
.note
>
.admonition-title
{
color
:
#d7c896
;
}
.markdown-body
.admonition
:before
,
.markdown-body
.attention
:before
,
.markdown-body
.caution
:before
,
.markdown-body
.hint
:before
,
.markdown-body
.danger
:before
,
.markdown-body
.question
:before
,
.markdown-body
.note
:before
{
font
:
normal
normal
16px
fontawesome-mini
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
;
line-height
:
1.5
;
color
:
#333
;
position
:
absolute
;
left
:
0
;
top
:
0
;
padding-top
:
10px
;
padding-left
:
10px
;
}
.markdown-body
.admonition
:before
{
content
:
"\f056\00a0"
;
color
:
333
;
}
.markdown-body
.attention
:before
{
content
:
"\f058\00a0"
;
color
:
#a6d796
;
}
.markdown-body
.caution
:before
{
content
:
"\f06a\00a0"
;
color
:
#d7a796
;
}
.markdown-body
.hint
:before
{
content
:
"\f05a\00a0"
;
color
:
#96c6d7
;
}
.markdown-body
.danger
:before
{
content
:
"\f057\00a0"
;
color
:
#c25f77
;
}
.markdown-body
.question
:before
{
content
:
"\f059\00a0"
;
color
:
#96a6d7
;
}
.markdown-body
.note
:before
{
content
:
"\f040\00a0"
;
color
:
#d7c896
;
}
.markdown-body
.admonition
::after
{
content
:
normal
;
}
.markdown-body
.attention
{
border-left
:
6px
solid
#a6d796
;
}
.markdown-body
.caution
{
border-left
:
6px
solid
#d7a796
;
}
.markdown-body
.hint
{
border-left
:
6px
solid
#96c6d7
;
}
.markdown-body
.danger
{
border-left
:
6px
solid
#c25f77
;
}
.markdown-body
.question
{
border-left
:
6px
solid
#96a6d7
;
}
.markdown-body
.note
{
border-left
:
6px
solid
#d7c896
;
}
.markdown-body
.admonition
>*
:first-child
{
margin-top
:
0
!important
;
}
.markdown-body
.admonition
>*
:last-child
{
margin-bottom
:
0
!important
;
}
/* progress bar*/
.markdown-body
.progress
{
display
:
block
;
width
:
300px
;
margin
:
10px
0
;
height
:
24px
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
;
background-color
:
#ededed
;
position
:
relative
;
box-shadow
:
inset
-1px
1px
3px
rgba
(
0
,
0
,
0
,
.1
);
}
.markdown-body
.progress-label
{
position
:
absolute
;
text-align
:
center
;
font-weight
:
bold
;
width
:
100%
;
margin
:
0
;
line-height
:
24px
;
color
:
#333
;
text-shadow
:
1px
1px
0
#fefefe
,
-1px
-1px
0
#fefefe
,
-1px
1px
0
#fefefe
,
1px
-1px
0
#fefefe
,
0
1px
0
#fefefe
,
0
-1px
0
#fefefe
,
1px
0
0
#fefefe
,
-1px
0
0
#fefefe
,
1px
1px
2px
#000
;
-webkit-font-smoothing
:
antialiased
!important
;
white-space
:
nowrap
;
overflow
:
hidden
;
}
.markdown-body
.progress-bar
{
height
:
24px
;
float
:
left
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
;
background-color
:
#96c6d7
;
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
.5
),
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
.1
);
background-size
:
30px
30px
;
background-image
:
-webkit-linear-gradient
(
135deg
,
rgba
(
255
,
255
,
255
,
.4
)
27%
,
transparent
27%
,
transparent
52%
,
rgba
(
255
,
255
,
255
,
.4
)
52%
,
rgba
(
255
,
255
,
255
,
.4
)
77%
,
transparent
77%
,
transparent
);
background-image
:
-moz-linear-gradient
(
135deg
,
rgba
(
255
,
255
,
255
,
.4
)
27%
,
transparent
27%
,
transparent
52%
,
rgba
(
255
,
255
,
255
,
.4
)
52%
,
rgba
(
255
,
255
,
255
,
.4
)
77%
,
transparent
77%
,
transparent
);
background-image
:
-ms-linear-gradient
(
135deg
,
rgba
(
255
,
255
,
255
,
.4
)
27%
,
transparent
27%
,
transparent
52%
,
rgba
(
255
,
255
,
255
,
.4
)
52%
,
rgba
(
255
,
255
,
255
,
.4
)
77%
,
transparent
77%
,
transparent
);
background-image
:
-o-linear-gradient
(
135deg
,
rgba
(
255
,
255
,
255
,
.4
)
27%
,
transparent
27%
,
transparent
52%
,
rgba
(
255
,
255
,
255
,
.4
)
52%
,
rgba
(
255
,
255
,
255
,
.4
)
77%
,
transparent
77%
,
transparent
);
background-image
:
linear-gradient
(
135deg
,
rgba
(
255
,
255
,
255
,
.4
)
27%
,
transparent
27%
,
transparent
52%
,
rgba
(
255
,
255
,
255
,
.4
)
52%
,
rgba
(
255
,
255
,
255
,
.4
)
77%
,
transparent
77%
,
transparent
);
}
.markdown-body
.progress-100plus
.progress-bar
{
background-color
:
#a6d796
;
}
.markdown-body
.progress-80plus
.progress-bar
{
background-color
:
#c6d796
;
}
.markdown-body
.progress-60plus
.progress-bar
{
background-color
:
#d7c896
;
}
.markdown-body
.progress-40plus
.progress-bar
{
background-color
:
#d7a796
;
}
.markdown-body
.progress-20plus
.progress-bar
{
background-color
:
#d796a6
;
}
.markdown-body
.progress-0plus
.progress-bar
{
background-color
:
#c25f77
;
}
.markdown-body
.candystripe-animate
.progress-bar
{
-webkit-animation
:
animate-stripes
3s
linear
infinite
;
-moz-animation
:
animate-stripes
3s
linear
infinite
;
animation
:
animate-stripes
3s
linear
infinite
;
}
@-webkit-keyframes
animate-stripes
{
0
%
{
background-position
:
0
0
;
}
100
%
{
background-position
:
60px
0
;
}
}
@-moz-keyframes
animate-stripes
{
0
%
{
background-position
:
0
0
;
}
100
%
{
background-position
:
60px
0
;
}
}
@keyframes
animate-stripes
{
0
%
{
background-position
:
0
0
;
}
100
%
{
background-position
:
60px
0
;
}
}
.markdown-body
.gloss
.progress-bar
{
box-shadow
:
inset
0
4px
12px
rgba
(
255
,
255
,
255
,
.7
),
inset
0
-12px
0
rgba
(
0
,
0
,
0
,
.05
);
}
/* Multimarkdown Critic Blocks */
.markdown-body
.critic_mark
{
background
:
#ff0
;
}
.markdown-body
.critic_delete
{
color
:
#c82829
;
text-decoration
:
line-through
;
}
.markdown-body
.critic_insert
{
color
:
#718c00
;
text-decoration
:
underline
;
}
.markdown-body
.critic_comment
{
color
:
#8e908c
;
font-style
:
italic
;
}
.markdown-body
.headeranchor
{
font
:
normal
normal
16px
octicons-anchor
;
line-height
:
1
;
display
:
inline-block
;
text-decoration
:
none
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
;
}
.headeranchor
:before
{
content
:
'\f05c'
;
}
.markdown-body
.task-list-item
{
list-style-type
:
none
;
}
.markdown-body
.task-list-item
+
.task-list-item
{
margin-top
:
3px
;
}
.markdown-body
.task-list-item
input
{
margin
:
0
4px
0.25em
-20px
;
vertical-align
:
middle
;
}
/* Media */
@media
only
screen
and
(
min-width
:
480px
)
{
.markdown-body
{
font-size
:
14px
;
}
}
@media
only
screen
and
(
min-width
:
768px
)
{
.markdown-body
{
font-size
:
16px
;
}
}
@media
print
{
.markdown-body
*
{
background
:
transparent
!important
;
color
:
black
!important
;
filter
:
none
!important
;
-ms-filter
:
none
!important
;
}
.markdown-body
{
font-size
:
12pt
;
max-width
:
100%
;
outline
:
none
;
border
:
0
;
}
.markdown-body
a
,
.markdown-body
a
:visited
{
text-decoration
:
underline
;
}
.markdown-body
.headeranchor-link
{
display
:
none
;
}
.markdown-body
a
[
href
]
:after
{
content
:
" ("
attr
(
href
)
")"
;
}
.markdown-body
abbr
[
title
]
:after
{
content
:
" ("
attr
(
title
)
")"
;
}
.markdown-body
.ir
a
:after
,
.markdown-body
a
[
href
^=
"javascript:"
]
:after
,
.markdown-body
a
[
href
^=
"#"
]
:after
{
content
:
""
;
}
.markdown-body
pre
{
white-space
:
pre
;
white-space
:
pre-wrap
;
word-wrap
:
break-word
;
}
.markdown-body
pre
,
.markdown-body
blockquote
{
border
:
1px
solid
#999
;
padding-right
:
1em
;
page-break-inside
:
avoid
;
}
.markdown-body
.progress
,
.markdown-body
.progress-bar
{
-moz-box-shadow
:
none
;
-webkit-box-shadow
:
none
;
box-shadow
:
none
;
}
.markdown-body
.progress
{
border
:
1px
solid
#ddd
;
}
.markdown-body
.progress-bar
{
height
:
22px
;
border-right
:
1px
solid
#ddd
;
}
.markdown-body
tr
,
.markdown-body
img
{
page-break-inside
:
avoid
;
}
.markdown-body
img
{
max-width
:
100%
!important
;
}
.markdown-body
p
,
.markdown-body
h2
,
.markdown-body
h3
{
orphans
:
3
;
widows
:
3
;
}
.markdown-body
h2
,
.markdown-body
h3
{
page-break-after
:
avoid
;
}
}
</style><title>
团队协作
</title></head><body><article
class=
"markdown-body"
><ol>
<li>
SVN集中式的版本控制系统,所有人的工作快照都存放在同一个地方
</li>
<li>
Git分布式的版本控制系统,Git每个人都有自己本地仓库,可以在自己的本地仓库提交更改。对于你自己的 电脑来说你使用的是集中式系统的开发方式,仓库中的所有更改都存放在自己的机器上。当你准备好自己的工作共享给别人时,链接到远程仓库,将自己的分支推送上去。
</li>
</ol>
<p>
共同维护的模型
</p>
<p>
. 单个共享的仓库,每个人都拥有自己对仓库的共享写入权限,目前公司的模型
<br
/>
. 并列贡献者仓库的模型 。 上游保留了仓库的完整控制,决定谁拥有项目仓库的读写权限。贡献者克隆派生项目,修改副本后通过合并请求或拉去请求提交这些更改。
</p>
<p>
分支的策略的几种约定
</p>
<ol>
<li>
主线开发分支,项目的主分支应该只包含经过测试的工作,并且绝不应该被破坏
</li>
<li>
功能分支和集成分支 所有新的工作都在一个功能分支上完成,这个分支的小到恰好能容纳一个完整的想法
</li>
<li>
一些分支通过一个集成分支与其他开发者完成的工作保持同步。等到软件发布前,构建管理员可以挑选那些功能集成到这个版本。添加多个功能分支和一个集成分支后一直可以保证代码一直是可部署的
</li>
</ol>
<p>
Gitflow
<br
/>
在理想的协作团队中,功能将在你开始的工作前在工单中进行描述,并且分支名会包含这个工单名。[ticket_id]-[terse-title] 命名约定。比如一个工单
“
1234
”
,功能时修改失效链接, 分支名分为
“
1234-fixing_links
”
<br
/>
最初,软件项目只有一个develop分支,在开发分支上添加新的功能,直到没有新功能需要做了,将这个时间点叫做功能冻结。此时会从开发分支上创建一个新的分支,只有Bug修复能提交到这分支上去。功能冻结是或许并不是所有功能都完成了,所以任然有工作被提交至develop分支,如果发现了Bug。这些bug同样需要被
”
向后
”
并入develop分支。
<br
/>
经过一段时间所有bug会被宣告发现修复。此时所有经过了指令保证测试的代码都被提交到master分支上。接着就可以部署了。
</p>
<p>
当然现实中有一些需要立即修改的Bug,需要从产品分支拉出一条新的分支,他不应该包含除了修复Bug以外的任何工作,当修完分这些Bug后,将分支合并到产品分支和开发分支。
</p>
<p>
更新分支
<br
/>
将基变解释为在一个已有的时间线上重放已有的提交
<br
/>
. rebase 命令用于更新分支
<br
/>
. merge 命令用于引入全新的工作
</p>
<hr
/>
<p>
根据计划发布软件
</p>
<ol>
<li>
从一个基本的提交开始,创建一个master
</li>
<li>
打上 v1.0的标签
</li>
<li>
将代码推送到集中式代码托管系统
</li>
</ol>
<hr
/>
<p>
1,新建develop 分支,在develop 分支上进行产品的开发
<br
/>
2. 新功能的添加 创建功能分支
<br
/>
3. 完成开发后将develop分支并如qa测试分支
<br
/>
4. qa测试分支完成后将qa分支并入master分支,打上发布版本的标签
</p>
<p>
发布后的补丁
</p>
<p>
有时候部署的代码存在错误,如果这个bug需要在下次软件发布前得到快速修复,这时就需要一个计划外的修复,这些部署通常称为补丁。在补丁中,工作不是从develop分支开始,而是从maser分支开始,确保更改只引入了部署代码中发现的问题的修复
</p>
<p>
工作流
<br
/>
1. 创建一个新的补丁分支,通常以hotfix开头,迁出master分支而不是develop分支
<br
/>
2. 生成标签名的列表,定位到最新打上标签的发布
<br
/>
3. 从master 最新打上的标签发不上,创建一个新的分支 使用hotfix- 【工单号】 -【工单的描述】(hotfix-123-fix_error_links)
<br
/>
4. 修复bug
<br
/>
5. 将通过测试的补丁并入master分支
<br
/>
6. 将master分支上的最新提交打上最新发布的版本号,如v1.01
<br
/>
7. 将经过测试的补丁并入develop分支,保证下次软件正式分布的时候不会丢失
</p>
<hr
/>
<p>
基本工作流
</p>
<h3
id=
"gitlab"
><a
name=
"user-content-gitlab"
href=
"#gitlab"
class=
"headeranchor-link"
aria-hidden=
"true"
><span
class=
"headeranchor"
></span></a>
Gitlab 工单
</h3>
<p><img
alt=
"GitLab工单"
src=
"///D://GitLab/demo/img/issue.png"
/><br
/>
1. 填写工单
</p>
<p><img
alt=
"GitLab填写工单"
src=
"///D://GitLab/demo/img/issueSubmit.png"
/></p>
<hr
/>
<p><a
href=
"http://www.zlovezl.cn/articles/project-manage-with-gitlab/"
>
基于 GitLab 的简单项目管理与协作流程
</a>
)
</p>
<p>
编写优秀的“需求” issue
<br
/>
如果你要录入一个需求类的 issue,最好在内容主体中包含下面这些内容:
</p>
<p>
用一句话描述你的需求,并用它作为标题
<br
/>
这个需求是解决什么问题的?
<br
/>
这个需求对软件现有功能会造成什么影响?
<br
/>
这个需求应该实现什么样的功能?
<br
/>
这个需求是否依赖其他模块提供相关支持?
<br
/>
[可选] 这个需求有哪些实现方式?
<br
/>
[可选] 这些可选的实现方式分别有哪些优缺点?
</p>
<p>
编写优秀的“bug” issue
<br
/>
如果你要录入一个 bug issue,最好在内容主体中包含下面这些内容:
</p>
<p>
提供出现问题的软件版本号、操作系统环境等相关信息
<br
/>
提供能够稳定复现问题的相关步骤
<br
/>
描述期待行为与当前行为
<br
/>
[可选] 你对这个 bug 原因的相关分析
</p>
<ol>
<li>
开始一个工单时,在工单跟踪工具中更新状态,比如标记她正在进行,这会通知你的团队你正在进行的工作, 并且告诉你为了完成这个工单需要创建的分支数量
</li>
<li>
<p>
从develop分支上创建一个命名包含工单编号和大致的工作描述的新分支
<br
/>
<img
alt=
"Gitlab分支创建"
src=
"///D://GitLab/demo/img/issueBranch.png"
/></p>
</li>
<li>
<p>
在开始工作后,确保每次可能的更改并入master分支之前,工单分支能保持最新的状态。每次提交说明都包含以工单号的方括号开头:[#1234]
</p>
</li>
<li>
运行相关测试,通过代码检查
</li>
<li>
当你完成工作的时候上传最后一个提交,包含关键词resolves 后跟工单号: Resolves [#1234]
</li>
<li>
用工单追踪工具为这个工单添加一个评论 比较描述证明已经完成该工单,如截图等
</li>
<li>
确保工单分支保持最新,并将工作分支合并到develop分支,并将分支推送到远程中央仓库
</li>
<li>
假设别无问题,关闭工单
</li>
<li>
最后删除本地的工单分支以及这个工单分支的远程副本
</li>
</ol>
<p>
Readme 概述项目
<br
/>
. 如果项目包含依赖,列出一依赖
<br
/>
. 如果有安装说明,则列出安装指南
</p>
<p>
如何保持分支最新
<br
/>
比如在develop分支上开发,上游develop分支已经更新
<br
/>
1. 本地 git checkout develop
<br
/>
2. git pull origin develop
<br
/>
比如你工作在某个工单分支feature/login,源分支为develop则需
<br
/>
1. git checkout feature/login
<br
/>
2. git rebase develop
</p></article></body></html>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment