Лучший способ хранения файлов с точкой перед именем: чистый репозиторий Git
Примечание: информация в заголовке немного преувеличена, поскольку есть и другие проверенные способы решения проблемы. При этом я действительно считаю, что описанный ниже способ очень удобен.
Об этом удивительном способе я недавно прочитал в ветке хакерских новостей о решениях, которые используют люди для хранения своих файлов с точкой перед именем. Пользователь StreakyCobra
показал свою удобную настройку, которая показалась мне невероятно логичной. Поэтому в настоящее время я внедряю аналогичный подход в своей системе. Единственное необходимое условие — установка Git.
По его словам, описанный ниже способ
не требует дополнительных инструментов или символических ссылок; файлы отслеживаются в системе управления версиями; можно использовать отдельные ветки для разных компьютеров, а также без труда воспроизвести имеющуюся конфигурацию при установке.
Суть этого способа заключается в том, чтобы сохранить чистый репозиторий Git во «вспомогательной» папке (например, $HOME/.cfg
или $HOME/.myconfig
) и пользоваться специально созданным псевдонимом, чтобы команды выполнялись в этом репозитории, а не в обычной локальной папке .git
, и не мешали работе других репозиториев Git.
С чистого листа
Если вы раньше не отслеживали свои конфигурации в репозитории Git, это можно легко сделать с помощью следующих строк:
git init --bare $HOME/.cfg
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
config config --local status.showUntrackedFiles no
echo "alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.bashrc
- Первая строка создает папку
~/.cfg
. Эта папка представляет собой чистый репозиторий Git, который будет отслеживать наши файлы. - Затем мы создаем псевдоним
config
, который будем использовать вместо обычногоgit
при взаимодействии с нашим репозиторием конфигурации. - Устанавливаем флаг (локальный для репозитория), чтобы скрыть файлы, которые пока явно не отслеживаем. Это нужно для того, чтобы впоследствии при выполнении команды
config status
и других команд файлы, которые не требуется отслеживать, не отображались какuntracked
(неотслеживаемые). - Вы также можете добавить определение псевдонима в файл
.bashrc
вручную или использовать для удобства четвертую строку.
Я упаковал вышеприведенные строки в сниппет для Bitbucket и связал его с коротким URL-адресом, чтобы можно было выполнить настройку следующим образом:
Связанные материалы
Перемещение полного репозитория Git
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
curl -Lks http://bit.do/cfg-init | /bin/bash
После настройки вы сможете управлять версиями любого файла в папке $HOME
с помощью обычных команд, заменяя git
созданным псевдонимом config
, например:
config status
config add .vimrc
config commit -m "Add vimrc"
config add .bashrc
config commit -m "Add bashrc"
config push
Установка файлов с точкой перед именем в новой системе (или их перенос в этот репозиторий)
Если вы уже храните конфигурации или файлы с точкой перед именем в репозитории git, в рамках новой системы их можно перенести в этот репозиторий, выполнив следующие действия:
- Перед установкой убедитесь, что вы добавили псевдоним в файл
.bashrc
или.zsh
:
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
- Кроме того, убедитесь в том, что исходный репозиторий игнорирует папку, в которую вы собираетесь его клонировать, чтобы не создавать странных проблем с рекурсией:
echo ".cfg" >> .gitignore
- Затем клонируйте файлы с точкой перед именем в чистый репозиторий. Для этого понадобится отдельная папка внутри папки
$HOME
:
git clone --bare <git-repo-url> $HOME/.cfg
- Определите псевдоним в текущей области видимости оболочки:
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
- Загрузите текущий контент из чистого репозитория в папку
$HOME
:
config checkout
- Предыдущий шаг может завершиться с ошибкой, и тогда появится сообщение, подобное следующему:
error: The following untracked working tree files would be overwritten by checkout:
.bashrc
.gitignore
Please move or remove them before you can switch branches.
Aborting
Это связано с тем, что в папке $HOME
могут находиться некоторые стандартные файлы конфигурации, которые будут перезаписаны системой Git. Здесь все просто: если эти файлы вам нужны, создайте их резервную копию, а если не нужны — удалите. Хочу предложить вариант с автоматическим перемещением всех проблемных файлов в папку для резервных копий:
mkdir -p .config-backup && \
config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
xargs -I{} mv {} .config-backup/{}
- Повторите переключение, если у вас возникли проблемы:
config checkout
- Установите для флага
showUntrackedFiles
значениеno
в этом конкретном (локальном) репозитории:
config config --local status.showUntrackedFiles no
- Готово! Теперь вы можете вводить команды
config
для добавления и обновления файлов с точкой перед именем:
config status
config add .vimrc
config commit -m "Add vimrc"
config add .bashrc
config commit -m "Add bashrc"
config push
Напомню, что вам не обязательно заучивать все действия на случай настройки новой машины. Чтобы ускорить работу, можно создать простой скрипт, сохранить его в качестве сниппета в Bitbucket (как это сделал я), создать для него короткий URL-адрес и вызывать следующим образом:
curl -Lks http://bit.do/cfg-install | /bin/bash
Для полноты картины хочу показать, что у меня получилось (следующий код протестирован на множестве новых контейнеров Alpine Linux):
git clone --bare https://bitbucket.org/durdn/cfg.git $HOME/.cfg
function config {
/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME $@
}
mkdir -p .config-backup
config checkout
if [ $? = 0 ]; then
echo "Checked out config.";
else
echo "Backing up pre-existing dot files.";
config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .config-backup/{}
fi;
config checkout
config config status.showUntrackedFiles no
Подведение итогов
Надеюсь, этот метод поможет вам при отслеживании конфигурации. Если вам интересно, мои файлы с точкой перед именем хранятся здесь. Подпишитесь на меня (@durdn) или мою замечательную команду @atlassiandev, чтобы оставаться на связи.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.