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

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

ื‘ื”ืฉื•ื•ืื” ืœืžื”ื“ื•ืจื” ื”ืงื•ื“ืžืช, ื”ื’ืจืกื” ื”ื—ื“ืฉื” ื›ืœืœื” 583 ืฉื™ื ื•ื™ื™ื, ืฉื”ื•ื›ื ื• ื‘ื”ืฉืชืชืคื•ืช 84 ืžืคืชื—ื™ื, ืžืชื•ื›ื 32 ืœืงื—ื• ื—ืœืง ื‘ืคื™ืชื•ื— ืœืจืืฉื•ื ื”. ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื:

  • ื”ืืคืฉืจื•ืช ืฉืœ ืฉื™ื‘ื•ื˜ ื—ืœืงื™ ืžืชืงืจื‘ืช ืœื™ื™ืฆื•ื‘ ื•ืžื•ื›ื ื•ืช ืžืœืื”, ื•ืžืืคืฉืจืช ืœื”ืขื‘ื™ืจ ืจืง ื—ืœืง ืžื”ื ืชื•ื ื™ื ื•ืœืขื‘ื•ื“ ืขื ืขื•ืชืง ืœื ืฉืœื ืฉืœ ื”ืžืื’ืจ. ืฉื™ื‘ื•ื˜ ื˜ื™ืคื•ืกื™ ืžืขืชื™ืง ืืช ื›ืœ ื”ื ืชื•ื ื™ื ืžื”ืžืื’ืจ, ื›ื•ืœืœ ื›ืœ ื’ืจืกื” ืฉืœ ื›ืœ ืงื•ื‘ืฅ ื‘ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ืฉื™ื ื•ื™ื™ื. ืขื‘ื•ืจ ืžืื’ืจื™ื ื’ื“ื•ืœื™ื ืžืื•ื“, ื”ืขืชืงืช ื ืชื•ื ื™ื ื’ื•ืจืžืช ืœื’ื™ื“ื•ืœ ืžืฉืžืขื•ืชื™ ื‘ืชืขื‘ื•ืจื” ื•ื‘ืฉื˜ื— ื”ื“ื™ืกืง, ื’ื ืื ื”ืžืคืชื— ืžืขื•ื ื™ื™ืŸ ืจืง ื‘ืชืช-ืงื‘ื•ืฆื” ืฉืœ ื”ืงื‘ืฆื™ื. ื›ื“ื™ ืœื”ืงืœ ืขืœ ืื—ื–ื•ืจ ืจืง ื—ืœืง ืžืขืฅ ื”ืžืงื•ืจ ื”ืขื•ื‘ื“, ื”ืžื”ื“ื•ืจื” ื”ื—ื“ืฉื” ืžืฆื™ื’ื” ืคืงื•ื“ืช "sparse-checkout" ื ื™ืกื™ื•ื ื™ืช ื•ืืคืฉืจื•ืช "--sparse" ื—ื“ืฉื” ืขื‘ื•ืจ ื”ืคืงื•ื“ื” "clone".

    ื‘ืขื‘ืจ, ืชื”ืœื™ืš ื”ืฉื™ื‘ื•ื˜ ื”ืกืœืงื˜ื™ื‘ื™ ื‘ื•ืฆืข ื‘ืืžืฆืขื•ืช ื”ืžืฉื™ืžื” ืžืกื ื ื™ื ืœืกื ืŸ ืชื•ื›ืŸ ืžื™ื•ืชืจ ื•ืืคืฉืจื•ืช "-ืœืœื ืชืฉืœื•ื" ื›ื“ื™ ืœื‘ื˜ืœ ืืช ืžื™ืœื•ื™ ื”ืงื‘ืฆื™ื ื”ื—ืกืจื™ื. ืœืื—ืจ ืžื›ืŸ, ืœืคื ื™ ื‘ื™ืฆื•ืข ืคืขื•ืœืช ื”ืชืฉืœื•ื, ื”ื™ื” ืฆื•ืจืš ืœื”ืคืขื™ืœ ืืช ื”ื’ื“ืจืช core.sparseCheckout ื•ืœื”ื’ื“ื™ืจ ืจืฉื™ืžื” ืฉืœ ื“ืคื•ืกื™ ื ืชื™ื‘ ืฉืœื ื ื›ืœืœื• ื‘ืงื•ื‘ืฅ .git/info/sparse-checkout. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœืฉื›ืคืœ ืœืœื ื›ืชืžื™ื ื•ืœืžื ื•ืข ื—ื™ืœื•ืฅ ืฉืœ ืงื‘ืฆื™ื ืžืชื™ืงื™ื•ืช ืžืฉื ื” ื‘ืขื•ืžืง 2 ืื• ื™ื•ืชืจ, ืชื•ื›ืœ ืœื”ืจื™ืฅ:

    git clone --filter=blob:none --no-checkout /your/repository/here repo
    ืจื™ืคื• ืฉืœ $ CD
    $ cat >.git/info/sparse-checkout
    /*
    !/*
    EOF
    $ git config core.sparseCheckout 1
    $ git checkout.

    ื”ืคืงื•ื“ื” ื”ื—ื“ืฉื” "git sparse-checkout" ืžืคืฉื˜ืช ืžืื•ื“ ืืช ื”ืขื‘ื•ื“ื” ื•ืžืฆืžืฆืžืช ืืช ืชื”ืœื™ืš ืืจื’ื•ืŸ ื”ืขื‘ื•ื“ื” ืขื ืžืื’ืจ ืœื ืฉืœื ืœืคืงื•ื“ื•ืช ื”ื‘ืื•ืช:

    git clone --filter=blob:none --ื“ืœื™ืœื•ืช /ืžืื’ืจ/ืžืื’ืจ/ื›ืืŸ ืžืื’ืจ
    git sparse-checkout set /path/to/check/out

    ื”ืคืงื•ื“ื” sparse-checkout ืžืืคืฉืจืช ืœืš ืœื”ื’ื“ื™ืจ ืจืฉื™ืžื” ืฉืœ ื ืชื™ื‘ื™ื ืœืงื•ืคื” (ืกื˜) ืžื‘ืœื™ ืœื”ื’ื“ื™ืจ ื™ื“ื ื™ืช ืืช .git/info/sparse-checkout, ื›ืžื• ื’ื ืœื”ืฆื™ื’ ืืช ืจืฉื™ืžืช ื”ื ืชื™ื‘ื™ื ื”ื ื•ื›ื—ื™ืช (ืจืฉื™ืžื”) ื•ืœื”ืคืขื™ืœ ืื• ืœื”ืฉื‘ื™ืช ืืช ื”ืชืฉืœื•ื ื”ื—ืœืงื™ (ื”ืคืขืœ /disable).

    ื›ื“ื™ ืœื™ื™ืขืœ ืืช ื”ืขื‘ื•ื“ื” ืขื ืžืื’ืจื™ื ื’ื“ื•ืœื™ื ืžืื•ื“ ื•ืจืฉื™ืžื•ืช ืฉืœ ืชื‘ื ื™ื•ืช, "git config core.sparseCheckoutCone", ืฉืžื’ื‘ื™ืœ ืชื‘ื ื™ื•ืช ืžื•ืชืจื•ืช (ื‘ืžืงื•ื ื“ืคื•ืกื™ .gitignore ืฉืจื™ืจื•ืชื™ื™ื, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืื ื™ืฉ ืœื”ื•ืฆื™ื ืืช ื›ืœ ื”ื ืชื™ื‘ื™ื ื•ื›ืœ ื”ืงื‘ืฆื™ื ื‘ืชื™ืงื™ื™ืช ืžืฉื ื” ื ืชื•ื ื”). ืœื“ื•ื’ืžื”, ืื ืœืžืื’ืจ ื’ื“ื•ืœ ื™ืฉ ืกืคืจื™ื™ื” "A/B/C" ื•ื›ืœ ื”ืขื‘ื•ื“ื” ืžืจื•ื›ื–ืช ื‘ืชื™ืงื™ื™ืช ื”ืžืฉื ื” "C", ืื– ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืืช ืžืฆื‘ sparseCheckoutCone, ื”ืคืงื•ื“ื” "git sparse-checkout set A/B/ C ื™ื—ืœืฅ ืืช ื›ืœ ื”ืชื•ื›ืŸ ืฉืœ "C", ืื‘ืœ ืž-"A" ื•-"B" ื”ื•ื ื™ื—ืœืฅ ืจืง ืืช ื”ื—ืœืงื™ื ื”ื“ืจื•ืฉื™ื ืœืขื‘ื•ื“ื” ืขื "C".

  • ืžื”ืชื™ืขื•ื“ ("git rebase -h"), ื›ืœ ื”ื”ืคื ื™ื•ืช ืœืืคืฉืจื•ืช "--preserve-merges" ื”ื•ืกืจื•, ืืฉืจ ื”ื•ืฆืื” ืžืฉื™ืžื•ืฉ ื•ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ืžืงื•ื ื–ืืช ื›ื“ื™ ืœื”ืขื‘ื™ืจ ืงื‘ื•ืฆื” ืฉืœ commits.git rebase --rebase-ืžื™ื–ื•ื’".
  • ื›ื“ื™ ืœืฉืคืจ ืืช ื”ืงืจื™ืื•ืช ืฉืœ ื”ื•ื“ืขื•ืช ืขื ืชื™ืงื•ื ื™ื ืฉื ืฉืœื—ื• ืœืจืฉื™ืžื•ืช ืชืคื•ืฆื”, ื ื•ืกืคื” ื”ืืคืฉืจื•ืช "git format-patch โ€”cover-from-description subject", ื›ืฉืฆื•ื™ืŸ, ื”ืคืกืงื” ื”ืจืืฉื•ื ื” ืžื˜ืงืกื˜ ืชื™ืื•ืจ ื”ืกื ื™ืฃ ืžืฉืžืฉืช ื›ื ื•ืฉื ืฉืœ ืžื›ืชื‘ ื›ื™ืกื•ื™ ืœืกื˜ ืฉืœ ื˜ืœืื™ื.
  • ืชืžื™ื›ื” ืžื™ื•ืฉืžืช ื‘ืฉื™ืžื•ืฉ ื”ืžืฉื•ืœื‘ ื‘ืคืงื•ื“ื” "git apply -3way" ื•ื”ื’ื“ืจืช "merge.conflictStyle" ("git apply" ืœื•ืงื—ืช ื›ืขืช ื‘ื—ืฉื‘ื•ืŸ ืืช ืกื’ื ื•ืŸ ืชื™ืื•ืจ ื”ื”ืชื ื’ืฉื•ืช ืž-merge.conflictStyle ื›ืืฉืจ ื™ืฉ ืฆื•ืจืš ืœืคืชื•ืจ ืืช ื”ื”ืชื ื’ืฉื•ืช ืœืื—ืจ ื ื™ืกื™ื•ืŸ ื›ื“ื™ ืœื”ื—ื™ืœ ืงื•ื‘ืฅ ืชื™ืงื•ืŸ ืขืœ ื”ืžืื’ืจ).
  • ืงื•ื“ ื”ื’ื“ืจืช ื”ืคื•ื ืงืฆื™ื” ื”ืžืฉืžืฉ ื‘ืคืขื•ืœื•ืช ื›ื’ื•ืŸ "git diff/grep --show-function/-function-context" ื”ื•ืจื—ื‘ ื›ื“ื™ ืœืชืžื•ืš ื‘ื”ื’ื“ืจืช ื’ื‘ื•ืœื•ืช ืคื•ื ืงืฆื™ื•ืช ื‘ืชื•ื›ื ื™ื•ืช ืฉืคื” ืกื ื—ื™ื™ื.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช ื—ื“ืฉื” ืœ-"git add", "git commit", "git reset" ื•ืคืงื•ื“ื•ืช ื ื•ืกืคื•ืช - "-pathspec-from-file", ื”ืžืืคืฉืจืช ืœื˜ืขื•ืŸ ืจืฉื™ืžื” ืฉืœ ื ืชื™ื‘ื™ื ืžืงื•ื‘ืฅ ืื• ื–ืจื ืงืœื˜ , ื‘ืžืงื•ื ืœืจืฉื•ื ืื•ืชื ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”.
  • ื”ื‘ืขื™ื” ืขื ื–ื™ื”ื•ื™ ืฉืžื•ืช ืžื—ื“ืฉ ื‘ืจืžืช ื”ืกืคืจื™ื™ื” ื‘ืขืช ื›ืชื™ื‘ืช commit ื ืคืชืจื”. ื”ื”ื’ื“ืจื” ืœื ืขื‘ื“ื” ืื ื”ืชื•ื›ืŸ ืฉืœ ืกืคืจื™ื™ืช ืžืฉื ื” ื”ื•ืขื‘ืจ ืœืฉื•ืจืฉ ื”ืžืื’ืจ.
  • ื”ื•ืฆืข ื™ื™ืฉื•ื ืจืืฉื•ื ื™ ืฉืœ ื”ืคืงื•ื“ื” "git add -i" ื”ืžืขื•ืฆื‘ืช ืžื—ื“ืฉ, ื”ืžืืคืฉืจ ืœืš ืœื”ื•ืกื™ืฃ ืชื•ื›ืŸ ืฉื•ื ื” ื‘ืื•ืคืŸ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™, ืฉื ื›ืชื‘ ืžื—ื“ืฉ ืž-Perl ืœ-C. ืขื™ื‘ื•ื“ ื“ื•ืžื” ืฉืœ ื”ืคืงื•ื“ื” "git add -p" ืžืชื‘ืฆืขืช.
  • ื”ืคืงื•ื“ื” "git log โ€“graph" ืขื‘ืจื” ืžื—ื“ืฉ, ื•ื™ืฆืจื” ืชืžื•ื ืช ASCII ืฉืœ ื’ืจืฃ ืขื ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ืฉื™ื ื•ื™ื™ื ื‘ืžืื’ืจ. ื”ืขื™ื‘ื•ื“ ื”ืžื—ื•ื“ืฉ ืืคืฉืจ ืœืฉืคืจ ื•ืœืคืฉื˜ ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ื”ืคืœื˜ ืžื‘ืœื™ ืœืขื•ื•ืช ืืช ืžื‘ื ื” ื”ืกื™ืคื•ืจ, ืžื” ืฉืœืžืฉืœ ืคืชืจ ืืช ื”ื‘ืขื™ื” ืฉื”ืชืžื•ื ื” ืžืชืจื—ื‘ืช ืžืขื‘ืจ ืœืจื•ื—ื‘ ืงื• ื”ื˜ืจืžื™ื ืœ.
  • ื”ืืคืฉืจื•ืช "git log --format=.." ืžืืคืฉืจืช ืœืš ืœืฉื ื•ืช ืืช ืคื•ืจืžื˜ ื”ืคืœื˜,
    ืžื•ืจื—ื‘ืช ืขื ืชืžื™ื›ื” ื‘ื“ื’ืœื™ "l/L" ื›ื“ื™ ืœื”ืฆื™ื’ ืจืง ืืช ื”ื—ืœืง ืฉืœ ื›ืชื•ื‘ืช ื”ื“ื•ื"ืœ ื”ืžืฆื•ื™ืŸ ืœืคื ื™ ื”ืกืžืœ "@" (ืœื“ื•ื’ืžื”, ืฉื™ืžื•ืฉื™ ื›ืืฉืจ ืœื›ืœ ื”ืžืคืชื—ื™ื ื™ืฉ ืืช ื›ืœ ื”ืื™ืžื™ื™ืœื™ื ื‘ืื•ืชื• ืชื—ื•ื).

  • ื ื•ืกืคื” ืชืช-ืคืงื•ื“ื” "set-url" ืœืคืงื•ื“ื” "git submodule".
  • ืขืจื›ื•ืช ื”ื‘ื“ื™ืงื” ืขื•ื“ื›ื ื• ืœืงืจืืช ื”ืžืขื‘ืจ ืœ
    ืืœื’ื•ืจื™ืชื ื”ื’ื™ื‘ื•ื‘ SHA-2 ื‘ืžืงื•ื SHA-1.

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

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