ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° mergiraf 0.4, ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π΄Π»Ρ Git Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΡ. Mergiraf ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΏΡΠΈ ΡΠ»ΠΈΡΠ½ΠΈΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² mergiraf Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ², Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΠ°ΡΠ½ΡΠΌ Git, ΡΠ°ΠΊ ΠΈ Π·Π°ΠΌΠ΅Π½Π° Π² Git ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ»ΠΈΡΠ½ΠΈΠΉ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ merge, revert, rebase ΠΈ cherry-pick. ΠΠΎΠ΄ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ GPLv3. Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ·ΡΠΊΠΎΠ² Python, TOML, Scala ΠΈ Typescript, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ΅ΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ mergiraf:
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ — ΠΎΠ½ΠΈ Π‘ΠΠΠΠΠ« — ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ, ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½ΠΈΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, ΡΠ°Π³ Π·Π° ΡΠ°Π³ΠΎΠΌ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΌΡΡΠ°ΡΠΈΡ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅. ΠΠ»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΠ²ΠΎΠ»ΡΡΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, Π³Π΄Π΅ ΠΊΠΎΡΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» — Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠ½Ρ — ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΡΡΠ°ΡΠΈΠΈ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ «Π²Π΅ΡΡΠΈΠ΅ΠΉ», ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π°Π½ΡΠΈΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ±ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΌΡΡΠ°ΡΠΈΠ΅ΠΉ, ΡΠΎΡΠΌΠΈΡΡΡΡΠ΅ΠΉ ΡΠ΅Π±ΡΠΎ Π² Π½Π°ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°ΡΠ΅. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Ρ; ΠΎΠ½ΠΈ Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΡΡΠ΅ΠΌ, Π° ΡΠΊΠΎΡΠ΅Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠΌΠ½ΡΠ΅ Π°Π³Π΅Π½ΡΡ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌ. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΈΠ΄Π΅ΠΈ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΡΡΠΈΡΡ ΡΡΠΊΠ°Π²Π° ΠΈ Π½ΡΡΠ½ΡΡΡ Π² *Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ* Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ, Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΠΈ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ ΡΡΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΡΠΎΡΠ²Π»ΡΡΡΠ΅Π΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅Π³ΠΎ ΡΡΠ΄Π° ΠΏΡΠΈΠ²Π΅Π»ΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ snapshot-ΠΎΠ² ΠΈ changest-ΠΎΠ². Snapshot ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ changeset ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ snapshot-Π°ΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ snapshot-Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ changeset-ΠΎΠ² ΠΊ ΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈ snapshot-Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΌΠ°ΡΠΊΠΈΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ changeset-Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎ.
ΠΠ½ΠΎΠ³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ² — ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². Π‘ Π½ΠΈΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Git, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΌΠ° Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ½ΠΈΠΌΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π³ΡΠ°ΡΠΎΠ², Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅Π½ΡΡΡ ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π½Π°ΡΠΈΠΌΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΠ°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² Π½Π° Π²ΠΎΠΏΡΠΎΡΡ Π²ΡΠΎΠ΄Π΅ «ΠΠ°ΡΠ΅ΠΌ Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° ΡΡΠ° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ Π΄Π΅ΡΠ°Π»Ρ (Π½Π°ΠΏΡ., ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ)?», «Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΡΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ?», «ΠΠΎΠ³ΠΎ Π²Π·Π»ΠΎΠΌΠ°Π»ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π°?», «ΠΠ°ΠΊΠΎΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΌΠ°Π»ΠΎ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Ρ ΠΎΡΡ Π²ΡΠΎΠ΄Π΅ Π±Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ, ΠΌΡ Π²ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ!?)»
Π‘ΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ Π²Π΅ΡΠΊΠΈ — Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π½Π°ΡΠΈΠΌΡΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠΎΠΊ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Ρ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ (ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΠΉΠ½ΡΡΡΠΈΠΌ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π΅Π·Π΄Π΅ ΠΈ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΠΌΠΈ Π²Π΅ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΠΈΡ ΠΈ ΡΡΠΆΠΈΡ ΡΡΡΠ΄ΠΎΠ² Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π½Π°Π±ΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΡΠ½ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·.
ΠΠ±ΡΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π²Π΅ΡΠΊΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ°Ρ «ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ» ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Π΅ΡΠ²ΡΡΡΡ Π±ΠΎΠΊΠΎΠ²ΡΠ΅ Π²Π΅ΡΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ (Π² ΠΈΠ΄Π΅Π°Π»Π΅ — ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°) ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΎΠΉ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π°ΠΈΡΠ²Π΅ΠΆΠ°ΠΉΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΎΠΈΡΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ ΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π½ΡΡΠ΅.
ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ snapshot-ΠΎΠ² (ΡΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ°, ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ changesetΠΎΠ², ΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠΈΡ , ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ rebase, ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΠΆΠ΅ — ΡΡΠΎ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΊ rebase, ΠΏΡΠΎΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΡΠ΅Ρ Π³ΡΠ°Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΈΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡ ΡΠ»ΠΈΡΠ½ΠΈΠΉ ΡΡΠ°ΡΠ°ΡΡΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ rebase-ΠΎΠ²) Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ (VCS) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ», Π° ΡΠ°ΠΉΠ»Ρ — ΠΊΠ°ΠΊ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π±ΠΈΠΎΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠΈ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ΠΌ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΅Π³ΠΎ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ — ΠΎΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅. ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π²Π΅Π΄ΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌ ΠΏΡΠΈ, ΡΠ²Π»ΡΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±Π΅ΠΈΡ Π²Π΅ΡΡΠΈΠΉ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΡΡΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ², ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΡ ΠΏΠΎΡΡΡΠΎΡΠ½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ «ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΠ΅» ΠΈΠ»ΠΈ «ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΠ΅», Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²ΡΡΡΠ½ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΡΡΡΠ°Π½ΠΈΡΡ Π»ΡΠ±ΡΠ΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ. ΠΡΠΎΠ±Π»Π΅ΠΌ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΠ°ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΡΡΠΏΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅pΠ΅ΡΠΎpΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ Π²ΡΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΡΠΌΠ°Ρ. ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΆΠ°ΡΠ°ΡΡΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΏΠΎΡΡΡΠΎΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅ΠΌΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ — ΡΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠ°Π½ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ black.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΆΠ°ΡΠ°ΡΡΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² (ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π½ΠΈΡ , ΠΏΠΎΡΡΡΠΎΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ — ΡΡΠΎ ΡΠ²ΡΠΈΡΡΠΈΠΊΠ°, ΠΎΠ½ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π» ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π° Π΄ΡΡΠ³ΠΎΠΉ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π» ΠΊΡΡΠΎΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ/ΠΏΠ΅ΡΠ΅Π±Π°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠ°Π½Π΅Ρ Π½Π΅ΡΠ°Π±ΠΎΡΠΈΠΌ) — ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²Π΅Π΄ΡΡΡΡ Π²ΠΎΡ ΡΠΆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 30 Π»Π΅Ρ, ΠΈ Π²ΡΠ»ΠΈΠ»ΠΈΡΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΡΡΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½Ρ Π² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΌΠ°ΡΡΠ° Π‘ΠΠ-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ 2010-Ρ , ΠΈ Π±ΡΠ»Π° ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Java.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΠ΄Π°ΡΡΠ°ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°, GumTree, ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Ρ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π±ΡΠΊΠ³ΡΠ°ΡΠ½Π΄ΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Java, ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ treesitter, ΠΈΠΌΠ΅Π΅Ρ Π±ΡΠΊΡΠ½Π΄Ρ, ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° treesitter, ΡΠ°ΠΊ ΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ (Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΎΠ³Π° ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ API, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ Π―Π, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ ΠΊ Java) ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π° ΡΠ°Π²Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΅Ρ diff-ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΠ½Π° ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° (Π²ΠΏΡΠΎΡΠ΅ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΊΡ diff-ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· API).
ΠΠΎΠ»Π΅Π΅ ΠΌΠΎΠ»ΠΎΠ΄Π°Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ°Ρ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ difftastic Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Rust, ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° treesitter, ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΅Π½Π½ΡΡ diff-ΠΎΠ² Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΠΆΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π° Π½Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ diff-ΠΎΠ² ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΡΠ°Π²ΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π»ΡΡ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΠΉ.
Π‘ΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ mergiraf. ΠΡΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Rust ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 21 MiB!) ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° treesitter, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΡΡΠ°Π» ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π»Ρ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΠ°ΠΊΠΈΠΌ ΡΡΠ°Π» LLVM Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠ² mergiraf ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ diff-ΠΎΠ², Π° Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΠΉ. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ mergiraf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² GumTree, Π° Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ — ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² spork, Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ ΡΡΡΡΠΊΡΡΡΡ treesitter.
CΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΠΉ Π² ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΏΠΎΡΠΎΠΌ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° (Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΡΡΡΠΌ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π»ΠΎΠ³ΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ GumTree). ΠΡΡΠ³ΠΈΠΌ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π½Π΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡΠΈ, Π° ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° LSP-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π² Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ: ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ «base.py» (ΠΎΡΡΡΡΠΏΡ ΡΠ°Π±Π°ΠΌΠΈ, Π»ΠΈΡΠ½ΡΡ ΡΡΡΠΎΠΊΠ° Π² Π½Π°ΡΠ°Π»Π΅) foo = 1 def main(): print(foo + 2 + 3) «a.py» (ΠΎΡΡΡΡΠΏΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π±Π°ΠΌΠΈ, 2 Π»ΠΈΡΠ½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π² Π½Π°ΡΠ°Π»Π΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ, Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ°ΡΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° icecream, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡ «baz»: from icecream import ic foo = 1 def main(): ic(foo + 2 + 3) class baz: def __init__(self): «»»baz»»» «b.py» (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ «foo» ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² «bar», ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ «black» ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΡΡΡΡΠΏΡ — ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π²ΡΡΠ΅Π·Π°Π½Ρ): bar = 1 def main(): print(bar + 2 + 3) ΠΡΠ·ΠΎΠ² ./mergiraf merge ./base.py ./a.py ./b.py -x a.py -y b.py -s base.py -o ./res.py Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ from icecream import ic bar = 1 def main(): ic(bar + 2 + 3) class baz: def __init__(self): «»»baz»»» (Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ°ΡΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° «icecream», ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ «foo» ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² «bar», ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ «black» ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΡΡΡΡΠΏΡ — ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π²ΡΡΠ΅Π·Π°Π½Ρ, ΡΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΠ² ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π΄Π»Ρ ΠΎΡΡΡΡΠΏΠ°, Π½ΠΎ ΡΠ°Π·ΡΠ΅ΡΡΠ½Π½ΡΠΉ Π²ΠΈΠ΄).
Π’ΡΡ ΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°. Π‘ΡΠΈΠ»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ
«.editorconfig», ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΈΠ»Ρ, Π²ΡΠΎΠ΄Π΅ ΡΠΌΠ΅Π½Ρ ΡΠ°Π±ΠΎΠ² Π½Π° ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΡΠΈΠ»Ρ black-Π°, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² «b.py», ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² «.editorconfig». ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ «ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ», ΠΈ ΡΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ· «.editorconfig».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru