Анекдот

Поспорили штурман и главный механик чья должность на корабле важнее. Короче решили поменяться местами. Штурман в машинное, а механик на мостик.
Проходит время… К штурману подбегает матрос и кричит — Греется опорный подшипник коленвала!!!
— Штурман репу почесал и пошел к механику, а тот над картами склонился и тоже затылок задумчиво чешет.
— Слышь, у тебя там какой то подшипник греется у коленвала…
— Механик не глядя — Не мудрено, второй час по суше идем…

Основные команды Git

Шпаргалка с основными командами для Git

Конфигурация

git config --global user.name "[name]" — установить имя, которое будет прикрепляться к коммиту.

git config --global user.email "[email address]" — установить email, который будет прикрепляться к коммиту.

git config --global color.ui auto — включить полезную подсветку командной строки.

git config --global push.default current — обновлять удаленную ветку с таким же именем, что и локальная, при пуше изменений (если не указано иного).

git config --global core.editor [editor] — установить редактор для редактирования сообщений коммита.

git config --global diff.tool [tool] — установить программу для разрешения конфликтов при слиянии.

Создание репозиториев

git init [project-name] — создать новый локальный репозиторий с заданным именем.

git clone [url] — загрузить проект и его полную историю изменений.

Работа с изменениями

git status — полный список изменений файлов, ожидающих коммита.

git status -s — краткий вид изменений.

git diff — показать изменения в файлах, которые еще не были добавлены в индекс коммита (staged).

git add [file] — сделать указанный файл готовым для коммита.

git add . — сделать все измененные файлы готовыми для коммита.

git add '*.txt' — добавить только файлы, соответствующие указанному выражению.

git add --patch filename — позволяет выбрать какие изменения из файла добавятся в коммит.

git diff --staged — показать что было добавленно в индекс с помощью git add, но еще не было закоммиченно.

git diff HEAD — показать что изменилось с последнего коммита.

git diff HEAD^ — показать что изменилось с предпоследнего коммита.

git diff [branch] — сравнить текущую ветку с заданной.

git difftool -d — то же самое, что и diff, но показывает изменения в заданной difftool.

git difftool -d master.. — показать изменения, сделанные в текущей ветке.

git diff --stat — показать статистику какие файлы были изменены и как.

git reset [file] — убрать файлы из индекса коммита (изменения не теряются).

git commit — записать изменения в репозиторий. для написания сообщения откроется назначенный редактор.

git commit -m "[descriptive message]" — записать изменения с заданным сообщением.

git commit --amend — добавить изменения к последнему коммиту.

Работа с ветками

git branch — список всех локальных веток в текущей директории.

git branch [branch-name] — создать новую ветку.

git checkout [branch-name] — переключиться на указанную ветку и обновить рабочую директорию.

git checkout -b <name> <remote>/<branch> — переключиться на удаленную ветку.

git checkout -- [filename] — вернуть файл в первоначальное состояние если он еще не был добавлен в индекс коммита.

git merge [branch] — соединить изменения в текущей ветке с изменениями из заданной.

git merge --no-ff [branch] — соединить ветки без режима “fast forwarding”.

git branch -a — посмотреть полный список локальных и удаленных веток.

git branch -d [branch] — удалить заданную ветку.

git branch -D [branch] — принудительно удалить заданную ветку, игнорируя ошибки.

git branch -m <oldname> <newname> — переименовать ветку.

Работа с файлами

git rm [file] — удалить файл из рабочей директории и добавить в индекс информацию об удалении.

git rm --cached [file] — удалить файл из репозитория, но сохранить его локально.

git mv [file-original] [file-renamed] — изменить имя файла и добавить в индекс коммита.

Отслеживание файлов

.gitignore — текстовый файл, в котором задаются правила для исключения файлов из репозитория. Например:

  • *.log
  • build/
  • temp-*

git ls-files --other --ignored --exclude-standard — список всех игнорируемых файлов.

Сохранение фрагментов

git stash — положить во временное хранилище все отслеживаемые файлы.

git stash pop — восстановить последние файлы, положенные во временное хранилище.

git stash list — список всех сохраненных изменений во временном хранилище.

git stash drop — удалить последние файлы, положенные во временное хранилище.

Просмотр истории

git log — список изменения текущей ветки.

git log --follow [file] — список изменения текущего файла, включая переименования.

git log --pretty=format:"%h %s" --graph — изменение вида отображения истории изменений.

git log --author='Name' --after={1.week.ago} --pretty=oneline --abbrev-commit — посмотреть над чем работал заданный пользователь последнюю неделю.

git log --no-merges master.. — посмотреть историю изменений только для текущей ветки.

git diff [file-branch]..[second-branch] — посмотреть различия между двумя заданными ветками.

git show [commit] — показать метадату и изменения в заданном коммите.

git show [branch]:[file] — посмотреть на файл в другой ветке, не переключаясь на неё.

Отмена коммитов

git reset — убрать изменения из индекса коммита, сами изменения останутся.

git reset [commit/tag] — отменить все коммиты после указанного коммита, изменения будут сохранены локально.

git reset --hard [commit] — принудительно вернутся к указанному коммиту, не сохраняя историю и изменения.

Синхронизация изменений

git fetch [remote] — загрузить всю историю с заданного удаленного репозитория.

git merge [remote]/[branch] — слить изменения локальной ветки и заданной удаленной.

git push — запушить текущую ветку в удаленную ветку.

git push [remote] [branch] — запушить ветку в указанный репозиторий и удаленную ветку.

git push [remote] :[branch] — в удаленном репозитории удалить заданную ветку.

git push -u origin master — если удаленная ветка не установлена как отслеживаемая, то сделать ее такой.

git pull — загрузить историю и изменения удаленной ветки и произвести слияние с текущей веткой.

git pull [remote][branch] — указать конкретную удаленную ветку для слияния.

git remote — посмотреть список доступных удаленных репозиториев.

git remote -v — посмотреть детальный список доступных удаленных репозиториев.

git remote add [remote][url] — добавить новый удаленный репозиторий.

Анекдот

Тестировщик заходит в бар и заказывает:

кружку пива,
2 кружки пива,
0 кружек пива,
999999999 кружек пива,
ящерицу в стакане,
–1 кружку пива,
qwertyuip кружек пива.

Первый реальный клиент заходит в бар и спрашивает, где туалет. Бар вспыхивает пламенем, все погибают.

Про гит

Две полезные ссылки про git: https://ohshitgit.com/ и https://git-scm.com/book/en/v2.

Третья полезная ссылка про гит https://github.com/k88hudson/git-flight-rules

Нужно выучить 2 команды: git rebase —interactive и git cherry-pick.) И гит — под абсолютным контролем независимо от неправильных действий выполненных до этого.)

После изучения git rebase придется учить git reflog. С другой стороны это одна из самых полезных команд.

Вот еще хорошая подборка идиом: https://github.com/k88hudson/git-flight-rules

WinAmp возвращается

Медиаплеер Winamp не обновлялся с декабря 2013 года. Теперь он станет мобильным приложением. Сейчас музыкальный проигрыватель принадлежит компании Radionomy Group из Нидерландов. В 2019 году они представят его новую версию. Это будет платформа, которая позволит прослушивать в одном месте все аудиофайлы: музыку с мобильного устройства и из облачных сервисов, подкасты, стриминговые радиостанции и плейлисты.

При запуске новой версии Winamp разработчики рассчитывают на «сильное сообщество», которое насчитывает до 100 миллионов пользователей в месяц, причем многие из них живут за пределами США. «Пользователи Winamp действительно повсюду. Огромное количество. У нас по-настоящему большое и сильное сообщество», — сказал Сабунджян. Последние годы именно пользователи поддерживали проект, выпуская неофициальные обновления для Winamp.

Планируется выпустить Winamp для iOS и Android. Оригинальный Winamp для компьютеров также будет обновлен. В сентябре в сети появилась версия 5.8, которая официально выйдет 18 октября. Она, в частности, решает проблему совместимости с компьютерами на базе Windows 10 и исправляет существующие ошибки. Также в этой версии стали бесплатными все функции, ранее доступные в платной версии Winamp Pro.

Java жрет память

Что делать, если приложение написанное на Java жрет много оперативки? Может быть это ваш случай:

(где-то на хабре была байка, что один опытный разработчик начинал все программы с похожей строчки, а когда начальство жаловались, что памяти не хватает и надо оптимизировать код, уменьшал в ней число ;)

static int a[1024*1024*1024/sizeof(int)];

Java, работа с датой

Форматирование даты.
Преобразование даты в строку по формату.
увеличение даты на дни, недели или часы.


Date dateNow;
dateNow = new Date();
SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmssSSS");
SimpleDateFormat formatDate1 = new SimpleDateFormat("dd MM yyyy");
String newDeviceImei = formatDate.format(dateNow);
String startDate = formatDate1.format(dateNow);
Calendar c = Calendar.getInstance();
c.setTime(dateNow);
c.add(Calendar.DATE, 30);
Date currentDatePlus = c.getTime();
String endDate = formatDate1.format(currentDatePlus);
String deviceModel = "Apple iPhone 8";

Git, как переименовать ветку

Сначала переименовываем локальную ветку:

>git branch -m old_name new_name

Затем, если нужно переименовываем ветку на сервере:

>git push origin :old_name
>git push -u origin new_name

Обратите внимание
— первая команда это удаление старой ветки;
— вторая — это пуш новой ветки с «закреплением» -u = —set-upstream;
— можно объединить эти две команды в одну
>git push -u origin :old_name new_name

Лучшее с баша

Некоторые игры запускать на линуксе интереснее чем играть в них

xxx: Нативная поддержка в основных браузерах ожидается примерно никогда?
yyy: И даже позже

ххх: Скоро каникулы закончатся, хакиров станет меньше. У них алгебра начнётся…
ууу: А самых гениальных нянечки в детском садике запрут.