{"id":913,"date":"2015-08-20T23:05:49","date_gmt":"2015-08-20T20:05:49","guid":{"rendered":"https:\/\/blog.alexei-developer.com\/?p=913"},"modified":"2015-08-20T23:05:49","modified_gmt":"2015-08-20T20:05:49","slug":"%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b8","status":"publish","type":"post","link":"https:\/\/blog.alexei-developer.com\/?p=913","title":{"rendered":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u041f\u041e \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0445\u0443\u043a Git"},"content":{"rendered":"<p style=\"text-align: justify;\">\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u043e\u0444\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0445\u0443\u043a\u043e\u0432 \u0433\u0438\u0442.\u00a0\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 qmake. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li style=\"text-align: justify;\">\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Qt;<\/li>\n<li style=\"text-align: justify;\">\u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438;<\/li>\n<li style=\"text-align: justify;\">\u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430 \u0432 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a (\u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0435\u0448 \u043a\u043e\u043c\u043c\u043c\u0438\u0442\u0430);<\/li>\n<li style=\"text-align: justify;\">\u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u041f\u041e (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0433\u0440\u043e\u043c\u043a\u043e \u043d\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u043e\u0445\u043e\u0442\u0430 \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0438\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f qmake, make clean, make);<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u0412\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043c\u0438\u043d\u0443\u0441\u043e\u0432 \u043b\u0438\u0448\u0451\u043d \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0445\u0443\u043a\u043e\u0432 \u0433\u0438\u0442\u0430. \u0421\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li style=\"text-align: justify;\">\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430;<\/li>\n<li style=\"text-align: justify;\">\u0441\u0442\u0440\u043e\u0433\u043e\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 workflow;<\/li>\n<li style=\"text-align: justify;\">\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u0438;<\/li>\n<li style=\"text-align: justify;\"><em>\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043b\u044e\u0441\u0438\u043a<\/em>\u00a0&#8212; \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e workflow \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c changelog;<br \/>\n<!--more--><\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0435\u0442\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0442\u043e\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445! \u0421\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0442\u043a\u0443 develop\u00a0\u0434\u043e\u043b\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041f\u0435\u0440\u0435\u0434 \u0441\u043b\u0438\u044f\u043d\u0438\u0435\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0443\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0440\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0432 \u0432\u0435\u0442\u043a\u0443 develop \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u0447 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432, \u0430 \u00a0\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, jenkins \u0441\u0430\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442. \u041d\u043e \u0434\u043e \u0442\u0430\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u0438 \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u044f\u0442.\u00a0\u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e, \u0447\u0442\u043e \u0432 \u041f\u041e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430 \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0433. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0438\u0442 \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0444\u0438\u0447\u0430 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430;<\/li>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0433 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430;<\/li>\n<li style=\"text-align: justify;\">\u0421\u043b\u0438\u044f\u043d\u0438\u0435 \u0432\u0435\u0442\u043e\u043a \u0432 \u0432\u0435\u0442\u043a\u0443 develop \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043e\u043f\u0446\u0438\u044f\u043c\u0438\u00a0&#8212;no-ff &#8212;no-commit (git merge &#8212;no-ff &#8212;no-commit FEATURE|BUG), \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438;<\/li>\n<li>\u0412\u0441\u0435\u00a0\u0444\u0438\u0447\u0438 \u0438 \u0431\u0430\u0433\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f\u00a0\u0432 \u0432\u0435\u0442\u043a\u0443\u00a0develop;<\/li>\n<li>\u0412 \u0432\u0435\u0442\u043a\u0443 master \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0432\u0435\u0442\u043a\u0438\u00a0develop;<\/li>\n<li>\u0412 \u0432\u0435\u0442\u043a\u0443 master \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 &#8212;ff;<\/li>\n<\/ul>\n<h2 style=\"text-align: center;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e \u0441\u0430\u043c \u0445\u0443\u043a<\/h2>\n<p style=\"text-align: justify;\">\u041a\u043e\u0434 \u0445\u0443\u043a\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043e\u0444\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0445\u0443\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 .git\/hooks!<\/p>\n<p style=\"text-align: justify;\">\u0425\u0443\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043e\u0444\u0442\u0430, \u043e \u0447\u0438\u0441\u043b\u0435 \u0432 \u044d\u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u043a\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.\u00a0(<em>\u0414\u0430&#8230; \u043f\u043e\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u043e\u0434\u0438\u043d<\/em> \u0444\u0430\u0439\u043b)<\/p>\n<ul>\n<li>version-branch_build.txt &#8212; \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043c\u044f \u0432\u0435\u0442\u043a\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 (&#171;develop&#187;);<\/li>\n<li>version-build.txt &#8212; \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 (&#171;1&#187;);<\/li>\n<li>version-template.txt &#8212; \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 (&#171;0.%build%&#187;);<\/li>\n<li>version.txt &#8212; \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0444\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b (&#171;0.1&#187;);<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u0412\u043e\u043e\u0431\u0449\u0435\u043c-\u0442\u043e \u0441\u0430\u043c \u0445\u0443\u043a, \u043d\u0438\u0447\u043a\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u044b\u0448\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u0412\u043e\u0442 \u0435\u0433\u043e \u043a\u043e\u0434:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">#!\/bin\/bash\r\n\r\nfile_build_number=\"version-build.txt\"\r\nfile_template_version=\"version-template.txt\"\r\nfile_full_version=\"version.txt\"\r\nfile_up_build_number_branch=\"version-branch_build.txt\"\r\n\r\ncurrent_branch=`git symbolic-ref --short HEAD`\r\nup_build_number_branch=`cat $file_up_build_number_branch`\r\n\r\nif [ ! -f $file_build_number ] || [ ! -f $file_template_version ] || [ ! -f $file_full_version ] || [ ! -f $file_up_build_number_branch ]; then \r\n\techo \"Warning: can't increment build version! Check files: \\\"$file_build_number\\\", \\\"$file_template_version\\\", \\\"$file_full_version\\\" and \\\"$file_up_build_number_branch\\\" in root dir git storage.\"\r\n\texit 1\r\nfi\r\n\r\n\r\necho \"Current branch: $current_branch\"\r\necho \"Up build number branch: $up_build_number_branch\"\r\nif [ \"$current_branch\" != \"$up_build_number_branch\" ]; then\r\n\texit 0\r\nfi\r\n\r\n\r\nnumber_build=`cat $file_build_number`\r\nnumber_build=$(( number_build+1 ))\r\necho -ne $number_build &gt; $file_build_number\r\n\r\ncat $file_template_version | sed \"s\/%build%\/$number_build\/g\" &gt; $file_full_version\r\n\r\ngit add $file_up_build_number_branch\r\ngit add $file_build_number\r\ngit add $file_template_version\r\ngit add $file_full_version\r\n\r\necho \"Current soft version: $file_full_version\"\r\n\r\nexit 0<\/pre>\n<h2 style=\"text-align: center;\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p style=\"text-align: justify;\">\u0421\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0432\u044b\u0448\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u044e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u0438 \u0434\u043e\u0445\u043e\u0436\u0443 \u0434\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 v0.1. \u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043c\u043d\u0435 \u0441\u0442\u0430\u0432\u044f\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0434\u043e\u043f\u0443\u0441\u0438\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 &#171;\u0444\u0438\u0447\u0430 #1&#187;. \u0414\u0435\u043b\u0430\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u043b\u044f \u0444\u0438\u0447\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443 f_1, \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0442\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u0435\u0442\u043a\u0438 develop. \u0414\u0435\u043b\u0430\u044e \u0432\u0441\u0451 \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">git init\r\n# ...\r\n# \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0432 \u0434\u0435\u0432\u0435\u043b\u043e\u043f\r\n# ...\r\ngit checkout -b f_1\r\n# ...\r\n# \u043f\u0438\u0448\u0435\u043c \u0444\u0438\u0447\u0443 1\r\n# ...\r\ngit checkout develop\r\ngit merge --no-ff --no-commit<\/pre>\n<p style=\"text-align: justify;\">\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u0422\u0443\u0442 \u0434\u0432\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u044e\u043c\u0438\u043d\u043a\u0438 \u0434\u043b\u044f workflow:<\/p>\n<ul>\n<li style=\"text-align: justify;\">\u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0444\u0430\u0441\u0442-\u0444\u043e\u0440\u0432\u0430\u0440\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438: \u043f\u0435\u0440\u0432\u043e\u0435 &#8212; \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043c\u0438\u0442 \u0432 develop\u00a0\u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442; \u043e\u0434\u0438\u043d \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0444\u0438\u0447\u0430 \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0433; \u043e\u0434\u043d\u0430 \u0444\u0438\u0447\u0430 \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0433 &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 changelog;<\/li>\n<li style=\"text-align: justify;\">\u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0438\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0445\u0443\u043a. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u043a\u043e\u043c\u043c\u0438\u0442 \u0432 git gui \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0439&#8230;<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0430\u0445 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u041f\u0435\u0440\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u044d\u0442\u043e \u0446\u0438\u0444\u0440\u0430 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0444\u0442\u0430 \u0432 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u043c \u043a \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044e \u0432\u0438\u0434\u0435. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0444\u0430\u0439\u043b \u0441 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043e\u043a\u043d\u0430.<\/p>\n<div id=\"attachment_926\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-926\" class=\"size-thumbnail wp-image-926\" src=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/1-150x87.png\" alt=\"\u041f\u043e\u0441\u043b\u0435 git merge\" width=\"150\" height=\"87\" srcset=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/1-150x87.png 150w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/1-300x173.png 300w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/1.png 791w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><p id=\"caption-attachment-926\" class=\"wp-caption-text\">\u041f\u043e\u0441\u043b\u0435 git merge<\/p><\/div>\n<div id=\"attachment_927\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-927\" class=\"wp-image-927 size-thumbnail\" src=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/2-150x87.png\" alt=\"\u041f\u0438\u0448\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\" width=\"150\" height=\"87\" srcset=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/2-150x87.png 150w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/2-300x173.png 300w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/2.png 791w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><p id=\"caption-attachment-927\" class=\"wp-caption-text\">\u041f\u0438\u0448\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043c\u043c\u0438\u0442<\/p><\/div>\n<div id=\"attachment_928\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-928\" class=\"size-thumbnail wp-image-928\" src=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/3-150x87.png\" alt=\"\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430\" width=\"150\" height=\"87\" srcset=\"https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/3-150x87.png 150w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/3-300x173.png 300w, https:\/\/blog.alexei-developer.com\/wp-content\/uploads\/2015\/08\/3.png 791w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><p id=\"caption-attachment-928\" class=\"wp-caption-text\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">\u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0433\u0438, \u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u0435\u0442\u043a\u0438 develop\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u0442\u043e\u0439. \u0417\u0430\u0447\u0435\u043c \u043c\u043d\u0435 \u0447\u0438\u0441\u0442\u0430\u044f \u0432\u0435\u0442\u043a\u0430 develop \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u043b\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432? &#8212; \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u0433\u043e changelog!<\/p>\n<h2 style=\"text-align: center;\">\u0413\u0435\u043d\u0435\u0440\u0438\u043c changelog<\/h2>\n<p style=\"text-align: justify;\">\u041f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u044c\u0441\u044f \u0432\u0438\u0434\u0435\u0442\u044c \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0438\u0442 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ git log --first-parent --oneline v0.1..\r\n7504a2d \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 \u21161\r\n2d21ff0 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0438\u0447\u0430 \u21162\r\n6c9e518 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0438\u0447\u0430 \u21161<\/pre>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e\u043f\u0438\u0448\u0443 \u043e\u043f\u0446\u0438\u0438:<\/p>\n<ul>\n<li>first-parent &#8212; \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0432\u0435\u0442\u043a\u0430 \u043f\u0440\u0438 \u0441\u043b\u0438\u044f\u043d\u0438\u0438;<\/li>\n<li>oneline &#8212; \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443. \u0411\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u0442\u044c, \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c<\/li>\n<li>v0.1.. &#8212; \u0442\u0435\u0433 \u0438\u043b\u0438 \u0445\u0435\u0448, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043b\u043e\u0433 \u043e\u0442 v0.1 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\u041d\u043e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0438\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043f\u043e \u0434\u0430\u0442\u0430\u043c \u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0438\u0447\u0430 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0433 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$git log --first-parent --format=\"%s (%ci)\" v0.1..\r\n\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 \u21161 (2015-08-20 20:34:40 +0300)\r\n\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0438\u0447\u0430 \u21162 (2015-08-20 20:34:03 +0300)\r\n\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0438\u0447\u0430 \u21161 (2015-08-19 22:53:40 +0300)<\/pre>\n<h2 style=\"text-align: center;\">\u041f\u043b\u044e\u0448\u043a\u0430<\/h2>\n<p style=\"text-align: justify;\">\u0415\u0441\u043b\u0438 \u0445\u0443\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043d \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0438\u0442\u044c \u0432 \u043f\u043b\u0430\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0445\u0443\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0445\u0443\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u043a\u0438, \u0430 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0431\u044b\u043b\u0438. \u0414\u0430, \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c, \u043d\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043a \u043a\u043e\u043c\u043c\u0438\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u0443 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438 \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430. \u0412\u043e\u043e\u0431\u0449\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0445\u0443\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 (\u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432), \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f:<\/p>\n<pre class=\"brush: python; gutter: true; first-line: 1\">#!\/usr\/bin\/env python\r\n\r\n# -*- coding: utf-8 -*-\r\n\r\n\r\ndef test_develop_environment():\r\n    path_git_hook = \".git\/hooks\/pre-commit\"\r\n    cmd_git_branch = \"git rev-parse --abbrev-ref HEAD\"\r\n    file = \"version-branch_build.txt\"\r\n    hash_hook = \"fd97bf9a8fdd047292bacf0ce611b704\"\r\n\r\n    try:\r\n        if os.environ[\"DEBUG\"] != \"1\":\r\n            return True\r\n    except:\r\n        # \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0440\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n        return True\r\n\r\n    cmd_branch_current=subprocess.Popen(cmd_git_branch, shell=True, stdout=subprocess.PIPE)\r\n    git_branch_current=cmd_branch_current.stdout.read()\r\n    git_branch_current=git_branch_current.strip()\r\n\r\n    file_branch_version=open(file)\r\n    git_branch_version=file_branch_version.read()\r\n    git_branch_version=git_branch_version.strip()\r\n\r\n    if git_branch_current != git_branch_version:\r\n        return True\r\n\r\n    if os.path.isfile(path_git_hook):\r\n\r\n        md5hash=hashlib.md5()\r\n        md5hash.update( open(path_git_hook).read() )\r\n        if hash_hook == md5hash.hexdigest():\r\n            return True\r\n\r\n        print u\"\u0425\u0435\u0448 \u0441\u0443\u043c\u043c\u0430 \u0445\u0443\u043a\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u0430\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u044d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430, \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.\"\r\n        return False\r\n\r\n    print u\"\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0435\u0442\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c git hook \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u041f\u041e\"\r\n    return False\r\n\r\n\r\nif __name__ == '__main__':\r\n\r\n    if not test_develop_environment():\r\n        exit(1)<\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u0441\u0430\u043c \u0445\u0443\u043a \u0438 \u0444\u0430\u0439\u043b\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043a\u0438\u043d\u0443\u043b <a href=\"https:\/\/bitbucket.org\/alexei-developer\/workflow\/src\/2d6ef5bb16bb039062cbd81f178f132530b9b4c9\/version-git\/?at=master\" target=\"_blank\">\u0441\u044e\u0434\u0430<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u043e\u0444\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0445\u0443\u043a\u043e\u0432 \u0433\u0438\u0442.\u00a0\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 qmake. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b: \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Qt; \u0436\u0435\u0441\u0442\u043a\u0438\u0439 &hellip; <a href=\"https:\/\/blog.alexei-developer.com\/?p=913\">\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,41],"tags":[],"class_list":["post-913","post","type-post","status-publish","format-standard","hentry","category-7","category-41"],"_links":{"self":[{"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/posts\/913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=913"}],"version-history":[{"count":17,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/posts\/913\/revisions"}],"predecessor-version":[{"id":938,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=\/wp\/v2\/posts\/913\/revisions\/938"}],"wp:attachment":[{"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alexei-developer.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}