λΆ„μ‚° μ†ŒμŠ€ μ œμ–΄ μ‹œμŠ€ν…œ Git 2.25 μΆœμ‹œ

μ‚¬μš© κ°€λŠ₯ λΆ„μ‚° μ†ŒμŠ€ μ œμ–΄ μ‹œμŠ€ν…œ μΆœμ‹œ νž˜λ‚΄ 2.25.0. Git은 κ°€μž₯ 인기 있고 μ•ˆμ •μ μΈ κ³ μ„±λŠ₯ 버전 μ œμ–΄ μ‹œμŠ€ν…œ 쀑 ν•˜λ‚˜λ‘œ λΆ„κΈ° 및 병합을 기반으둜 ν•˜λŠ” μœ μ—°ν•œ λΉ„μ„ ν˜• 개발 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 기둝의 무결성과 μ†ŒκΈ‰ 변경에 λŒ€ν•œ 저항을 보μž₯ν•˜κΈ° μœ„ν•΄ 각 μ»€λ°‹μ—μ„œ 전체 이전 기둝의 μ•”μ‹œμ  해싱이 μ‚¬μš©λ˜λ©°, 개발자의 λ””μ§€ν„Έ μ„œλͺ…μœΌλ‘œ κ°œλ³„ νƒœκ·Έμ™€ 컀밋을 μΈμ¦ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

이전 버전에 λΉ„ν•΄ μƒˆ λ²„μ „μ—λŠ” 583개의 λ³€κ²½ 사항이 ν¬ν•¨λ˜μ—ˆμœΌλ©°, 84λͺ…μ˜ κ°œλ°œμžκ°€ μ°Έμ—¬ν•˜μ—¬ μ€€λΉ„ν–ˆμœΌλ©°, 이 쀑 32λͺ…이 처음으둜 κ°œλ°œμ— μ°Έμ—¬ν–ˆμŠ΅λ‹ˆλ‹€. μ£Όμš” ν˜μ‹ :

  • λ°μ΄ν„°μ˜ μΌλΆ€λ§Œ μ „μ†‘ν•˜κ³  μ €μž₯μ†Œμ˜ λΆˆμ™„μ „ν•œ λ³΅μ‚¬λ³ΈμœΌλ‘œ μž‘μ—…ν•  수 μžˆλŠ” λΆ€λΆ„ λ³΅μ œλŠ” μ•ˆμ •ν™”λ˜κ³  μ™„μ „ν•œ μ€€λΉ„ 단계에 μ ‘μ–΄λ“€κ³  μžˆμŠ΅λ‹ˆλ‹€. 일반적인 λ³΅μ œλ³Έμ€ κ°œμ • 내역에 μžˆλŠ” λͺ¨λ“  파일의 λͺ¨λ“  버전을 ν¬ν•¨ν•˜μ—¬ μ €μž₯μ†Œμ˜ λͺ¨λ“  데이터λ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€. 맀우 큰 μ €μž₯μ†Œμ˜ 경우, κ°œλ°œμžκ°€ 일뢀 νŒŒμΌμ—λ§Œ 관심이 μžˆλ”λΌλ„ 데이터λ₯Ό λ³΅μ‚¬ν•˜λ©΄ νŠΈλž˜ν”½κ³Ό λ””μŠ€ν¬ 곡간이 μƒλ‹Ήνžˆ μ¦κ°€ν•©λ‹ˆλ‹€. μž‘λ™ 쀑인 μ†ŒμŠ€ 트리의 μΌλΆ€λ§Œ μ‰½κ²Œ 얻을 수 μžˆλ„λ‘ 이번 λ¦΄λ¦¬μŠ€μ—μ„œλŠ” μ‹€ν—˜μ  "sparse-checkout" λͺ…λ Ήκ³Ό "clone" λͺ…령에 λŒ€ν•œ μƒˆλ‘œμš΄ "--sparse" μ˜΅μ…˜μ„ λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€.

    μ΄μ „μ—λŠ” 선택적 볡제 ν”„λ‘œμ„ΈμŠ€κ°€ μž‘μ—…μ„ 톡해 μˆ˜ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•„ν„° λΆˆν•„μš”ν•œ μ½˜ν…μΈ λ₯Ό ν•„ν„°λ§ν•˜κ³ , λˆ„λ½λœ 파일 보좩을 λΉ„ν™œμ„±ν™”ν•˜λŠ” "--no-checkout" μ˜΅μ…˜μ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ ν›„, 체크아웃 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° 전에 core.sparseCheckout 섀정을 ν™œμ„±ν™”ν•˜κ³  .git/info/sparse-checkout νŒŒμΌμ— μ œμ™Έλ  경둜 νŒ¨ν„΄ λͺ©λ‘μ„ μ •μ˜ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λΈ”λ‘­ 없이 λ³΅μ œν•˜κ³  κΉŠμ΄κ°€ 2 이상인 쀑첩 λ””λ ‰ν„°λ¦¬μ—μ„œ νŒŒμΌμ„ μΆ”μΆœν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜λ €λ©΄ λ‹€μŒμ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    git clone --filter=blob:none --no-checkout /your/repository/here μ €μž₯μ†Œ
    $ CD μ €μž₯μ†Œ
    $ cat >.git/info/sparse-checkout
    /*
    !/*
    EOF
    $ git config core.sparseCheckout 1
    $ git checkout .

    μƒˆλ‘œμš΄ λͺ…λ Ήμ–΄ "git sparse-checkout"은 μž‘μ—…μ„ 크게 λ‹¨μˆœν™”ν•˜κ³  λΆˆμ™„μ „ν•œ μ €μž₯μ†Œμ—μ„œ μž‘μ—…μ„ κ΅¬μ„±ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€μŒ λͺ…λ Ήμ–΄λ‘œ μ€„μ—¬μ€λ‹ˆλ‹€.

    git clone --filter=blob:none --sparse /your/repository/here μ €μž₯μ†Œ
    git sparse-checkout /path/to/check/out μ„€μ •

    sparse-checkout λͺ…령을 μ‚¬μš©ν•˜λ©΄ .git/info/sparse-checkout을 μˆ˜λ™μœΌλ‘œ κ΅¬μ„±ν•˜μ§€ μ•Šκ³ λ„ 체크아웃 경둜 λͺ©λ‘μ„ μ„€μ •(set)ν•  수 있고, ν˜„μž¬ 경둜 λͺ©λ‘μ„ 인쇄(list)ν•˜κ³  λΆ€λΆ„ 체크아웃을 ν™œμ„±ν™” λ˜λŠ” λΉ„ν™œμ„±ν™”(enable/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' μ˜΅μ…˜μ— λŒ€ν•œ λͺ¨λ“  μ°Έμ‘°κ°€ μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 μ˜΅μ…˜μ€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©°, λŒ€μ‹  '--preserve-merges'λ₯Ό μ‚¬μš©ν•˜μ—¬ 컀밋 μ„ΈνŠΈλ₯Ό λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.git rebase --rebase-merges".
  • 메일링 λ¦¬μŠ€νŠΈμ— μ „μ†‘λœ 패치 λ©”μ‹œμ§€μ˜ 가독성을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ "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"이 μΆ”κ°€λ˜μ–΄ λͺ…령쀄에 경둜λ₯Ό λ‚˜μ—΄ν•˜λŠ” λŒ€μ‹  νŒŒμΌμ΄λ‚˜ μž…λ ₯ μŠ€νŠΈλ¦Όμ—μ„œ 경둜 λͺ©λ‘μ„ λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 컀밋을 μž‘μ„±ν•  λ•Œ 디렉터리 μˆ˜μ€€ 이름 변경을 κ°μ§€ν•˜λŠ” 데 λ°œμƒν•˜λŠ” λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μœ„ λ””λ ‰ν† λ¦¬μ˜ λ‚΄μš©μ΄ μ €μž₯μ†Œμ˜ 루트둜 μ΄λ™λœ 경우 μ •μ˜κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μˆ˜μ •λœ μ½˜ν…μΈ λ₯Ό λŒ€ν™”ν˜•μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλ„λ‘ ν•˜λŠ” μž¬μž‘μ—…λœ "git add -i" λͺ…λ Ήμ˜ 초기 κ΅¬ν˜„μ„ μ œμ•ˆν•˜λ©°, Perlμ—μ„œ C둜 μž¬μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. "git add -p" λͺ…령도 μœ μ‚¬ν•˜κ²Œ μž¬μž‘μ—… μ€‘μž…λ‹ˆλ‹€.
  • μ €μž₯μ†Œμ˜ λ³€κ²½ 사항 내역을 κ·Έλž˜ν”„λ‘œ λ‚˜νƒ€λ‚Έ ASCII 이미지λ₯Ό μƒμ„±ν•˜λŠ” "git log --graph" λͺ…령이 λ¦¬νŒ©ν† λ§λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μž¬μž‘μ—…μ„ 톡해 기둝 ꡬ쑰λ₯Ό μ™œκ³‘ν•˜μ§€ μ•Šκ³ λ„ 좜λ ₯을 크게 κ°œμ„ ν•˜κ³  κ°„μ†Œν™”ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 이미지가 터미널 μ„  λ„ˆλΉ„λ₯Ό λ„˜μ–΄μ„œλŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • "git log --format=." μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 좜λ ₯ ν˜•μ‹μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    "l/L" ν”Œλž˜κ·Έμ— λŒ€ν•œ 지원을 ν™•μž₯ν•˜μ—¬ "@" 기호 μ•žμ— μ§€μ •λœ 이메일 μ£Όμ†Œμ˜ μΌλΆ€λ§Œ 좜λ ₯ν•©λ‹ˆλ‹€(예: λͺ¨λ“  κ°œλ°œμžκ°€ λ™μΌν•œ 도메인에 λͺ¨λ“  이메일을 κ°€μ§€κ³  μžˆλŠ” 경우 μœ μš©ν•¨).
  • "git submodule" λͺ…령에 "set-url" ν•˜μœ„ λͺ…령을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • ν…ŒμŠ€νŠΈ ν‚€νŠΈλŠ” μ „ν™˜μ„ μ€€λΉ„ν•˜κΈ° μœ„ν•΄ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    SHA-2 λŒ€μ‹  SHA-1 ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

좜처 : opennet.ru

DDoS 보호, VPS VDS μ„œλ²„κ°€ μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό μœ„ν•œ μ•ˆμ •μ μΈ ν˜ΈμŠ€νŒ… κ΅¬μž… πŸ”₯ DDoS 곡격 λ°©μ§€ κΈ°λŠ₯이 νƒ‘μž¬λœ μ•ˆμ •μ μΈ μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…, VPS 및 VDS μ„œλ²„λ₯Ό κ΅¬λ§€ν•˜μ„Έμš” | ProHoster