рд╕рдВрднрд╡рддрдГ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЪреЗрдХрдЖрдЙрдЯ (svn) рдФрд░ рдХреНрд▓реЛрди (git, hg) рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рд╡реЗ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ: рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░, рдХрд╛рдо, src, рдЖрджрд┐ред
рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдпрд╛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ? рднрд▓реЗ рд╣реА рдЙрддреНрддрд░ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ
рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд╛рдл рдФрд░ рд╕реБрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ ~ / рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рдЧрднрдЧ 20 рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬреНрдЮрд╛ рджреА рдЧрдИ рд╣реИред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рддреЗрдЬ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЗрд╕ рд▓рд┐рдкрд┐ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдмрд┐рд▓реНрд▓реА рдХреА рдЫреЛрдЯреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рддрд╣рддред
рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдПрдХ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред
рдкрд╛рдЗрдк рдпрд╛
easy_install рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
$ sudo pip install unpushed
рдпрд╛
$ pip install --user unpushed
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ~ / рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХрд╛рд░реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдЕрд╕рдВрдХреНрд░рдорд┐рдд рдФрд░ рдЧреИрд░-рдкреБрд╢ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд VCS рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:
- рдЕрд╕реНрдерд┐рд░
- Git
- рд╡рд┐рдирд╛рд╢
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ
locate(1)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕рд░рд▓
find(1)
рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ unpushed -w ~/workspace
рдЖрдк
--help
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдиреНрдп рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реВрдЪрдирд╛рдПрдВ
$ unpushed-notify ~/workspace
рдкрд░рд┐рд╡рд░реНрддрди рди рд╣реЛрдиреЗ рдкрд░ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ (рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд▓рд┐рдмрдиреЗрдЯ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдПрдХ рд╕реВрдЪрдирд╛ рджрд┐рдЦрд╛рдПрдВред рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ (!) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдВрдЯреНрд░рд╛рдм рд╕рдВрдкрд╛рджрдХ рдЪрд▓рд╛рдПрдВ:
$ crontab -e
рдФрд░ рдЗрд╕ рддрд░рд╣ рдПрдХ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
*/10 18-20 * * * unpushed-notify ~/workspace
рдЙрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ uncommitted рдкрд░рд┐рд╡рд░реНрддрди рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░рддрд┐рдмрдВрдз
рдЧреИрд░-рдкреНрд░рддрд┐рдмрджреНрдз рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз VCS рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдирдлрд╝рд┐рдЯреЗрдб рд╢рд╛рдЦрд╛рдПрдБ рдХреЗрд╡рд▓ рдЧрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реВрдЪрдирд╛рдПрдВ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ pynotify рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЕрд░реНрдерд╛рддреНред рд╕рднреА рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рдг рдкрд░ред
рддреНрдпрд╛рдЧ
рдпрд╣
рдмрд┐рдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рдВрдЯрд╛ рд╣реИред рдЕрдЦрдВрдбрд┐рдд рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдорд░реНрдердиред рдореБрдЭреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ, рддрднреА рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ Git рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдпрд╛ рдПрдЪрдЬреА рдореЗрдВ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред рдореИрдВ
рдЧрд┐рддреБрдм рдкрд░ рдЖрдкрдХрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред