Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сСбя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² git. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с Π³Π΅ΠΌΠΎΠΌ lolcommits, прСкрасной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ, созданной ΠœΡΡ‚Ρ‚ΡŒΡŽ Π ΠΎΡ‚Π΅Π½Π±Π΅Ρ€Π³ΠΎΠΌ.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€ΠΈΠΊΠΎΠ»ΡŒΠ½ΠΎπŸ€˜ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ связан с вашим Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ настроСниСм. Но это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ настройкС, особСнно ΠΏΡ€ΠΈ использовании внСшнСго графичСского интСрфСйса git, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Tower.

Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ?

ΠŸΠ΅Ρ€Π΅Π΄ установкой Π³Π΅ΠΌΠ° lolcommits Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависимости с Homebrew. ЗапуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² своСм любимом интСрфСйсС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ImageMagick ΠΈ FFmpeg:

brew install imagemagick ffmpeg

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π³Π΅ΠΌ `lolcommits`:

gem install lolcommits

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊ фиксации

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ настроим Ρ…ΡƒΠΊ фиксации для нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² git. Но сначала ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚. Π₯ΡƒΠΊ post-commit β€” это скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ фиксации (ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ post). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия послС фиксации.

Π’ нашСм случаС ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ lolcommits с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Π² свой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ git ΠΏΠΎ этому адрСсу .git/hooks/post-commit со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

#!/usr/bin/env bash
# We only execute the script when not merging or rebasing.
if [ ! -d "$GIT_DIR/rebase-merge" ]; then
  # Set the correct language.
  export LANG="en_US.UTF-8"
 
  # Add homebrew to the PATH.
  export PATH="/usr/local/bin:$PATH"
 
  # When using Rbenv we need to add the shims directory to the PATH.
  export PATH="~/.rbenv/shims:$PATH"
# Define the directory where the gif will be placed.
  export LOLCOMMITS_DIR=/Users/fousa/Dropbox/Lolcommits
# Generate the gif.
  lolcommits --capture \
             --animate=4 \
             --delay=5 \
             --device='FaceTime HD Camera' >/dev/null 2>&1 &
fi

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ post-hook являСтся исполняСмым.

chmod +x .git/hooks/post-commit

НСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… слов ΠΎ сцСнарии:

  • Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя устройства, запустив lolcommits --devices Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΌΠΎΠ΅Π³ΠΎ MacBook.
  • ΠœΡ‹ delay выполняСм скрипт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΌΠ΅Ρ€Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя для запуска. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρƒ GIF Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€, Ρ‡Ρ‚ΠΎ выглядит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ нСкрасиво. 😣

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ доступны здСсь.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

Но ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ? ΠœΡ‹ создадим шаблон git, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π°ΠΌ Π½Π΅ всСгда ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ послС фиксации.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ скопируСм Ρ…ΡƒΠΊ post-commit сюда: ~/.git_template/hooks/post-commit. Π—Π°Ρ‚Π΅ΠΌ установитС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ шаблона Π² Ρ„Π°ΠΉΠ»Π΅ .gitconfig ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

[init]
  templatedir = ~/.git_template

Π—Π°Ρ‚Π΅ΠΌ этот Ρ…ΡƒΠΊ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС git init.

Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ git init Π² ΠΊΠΎΡ€Π½Π΅ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ скопируСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ послС фиксации ΠΈΠ· шаблона Π² ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Когда Ρ…ΡƒΠΊ ΡƒΠΆΠ΅ присутствуСт, Π²Π°ΠΌ придСтся ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° git init. (ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Π² скрипт post-commit)

Автоматика это ΠΊΡ€ΡƒΡ‚ΠΎ! 🀘