Как получить список всех файлов в истории git с размерами

Если вы планируете оптимизировать размер своего git-репозитория с помощью, например, bfg – то просто жизненно необходимо получить список всех файлов в репозитории с их размерами. Из которых вы потом сможете выделить именно те, которые надо удалить из истории вашего проекта. Ниже я приведу вам bash-скрипт который сформирует для вас этот список и отсортирует его по размеру файлов.

git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| sed -n 's/^blob //p' \
| sort --numeric-sort --key=2 \
| cut -c 1-12,41- \
| $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

Удаление каталогов в истории git с помощью BFG

Если вы столкнулись с тем, что вам надо удалить целиком каталог из истории git, то это может быть проблемой, так как BFG не поддерживает слеши в путях.

Но есть способ обойти это ограничение. Собираем список всех Id-шников у файлов в каталоге и далее этот список скармливаем в BFG на очистку.

git rev-list --all --objects -- path/to/the/directory/to/delete | git cat-file --batch-check='%(objectname) %(objecttype) %(rest)' | grep -Pe '^\w+ blob' | cut -d' ' -f1 > ./to-delete.txt 

java -jar bfg.jar --no-blob-protection --strip-blobs-with-ids ./to-delete.txt

Ну и финальным шагом не забываем пробежаться скриптом для очистки мусора

git reflog expire --expire=now --all && git gc --prune=now --aggressive

The principle is simple: create a list of object IDs to strip, and input that to BFG. This means that if an object is referenced through a different path it will be nuked nonetheless.

  • git rev-list --all --objects -- path/to/the/directory/to/delete
    This will list all objects in the subdirectory referenced in all commits which modify the given path. The format is objectid filepath.You should run this command to check its output matches what you’d expect.
  • git cat-file --batch-check='%(objectname) %(objecttype) %(rest)'
    This will qualify the object with its type. It will turn the previous format objectid filepath into objectid type filepath.
  • grep -Pe '^\w+ blob'
    This will filter out non-blob objects.
  • cut -d' ' -f1 > ./to-delete.txt
    This will extract the object ID and redirect the output into the to-delete.txt file.
  • java -jar bfg.jar --no-blob-protection --strip-blobs-with-ids ./to-delete.txt
    This runs BFG, giving it the list of objects to remove.

Мгновенный переход в конкретный issue или pull request через hotkeys

Хочу поделиться с вами примером очень простого, но мегаполезного скрипта. Если вы работаете в команде, то очень часто приходится копировать id задач, например из git, открывать в issue tracker, искать таску по id и тд. Так вот чтобы максимально упростить открытие issue tracker или другого сайта в параметрах которого использует id, я написал простой скрипт и забиндил его выполнение на комбинацию ctrl+alt+v.

В своей работе я в основном пользуюсь 2 инструментами: wrike и bitbucket. Причем в bitbucket мне часто приходится просматривать pull request-ы, а во wrike – таски.

Как только с копировал в буфер какой то цифровой набор и нажал ctrl+alt+v выполняется следующий скрипт. Он берет значение из буфера и проверяет под какое условие попадает данный ID. В моем случае, если ID > 10000 то открывается вкладка в Chrome с нужной задачей. Так как ID таска передается в качестве параметра в url. В противном случае – открываем пул реквесты в битбакете с нужным номером.

Такой простой трюк экономит мне время и нервы в течении дня. А это непосредственно тот самый простейший скрипт:

#!/bin/bash
ID=`xclip -selection c -o`
if [ $ID -gt 10000 ] 
then
    google-chrome https://wrike.com/open.htm?id=${ID}
else
    google-chrome https://bitbucket.org/someuserorcompany/pull-requests/${ID}
fi

Само-собой вы можете настроить скрипт под себя, например под тот же GitHub.

Быстрый тест работы smtp сервера, включая проверку DKIM и SPF

Наверное, все системные администраторы, которые отвечают за доставку электронной почты, что для успешной доставки писем с домена вашей организации является корректно настроенные SPF и DKIM. Без этих настроек никакой гарантии, что письмо дойдет у вас нет.

Если вы уверены, что у вас все настроено, то теперь просто необходимо проверить как ваши письма видят принимающие почтовые серверы. Для этого давайте перейдём на сайт dkimvalidator.com и получим одноразовый ящик в который зашлем письмо с нашего сервера. А после отправки через наш smtp-сервер – получим результат.

Отправить письмо вы можете используя любой почтовый клиент, настроенный на ваш smtp-сервер. Либо если под рукой такого нет – можно это сделать с любого linux-сервера, используя тул swaks. Пример использования тулы:

swaks --auth \
    --server smtp.myserver.org \
    --from [email protected] \
    --au [email protected] \
    --ap mypassword \
    --to [email protected] \
    --h-Subject: "Hello" \
    --body 'Testing some awesomeness!'

После отправки жмем View Results и смотрим отчет.