рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЬреАрдердм рдкрд░ рдЪрд▓рддреЗ рд╣реБрдП рдореИрдВрдиреЗ "v2.3.4" рдЬреИрд╕реЗ рдЯреИрдЧ рджреЗрдЦреЗ рдФрд░ "рдмрдореНрдк рд╕рдВрд╕реНрдХрд░рдг" рдЬреИрд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЬрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдХрд╣реАрдВ рд▓рд┐рдм / рд╡рд░реНрдЬрди рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рдерд╛ - рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рдерд╛ред
рдФрд░ рдЬрдм рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рдЖрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдХрд╣рд╛: тАЬрдирд╣реАрдВ! рдореИрдВ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд╣рд╛рде рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд░рдиреЗ рджреЗрдВ! "
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ:
- рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рдЯреНрд░рд┐рдкрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ: major.minor.patch рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рддрд░реНрдХрд╕рдВрдЧрдд рдиреАрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ;
- рдкреНрд░рддреНрдпреЗрдХ рдирдП рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп, рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлреЙрд░реНрдо рд╡реА <рдореЗрдЬрд░> <рдорд╛рдЗрдирд░> рдХрд╛ рдЯреИрдЧ рдмрдирд╛рддрд╛ рд╣реВрдВ;
- Git рдореБрдЭреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдЯреИрдЧ (рдЗрд╕ рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирдВрдмрд░ рджреЗрдЧрд╛ред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
Git рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рд╣реИрдВ, рд╣рдо рджреЛ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ:
git describe
- рдЗрд╕ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдирд╡реАрдирддрдо рдЯреИрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ;git show
- рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦреЗрдВрдЧреЗ)ред
рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореИрдВрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореЗрд░реА рд░реЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХрд╛ version.rb рдлрд╝рд╛рдЗрд▓ рд░рдЦрд╛:
module AppName module Version Described = (IO::popen('git describe --long') { |gs| gs.read }).strip Number = Described.gsub('-', '.').gsub(/^v/, '').split('.')[0..-2].join('.') Date = Date.strptime( IO::popen('git show -s --format="%ct"') { |gs| gs.read } , "%s") Revision = (IO::popen('git show -s --format="%H"') { |gs| gs.read }).strip end end
рдпрд╣рд╛рдБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
git describe --long
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
v0.8-3-g387f83f
, рдЬрд╣рд╛рдБ
v0.8
- рдЯреИрдЧ рдирд╛рдо3
- рдЗрд╕ рдЯреИрдЧ рдХреЗ рдмрд╛рдж рдХрдорд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ (0 рдпрджрд┐ рдЯреИрдЧ рд╡рд░реНрддрдорд╛рди рдХрдореЗрдВрдЯ рдкрд░ рд╕реЗрдЯ рд╣реИ)387f83f
- рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╣реИрд╢ред
рдпрд╣ рдкрдВрдХреНрддрд┐
Described.gsub('-', '.').gsub(/^v/, '').split('.')[0..-2].join('.')
рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ
Described.gsub('-', '.').gsub(/^v/, '').split('.')[0..-2].join('.')
0.8.3
git show -s --format="%ct"
рд╣рдореЗрдВ рд╡рд╣ рджрд┐рдирд╛рдВрдХ рдорд┐рд▓рддреА рд╣реИ, рдЬрдм рд╡рд░реНрддрдорд╛рди рдХрдореЗрдВрдЯ рдпреВрдирд┐рдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░
git show -s --format="%H"
рд╣рдореЗрдВ рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрд╢ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдЕрдм, рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред рдФрд░ рдЕрдм, рдкреГрд╖реНрда рдкрд░ рдХрд╣реАрдВ рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
" AppName. #{AppName::Version::Number} #{I18n.l AppName::Version::Date, :format => :long} ."
рдФрд░ рдорд┐рд▓рддрд╛ рд╣реИ
" AppName. 0.8.3 27 2012 ."
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖
рдЖрдХрд░реНрд╖рдг рдЖрддреЗ рд╣реИрдВ
- рдЕрдм рдЖрдкрдХреЛ рд╡рд░реНрдЬрди рдирдВрдмрд░реЛрдВ рдкрд░ рдХрдо рд╕реНрдЯреАрдо рд▓реЗрдирд╛ рд╣реИ, рдФрд░ рдХреЗрд╕ "рдЖрд╣, рд▓рд╛рдирдд рд╣реИ, рд╡рд░реНрдЬрди рдирдВрдмрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рд╣реИ!" рдЕрдм рдХрдо рд╣реЛрдЧрд╛ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдорд╛рдЗрдирд░ рдФрд░ рдореЗрдЬрд░ рд╡рд░реНрдЬрди рд╣рд░ рджрд┐рди, рд╕рд╣реА рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ?);
- (рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдХреЛрдб рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЕрд╕рдВрдЧрддрд┐ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрднрд╛рд╡рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ);
- рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ (C ++) рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ред
рд╡рд┐рдкрдХреНрд╖
- рдпрд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдФрд░ рдХреМрди рдФрд░ рдХреНрдпреЛрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдб рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рдерд╛?);
- рд╕рдВрд╕реНрдХрд░рдг рдкреИрдЪ рдирдВрдмрд░ (рджреВрд╕рд░реА рдУрд░, рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ) рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВ;
- рдХрднреА-рдХрднреА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрднреА рднреА рдХрдард┐рди рд░реВрдк рд╕реЗ рд╡рд░реНрддрдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ;
- рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHP рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рддреАрди рд╢реЗрд▓-рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рднрд╣реАрди рд╣реИред
рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?
рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
git рд╡рд░реНрдгрди рдФрд░
git рдореИрдиреБрдЕрд▓
рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, "<CVS> рдСрдЯреЛрд╡реЛрд╡рд░реНрдбрд┐рдВрдЧ" (рдЬрд╣рд╛рдВ <CVS> рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд╛рдо рд╣реИ) рдкрд░ рдПрдХ рдЦреЛрдЬ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЕрд╡рд╕рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рд▓рд┐рдП рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред
рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХреНрд░рдо рдореЗрдВ рдЕрдЪреНрдЫрд╛ рднрд╛рдЧреНрдп (рдХрдо рд╕реЗ рдХрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ)ред