ืฉื—ืจื•ืจ ืžืขืจื›ืช ื‘ืงืจืช ืžืงื•ืจ ืžื‘ื•ื–ืจืช Git 2.24

ื–ืžื™ืŸ ืฉื—ืจื•ืจ ืžืขืจื›ืช ื‘ืงืจืช ื”ืžืงื•ืจ ื”ืžื‘ื•ื–ืจืช ื’ื™ื˜ 2.24.0. Git ื”ื™ื ืื—ืช ืžืžืขืจื›ื•ืช ื‘ืงืจืช ื”ื’ืจืกืื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช, ื”ืืžื™ื ื•ืช ื•ื‘ืขืœื™ ื”ื‘ื™ืฆื•ืขื™ื ื”ื’ื‘ื•ื”ื™ื ื‘ื™ื•ืชืจ ื”ืžืกืคืงืช ื›ืœื™ ืคื™ืชื•ื— ื’ืžื™ืฉื™ื ืœื ืœื™ื ืืจื™ื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ื”ืกืชืขืคื•ืช ื•ืžื™ื–ื•ื’ ืขื ืคื™ื. ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืืช ืฉืœืžื•ืช ื”ื”ื™ืกื˜ื•ืจื™ื” ื•ื”ืชื ื’ื“ื•ืช ืœืฉื™ื ื•ื™ื™ื "ื‘ื—ื–ืจื”", ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘-hashing ืžืจื•ืžื– ืฉืœ ื›ืœ ื”ื”ื™ืกื˜ื•ืจื™ื” ื”ืงื•ื“ืžืช ื‘ื›ืœ commit, ื ื™ืชืŸ ื’ื ืœืืžืช ืชื’ื™ื•ืช ื•-commits ื‘ื•ื“ื“ื•ืช ืขื ื—ืชื™ืžื•ืช ื“ื™ื’ื™ื˜ืœื™ื•ืช ืฉืœ ื”ืžืคืชื—ื™ื.

ื‘ื”ืฉื•ื•ืื” ืœืžื”ื“ื•ืจื” ื”ืงื•ื“ืžืช, ื”ื’ืจืกื” ื”ื—ื“ืฉื” ื›ืœืœื” 544 ืฉื™ื ื•ื™ื™ื, ืฉื”ื•ื›ื ื• ื‘ื”ืฉืชืชืคื•ืช 78 ืžืคืชื—ื™ื, ืžืชื•ื›ื 21 ืœืงื—ื• ื—ืœืง ื‘ืคื™ืชื•ื— ืœืจืืฉื•ื ื”. ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืคืงื•ื“ื•ืช ืžืืงืจื• ืชืฆื•ืจื”, ืฉื‘ืืžืฆืขื•ืชืŸ ื ื™ืชืŸ ืœืขื‘ื•ืจ ื‘ืžื”ื™ืจื•ืช ื‘ื™ืŸ ืงื‘ื•ืฆื•ืช ืฉื•ื ื•ืช ืฉืœ ื”ื’ื“ืจื•ืช ืžื‘ืœื™ ืœื”ื™ื›ื ืก ืœืคืจื˜ื™ื ืขืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ืกืคืฆื™ืคื™ื•ืช ื”ืงืฉื•ืจื•ืช ืืœื™ื”ืŸ. ื‘ืขื–ืจืช ืคืงื•ื“ื•ืช ืžืืงืจื•, ืื™ืŸ ืฆื•ืจืš ืœื–ื›ื•ืจ ืื™ืœื• ื”ื’ื“ืจื•ืช ืฆืจื™ืš ืœืฉื ื•ืช ื›ื“ื™ ืœื”ืคืขื™ืœ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื–ื• ืื• ืื—ืจืช. ืœื“ื•ื’ืžื”, ืื ืžืื’ืจ ื’ื“ื•ืœ ื”ื•ื ืื™ื˜ื™, ื™ื™ืชื›ืŸ ืฉืชืจืฆื” ืœืขื‘ื•ืจ ืœืžื ื•ืข ืื™ื ื“ืงืก ื—ื“ืฉ, ืœืืคืฉืจ ื“ื—ื™ืกืช ืงื™ื“ื•ืžืช ื ืชื™ื‘ ื•ืœืืคืฉืจ ืืช ืžื˜ืžื•ืŸ ื”ืงื‘ืฆื™ื ื”ื‘ืœืชื™ ืžืขืงื‘ ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช index.version ืœ-4 ื•ื”ืคืขืœืช core.untrackedCache. ืžืืงืจื• ืžืืคืฉืจื™ื ืœืš ืœื ืœื‘ื–ื‘ื– ื–ืžืŸ ื‘ื—ื™ืคื•ืฉ ืื—ืจ ื”ืคืชืจื•ืŸ ื”ื ื›ื•ืŸ ื‘ืชื™ืขื•ื“, ืืœื ืœื”ืคืขื™ืœ ืžื™ื“ ื”ื’ื“ืจื•ืช ืขื ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืขื‘ื•ืจ ืžืื’ืจื™ื ืขื ืžืกืคืจ ืจื‘ ืฉืœ ืงื‘ืฆื™ื:

    git config feature.manyFiles true

  • ืžื•ืคืขืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืื—ืกื•ืŸ ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ืฆื•ืจื” ืฉืœ ื’ืจืฃ commit (commit-graph), ืฉื‘ื• ืœื ืจืฉื™ืžื” ืœื™ื ื™ืืจื™ืช ืฉืœ hashes ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืขื ืงื™ืฉื•ืจื™ื ืœืื•ื‘ื™ื™ืงื˜ื™ื ืื—ืจื™ื, ืืœื ืžื‘ื ื” ื‘ืฆื•ืจื” ืฉืœ ื’ืจืฃ ืžืฉืžืฉ ืœืื™ื ื“ืงืก . ืื ื‘ืขื‘ืจ, ื›ื“ื™ ืœืงื‘ื•ืข ืืช ื”ืžื”ื“ื•ืจื•ืช ื”ืžื›ื™ืœื•ืช ืชื™ืงื•ืŸ ืžืกื•ื™ื, ื”ื™ื” ืฆื•ืจืš ืœื˜ืขื•ืŸ ื›ืœ ืื•ื‘ื™ื™ืงื˜ ืžื“ื™ืกืง ื›ื“ื™ ืœื—ืคืฉ ืงื™ืฉื•ืจื™ื, ืื– ื›ืืฉืจ ืžืื•ื—ืกื ื™ื ื‘ืฆื•ืจื” ืฉืœ ื’ืจืฃ, ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœืงื‘ื•ืข ืืช ื›ืœ ื”ืงื™ืฉื•ืจื™ื ื”ื“ืจื•ืฉื™ื. ืžืขื‘ืจ ืœืื—ืกื•ืŸ ื‘ืฆื•ืจื” ืฉืœ ื’ืจืฃ commit ื‘-Linux kernel ื•-Git repositories ืืคืฉืจื• ืœื ื• ืœื”ื’ื™ืข ืœืขืœื™ื™ื” ื›ืžืขื˜ ืคื™ ืฉื ื™ื™ื ื‘ื‘ื™ืฆื•ืขื™ ื”ืคืขื•ืœื•ืช ืขื ืกื ื™ืคื™ื. ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ืฉื™ื˜ืช ื”ืื—ืกื•ืŸ ื”ื—ื“ืฉื” ืœืื—ืจ ืฉื“ืจื•ื’ ืœ-Git 2.24, ืขืœื™ืš ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื” "git gc".

    ื‘ื™ืŸ ื”ืฉื™ื ื•ื™ื™ื ื”ืงืฉื•ืจื™ื ืœ-commit-graph, ื ืฆื™ื™ืŸ ื’ื ื›ื™ ื”ื•ื‘ื ื™ื™ืฉื•ื ืžื—ื•ื•ืŸ ื”ืชืงื“ืžื•ืช ื”ืคืขื•ืœื” ื‘ืคืงื•ื“ื•ืช ื”ืงืฉื•ืจื•ืช ืœ-commit-graph ("git commit-graph write", "git commit-graph verify" ื•ื›ื•') ืœืฆื•ืจื” ืžืฉื•ืชืคืช ืขื ืคืงื•ื“ื•ืช ืื—ืจื•ืช...). ืžื—ื•ื•ืŸ ื”ื”ืชืงื“ืžื•ืช ืžื•ืฆื’ ื›ืขืช ืจืง ืขื‘ื•ืจ ื”ื˜ืจืžื™ื ืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (ื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช "-[ืœื-]ื”ืชืงื“ืžื•ืช" ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”ื”ืชื ื”ื’ื•ืช). ื‘ื ื•ืกืฃ, ื ื•ืกืฃ ืคืจืžื˜ืจ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื—ื“ืฉ fetch.writeCommitGraph, ื”ืžืืคืฉืจ ืขื“ื›ื•ืŸ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ื”ืงื•ื‘ืฅ ืขื ื’ืจืฃ ื”-commit ื‘ืžื”ืœืš ืคืขื•ืœื•ืช "git fetch" (ื›ืœ ื”-commits ืฉืื•ื—ื–ืจื• ืžืžืื’ืจื™ื ื—ื™ืฆื•ื ื™ื™ื ื™ืขื‘ืจื• ืžื™ื“ ืœ-commit-graph ืœืœื ืฆื•ืจืš ื”ืคืขืœ ืืช auto-gc ื‘ื ืคืจื“);

  • ื ื•ืกืคื” ืคืงื•ื“ื” ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ืฉื™ื ื•ื™ื™ื - "git filter-repo", ืฉื”ื™ื ื—ืœื•ืคื” ืคืฉื•ื˜ื” ื™ื•ืชืจ ืœืคืงื•ื“ื”"ืขื ืฃ ืคื™ืœื˜ืจ ื’ื™ื˜ยป ืœื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช ืขืœ ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ืฉื™ื ื•ื™ื™ื ื‘ืžืื’ืจ (ืœื“ื•ื’ืžื”, ืžื—ื™ืงืช ืงื•ื‘ืฅ ืžื”ืžืื’ืจ ืื• ืื—ื–ื•ืจ ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ืฉื™ื ื•ื™ื™ื ืœืกืคืจื™ื™ื” ืกืคืฆื™ืคื™ืช). ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื™ืขื™ืœื•ืช, ื‘ืžืงื•ื ื ื™ืชื•ื— ืžืกื•ื“ืจ ืฉืœ commit-by-commit, git filter-repo ืžื‘ืฆืข ืคืขื•ืœื•ืช ืขืœ ื™ื™ืฆื•ื’ ื”ื”ื™ืกื˜ื•ืจื™ื” ื‘ืฆื•ืจื” ืฉืœ ื–ืจื ืจืฆื™ืฃ.

    ืกื™ื ื•ืŸ ื”ื”ื™ืกื˜ื•ืจื™ื” ืžืชื‘ืฆืข ื‘ืืžืฆืขื•ืช ื”ืืคืฉืจื•ืช "-path-{glob,regex}", ื”ืžืืคืฉืจืช ืœืš ืœื”ืฉืชืžืฉ ื’ื ื‘ืžืกื›ื•ืช ืคืฉื•ื˜ื•ืช ื•ื’ื ื‘ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื. ื™ืฉ ื’ื ืืคืฉืจื•ื™ื•ืช ืœื‘ืฆืข ื—ื™ืคื•ืฉ ื•ืœื”ื—ืœื™ืฃ ืื• ืœื ืงื•ืช ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ื™ื ืืจื™ื™ื ืฉื’ื“ื•ืœื™ื ืžื’ื•ื“ืœ ืžืกื•ื™ื. ื›ืœ commit ืฉื ื›ืชื‘ ืžื—ื“ืฉ ืžืกื•ืคืง ืขื ืžื–ื”ื” hash ื—ื“ืฉ SHA-1 ื•ื›ืœ ื”ื”ืคื ื™ื•ืช ืœ-commit ืฉื”ื•ื—ืœืฃ ืžืชืขื“ื›ื ื•ืช ื‘ื”ืชืื ืœืžื–ื”ื” ื”ื—ื“ืฉ.

    ื›ื“ื™ ืœื”ืฆื™ื’ ืกื™ื›ื•ื ืฉืœ ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืœื’ื‘ื™ ื”ืžืื’ืจ (ืžืกืคืจ ืื•ื‘ื™ื™ืงื˜ื™ื ืœืคื™ ืกื•ื’, ืงื‘ืฆื™ื ื•ืกืคืจื™ื•ืช ื”ื’ื“ื•ืœื•ืช ื‘ื™ื•ืชืจ, ืื™ืœื• ื”ืจื—ื‘ื•ืช ื“ื•ืจืฉื•ืช ื™ื•ืชืจ ืฉื˜ื— ื“ื™ืกืง ื•ื›ื•'), ื ื™ืชื ืช ื”ืืคืฉืจื•ืช "-analyze". ื›ื“ื™ ืœื”ืจื—ื™ื‘ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช, ืืคืฉืจ ืœื—ื‘ืจ ื‘-Python ืžื˜ืคืœื™ื ืฉืจื™ืจื•ืชื™ื™ื ืœื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช, ืฉื‘ืืžืฆืขื•ืชื ื ื™ืชืŸ ื’ื ืœื™ืฆื•ืจ ืคืงื•ื“ื•ืช ืžืฉื ื” ื—ื“ืฉื•ืช ื•ื’ื ืœืขื‘ื“ ืื™ืจื•ืขื™ื ืฉื•ื ื™ื (ืœื“ื•ื’ืžื”, ืกื•ื’ื™ ืงื‘ืฆื™ื ื—ื“ืฉื™ื);

  • ื ื•ืกืคื” ืืคืฉืจื•ืช "--end-of-options" ืœื”ืคืจื“ืช ืืคืฉืจื•ื™ื•ืช ืžืฉืžื•ืช ืงื™ืฉื•ืจื™ื, ืฉื™ื›ื•ืœื•ืช ืœื”ืชื—ื™ืœ ืขื ืชื• "-" ื•ืœื”ืชื™ื™ื—ืก ืืœื™ื”ืŸ ื›ืืคืฉืจื•ื™ื•ืช ("git log --end-of-options -super-dangerous-option" ). ืื ื‘ื—ื™ื™ ื”ื™ื•ืžื™ื•ื ืืคืฉืจ ืœื‘ืจื•ื— ืžืฉืžื•ืช ื›ืืœื” ื›ืžื• "git log 'refs/heads/-super-dangerous-option'", ืื– ืœืชืกืจื™ื˜ื™ื ืขืœื•ืœื•ืช ืœื”ื™ื•ืช ื‘ืขื™ื•ืช ื‘ื”ื’ื“ืจืช ืžืจื—ื‘ ื”ืฉืžื•ืช. ื”ืžืคืจื™ื“ ื”ืžืงื•ื‘ืœ " - " ืื™ื ื• ื™ืฉื™ื ื‘ืžืงืจื” ื–ื”, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ื›ื‘ืจ ืžืฉืžืฉ ืœื”ืคืจื“ืช ืฉืžื•ืช ืงื™ืฉื•ืจื™ื ืžืงื‘ืฆื™ื (ืœื“ื•ื’ืžื”, "git log โ€”end-of-options โ€”super-dangerous-option ^master โ€” path/to /ืงื•ึนื‘ึถืฅ");
  • ื ื•ืกืคื• ืืคืฉืจื•ื™ื•ืช "--strategy" ื•-"--strategy-option" ืœ-"git rebase --rebase-merges" ื›ื“ื™ ืœื‘ื—ื•ืจ ืืกื˜ืจื˜ื’ื™ื•ืช ืžื™ื–ื•ื’;
  • ื ื•ืกืฃ ืžื˜ืคืœ ื—ื“ืฉ ืžืกื•ื’ ".git/hooks/pre-merge-commit" ื”ื ืงืจื ืœืื—ืจ ื”ืฉืœืžืช ื”ืžื™ื–ื•ื’ ืืš ืœืคื ื™ ื›ืชื™ื‘ืช ื”-commit ื”ืžืชืงื‘ืœ;
  • ืชืžื™ื›ื” ื‘ื”ืฉืœืžืช ืžืฉืชื ื™ ืชืฆื•ืจื” ื‘ื™ื—ืก ืœื”ื’ื“ืจื•ืช ืฉืœ ืคืงื•ื“ื•ืช ืกืคืฆื™ืคื™ื•ืช ื ื•ืกืคื” ืœืžื ื•ืข ื”ืฉืœืžืช ื”ืคืงื•ื“ื•ืช.
    ืœื“ื•ื’ืžื”, ืื ืืชื” ืฆืจื™ืš ืœื”ืงืœื™ื“ "git -c core.autocrlf=false add path/to/my/file" ืื‘ืœ ืœื ื–ื•ื›ืจ ืืช ื”ืฉื ื”ืžื“ื•ื™ืง ืฉืœ ื”ืžืฉืชื ื” "core.autocrlf", ืืชื” ื™ื›ื•ืœ ืœืœื—ื•ืฅ ืขืœ Tab ื•ืœืงื‘ืœ ืจึถืžึถื–.

ื‘ื ื•ืกืฃ, ืžืคืชื—ื™ Git ื”ื•ืกื™ืฃ ืงื•ื“ ื”ืชื ื”ื’ื•ืช ืœืžืฉืชืชืฃ ื‘ืคืจื•ื™ืงื˜, ื”ืžื’ื“ื™ืจ ืืช ื”ืขืงืจื•ื ื•ืช ื”ื‘ืกื™ืกื™ื™ื ืœืคืชืจื•ืŸ ืžืฆื‘ื™ ืงื•ื ืคืœื™ืงื˜. ื”ืžืกืžืš ืžื‘ื•ืกืก ืขืœ ื”ื”ืžืœืฆื•ืช"ืืžื ืช ื”ืชื•ืจืžื™ื", ื‘ืฉื™ืžื•ืฉ ื‘ืคืจื•ื™ืงื˜ื™ื ืจื‘ื™ื ืฉืœ ืงื•ื“ ืคืชื•ื—, ื›ื•ืœืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก, Eclipse, Freedesktop, GitLab, Ruby ื•-Kubernetes. ื”ืžืกืžืš ืžื’ื“ื™ืจ ืฉื•ื•ื™ื•ืŸ ื”ื–ื“ืžื ื•ื™ื•ืช ืœื›ืœ ื”ืžืฉืชืชืคื™ื, ืœืœื ืงืฉืจ ืœืชืคื™ืกืช ืขื•ืœืžื, ื’ื™ืœื, ืžื’ื“ืจื, ื”ืขื“ืคื•ืชื™ื”ื ื”ื“ืชื™ื•ืช, ืจืžืช ื”ื”ืฉื›ืœื”, ืžืขืžื“ื ื”ื—ื‘ืจืชื™ ื•ื”ืœืื•ื. ื”ืงื”ื™ืœื” ืžื‘ืจื›ืช ืขืœ ืฆื•ืจื” ื™ื“ื™ื“ื•ืชื™ืช ืฉืœ ืชืงืฉื•ืจืช, ื”ื‘ื ื”, ืืžืคืชื™ื” ืœื‘ืขื™ื•ืช ืฉืœ ืžืฉืชืชืคื™ื ืื—ืจื™ื, ืงื‘ืœืช ื‘ื™ืงื•ืจืช ื‘ื•ื ื” ื•ืงื‘ืœืช ื”ื”ื—ืœื˜ื•ืช ื”ื˜ื•ื‘ื•ืช ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ื”ืงื”ื™ืœื” ื›ื•ืœื”. ื˜ืจื•ืœื™ื, ืชืงืฉื•ืจืช ืคื•ื’ืขื ื™ืช, ื ื™ืกื™ื•ื ื•ืช ื”ืฉืคืœื”, ื”ื˜ืจื“ื”, ื”ืคืจื•ืช ืฉืœ ืคืจื˜ื™ื•ืช, ื—ืฉื™ืคืช ืžื™ื“ืข ืื™ืฉื™ ื•ืคืขื•ืœื•ืช ืื—ืจื•ืช ืฉืขืœื•ืœื•ืช ืœื”ื™ื—ืฉื‘ ื‘ืœืชื™ ืžืชืื™ืžื•ืช ืœืชืงืฉื•ืจืช ืžืงืฆื•ืขื™ืช ืื™ื ืŸ ืžื•ืชืจื•ืช.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”