Заметки в категории «Система» (страница 4)

Создание списка изменений из Git

Список всех коммитов от указанного объекта до HEAD можно легко получить с помощью команды


git log 1ff893.. --pretty=format:%s --no-merges > changes.txt

В файл changes.txt будут записаны только названия комитов, начиная с 1ff893 и до текущего состояния, за исключением точек слияния. В качестве начального объекта можно указать название тега или ветви.

В случае ветвления, обход дерева будет выполнен так, что в отчёт попадут все коммиты, которые не были предками для стартового объекта. Что само по себе достаточно удобно из-за того, что формально они могут быть старше, но объединены гораздо позже.

Дерево коммитов с точками слияния

Если, например, попытаться получить лог от S до F, то в файл буду записаны коммиты с номерами от 1 до 8. Коммиты M — это точки слияния, которые сами по себе не несут никакой новой функциональности, не будут включены в лог.

Дополнение

Оставте свой комментарий

Изменение регистра букв в названиях файлов в Git

При работе с Git в Windows есть неприятная проблема: если в имени файла неправильно были указаны заглавные и строчные буквы, то после простого переименования файла git status не покажет изменений. Это связано с тем, что ни FAT32, ни NTFS не учитывает регистр букв.

Если такая ситуация всё же возникла, то переименовать файл можно средствами Git:

git mv filename.txt FileName.txt –f

Ключ -f как раз нужен для того, чтобы принудительно внести изменения, так как с точки зрения файловой системы эти имена эквивалентны.

Обновление

Выходит, что разработчики, пользующиеся OS X, так же могут столкнуться с аналогичной ситуацией.

Комментарии к заметке: 3

Как git rebase помогает управлять коммитами

Команду git rebase обычно применяют тогда, когда хотят избежать точек слияния в ветке, применяя пулл-реквесты, или в процесс работы в одной ветке нескольких человек. Этот классический случай подробно разбирается во многих статьях.

Но, нигде не упоминается об интерактивном режиме и его возможностях. В этом режиме можно переставлять коммиты местами, объединять и разделять их, менять комментарии у произвольного коммита. Всё это может понадобиться, если использовать подход « микрокоммитов ».

Комментарии к заметке: 1

Копирование файлов по SSH

Традиционным способом копирования файлов по SSH является команда scp.

scp *.js user@remote-host.com:~/folder/

Все файлы с расширением js из текущей папки будут скопированы на сервер remote-host.com в папку folder в домашней директории пользователя user.

Можно так же копировать папку вместе со всеми файлам и вложенными папками:

scp -r src user@remote-host.com:~/folder/

А теперь нетрадиционный способ:


tar -c src | ssh user@remote-host.com "cd ~/folder/ && tar -x"

Папка src архивируется утилитой tar . Затем этот архив передается на сервер по SSH, где выполняется команда cd с указанными параметрами и распаковывается полученный архив.

Пример чуть сложнее:


npm run build && \
DEPLOY_TARGET=$(date +%Y%m%d-%H%M%S) && \
tar -c build | \
ssh -t mista_k@slim.local \
  `cd /var/www && \
  mkdir -p $DEPLOY_TARGET && \
  tar -x -C $DEPLOY_TARGET --strip-components 1 -v && \
  ln -sfn $DEPLOY_TARGET build`

Комментарии к заметке: 4

Уборка мусора в Git

Удалить все неиспользуемые объекты можно командой

git gc

После объединения ветки, в которой велась разработка, с основной веткой проекта всегда остается указатель на эту ветку. Ваш коллега может удалить её у себя в репозитории и даже удалить её во внешнем репозитории, но ваш локальный репозиторий всё ещё будет хранить информацию об этой ветке.

Удалить все ветки, которых нет во внешнем репозитории можно командой

git remote prune origin

Если даже на какой-либо объект нет явной ссылки, то на протяжении 30 дней на все объекты сохраняется ссылка в reflog . По этому когда производится уборка мусора все коммиты за последний месяц всё равно остаются в репозитории.

Чтобы избавиться от таких недоступных комитов, выполним последовательность команд


git reflog expire --expire=1.minute refs/heads/master
git fsck –unreachable
git gc
Комментарии к заметке: 2