Лучший способ хранения файлов с точкой перед именем: чистый репозиторий 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.
Блог Bitbucket
Образовательные программы DevOps