рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдХрд╣рд╛рдиреА рдбрд╛рд▓рдирд╛: рдЗрд╖реНрдЯрддрдо рд╢рд╛рдЦрд╛ рдмрд┐рдВрджреБ рдЦреЛрдЬрдирд╛

рдореЗрд░реА рд╕реЗрд╡рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ ~ 15 рд╕рд╛рд▓ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЧрдардиреЛрдВ рдореЗрдВ рдХрдИ рджрд░реНрдЬрди рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реАред рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдпрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рд╣реИ (рдХреЛрдб рдХреА ~ 25K рд▓рд╛рдЗрдиреЗрдВ, ~ 1K рдХрдорд┐рдЯ), рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рд░рд┐рд▓реАрдЬ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдереА:


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрднрд╛рд░реА рдЧреНрд░рд╛рд╣рдХ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрднреА рднреА рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрдЧ рдлрд┐рдХреНрд╕, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрднреА-рдХрднреА рд╕рд┐рд╕реНрдЯрдо рдХреЛрд░ рдореЗрдВ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рднреАред

рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХреЗ рдмрд╛рдж, svn рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ git рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдПрдХ - рдорд╛рд╕реНрдЯрд░ рдкреЗрдбрд╝ рдХреЛ svn рд╕реЗ git рддрдХ рдЦреАрдВрдЪрдирд╛ - рдЖрдорддреМрд░ рдкрд░ git-svn рдХреЗ рдорд╛рдирдХ рд╕рд╛рдзрдиреЛрдВ рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕реЗрдЯ рдирдВрдмрд░ рджреЛ - рдЗрд╕ рдкреЗрдбрд╝ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдореЗрдВ рдХрдИ рдХрд╛рдВрдЯреЗ рдХреИрд╕реЗ рдбрд╛рд▓рдирд╛ рд╣реИ - рдпрд╣ "рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдЖрддреЗ рд╣реИрдВ" рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдм рдЕрдЧрд▓рд╛ рд╕рдВрдЧрдарди рдЬрд╛рдЧ рдЧрдпрд╛, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

  1. рдЙрдиреНрд╣реЗрдВ рдХрд╛рдВрдЯрд╛
  2. рдпрд╣ рд╕рдордЭреЗрдВ рдХрд┐ рдПрдХ рд╕рдордп рдореЗрдВ рд╡рд╣ рдХрд╣рд╛рдБ рдЦреЛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдХрд┐рд╕ рд╕реНрддрд░ рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрджрд┐ рдпрд╣ svn рдЪреЗрдХрдЖрдЙрдЯ рд╣реИ)
  3. рдЗрд╕ рдХрд╛рдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдмреНрд░рдВрдЪ рдмрдирд╛рдПрдВ
  4. рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдЗрд╕ рдмреНрд░рдВрдЪ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдореБрдЦреНрдп рдкреНрд▓рдЧ рдЕрдЪрд╛рдирдХ рдЪрд░рдг 2 рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдЧрд▓реА рд╕реНрдерд╛рдкрдирд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЬрд╛рд▓реА рдереАред Svn рдЪреЗрдХрдЖрдЙрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХрдо рд╕реЗ рдХрдо рдХрд╛рдордХрд╛рдЬреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ svn рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИред рдПрдХ рджреЛ рдмрд╛рд░ рдХреЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрд░реНрдз-рд╣рд╛рде рд╡рд╛рд▓реЗ рдкреБрд░рд╛рддрд╛рддреНрд╡рд┐рдХ рдЕрдзреНрдпрдпрди рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдореИрдВ рдердХ рдЧрдпрд╛ рдФрд░ рдЦреЛрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдерд╛ (git bisect рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣рд╛рдБ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ) рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдХрд▓реА:

#!/bin/sh -ef if [ $# -ne 2 ]; then echo "Usage: $0 <git-repo-dir> <candidate-checkout-dir>" exit 1 fi GIT_REPO="$1" CANDIDATE_DIR=$(cd "$2" && pwd) TAB=$(printf '\t') cd "$GIT_REPO" COMMITS=$(git log --all --format=format:%H) # Remember current commit CURRENT_COMMIT=$(git rev-parse HEAD) for C in $COMMITS; do git checkout --quiet $C echo -n "$C$TAB" diff -urN --exclude=.git --exclude=.svn "$CANDIDATE_DIR" . | wc -l done | sort -t"$TAB" -k2,2n # Restore current commit git checkout --quiet "$CURRENT_COMMIT" 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ 2 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддреА рд╣реИ: (1) рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛, (2) рдЕрдЧрд▓реЗ рдлреЛрд░реНрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рдкрде, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреЗрдбрд╝ рдореЗрдВ "рд╕рдореНрдорд┐рд▓рд┐рдд" рдХрд╛ рд╕реНрдерд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХрдЖрдЙрдЯ рдФрд░ рдХрдЯ-рдЗрди рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реЙрд▓реНрдпреВрдо (рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ) рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде - рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз, рдЬрд╣рд╛рдВ рдорддрднреЗрдж рдХреА рдорд╛рддреНрд░рд╛ рдиреНрдпреВрдирддрдо рд╣реИ - рдФрд░ рдмреНрд░рдВрдЪ рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрд╖реНрдЯрддрдо рд╕реНрдерд╛рди рд╣реИред рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 3810315aaa238e32a7106312f9973f1d1f0ea097 651
 19b595d87eecc43933ea60d89882319c7ac3f512 835
 989cee69664733b773a4a81cc49e2a1a0cdff38a 872
 9026dae1154f98018c808b73c7f1c6cd09310dc7 885
 802943edf287ad28d5e71a57510400afacb49176 894
 c5bd4050fce754e16664e6e1eeb57a4ff3ed06c6444
 dcb70c4a2e9fc0431ceb6154ecd1688189362622 908
 ...


рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА:
 $ git branch new-organization 3810315aaa238e32a7106312f9973f1d1f0ea097 $ git checkout new-organization $ cp -r ../new-organization-fork/* . 

... рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ (рд╢рд╛рдпрдж - рд╕рд╛рде-рд╕рд╛рде рдФрд░ - рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

Source: https://habr.com/ru/post/In191696/


All Articles