2015-08-05 5 views
7

У меня есть несколько «точечных» файлов в моем домашнем каталоге, которые я бы хотел отслеживать с помощью git - например. .pryrc, .zshrc и т. Д. Я хочу иметь удаленный репозиторий для этих файлов, чтобы: a) есть простой способ восстановить мои настройки конфигурации, если я потеряю свою машину по какой-либо причине; и b) безопасно отслеживать любые изменения, внесенные в файлы, в случае, если я что-то прикручу при настройке изменений.Как отслеживать файлы конфигурации «dot» в моем домашнем каталоге с помощью git?

Первоначально я настроил репозиторий git в домашнем каталоге, чтобы отслеживать их, с файлом .gitignore, сконфигурированным для игнорирования каждого файла, за исключением конкретных имен файлов в белом списке. Тем не менее, я понял, что я не сумасшедший о том, что в моем домашнем каталоге есть репозиторий git, и есть также дополнительное отвлечение от просмотра имени ветки «master» в моем окне терминала. Я использую ZSH с настройками, чтобы отображать ветвь git в приглашении, и оказалось, что это удивительно и смущает, что я в репозитории git при навигации по каталогам, которые я не ожидаю иметь репозиторий.

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

Каков наилучший способ достичь этого?

ответ

5

Это, как я понял это:

Во-первых, я создал каталог ~/repositories/configurations/, который я использую для размещения репозитория. После перехода в этот каталог я запускаю git init, как обычно.

Затем я создал файл .gitignore, сконфигурированный для игнорирования всех файлов, кроме тех, что указаны в белом списке. (Обратите внимание, что вы можете сделать это позже в процессе перед фиксацией, но если вы запустите git status перед настройкой .gitignore, вы увидите много незатрещенных файлов).

# ignore everything 
* 

# except these whitelisted files: 
!.gitignore 
!.pryrc 
!.zshrc 
!.bashrc 
!.bash_profile 
!.bash_login 

Затем направьте репозиторий в другую рабочую директорию:

git config core.worktree "/User/username"

Запуск git status теперь показывает:

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    ../../.bash_login 
    ../../.bash_profile 
    ../../.bashrc 
    ../../.gitignore 
    ../../.pryrc 
    ../../.zshrc 

Отсюда мы git add ~/.bash_profile ~/.bashrc ~/.pryrc ~/.zshrc и совершить. Настройка и нажатие на удаленный репозиторий является стандартным.

Одна заметка. Я решил, что мне нужен локальный файл README.md для документирования цели каталога и того, как он был настроен и т. Д. Я не хотел, чтобы этот файл находился в моей домашней папке, где он был бы из контекст. После создания README мне пришлось использовать флаг -f, чтобы добавить его в репозиторий:

git add -f README.md.

Я попытался добавить его в белый список .gitignore, но не смог убедить git найти файл с вариациями пути, например !~/repositories/configurations/README.md и так далее. Независимо от того, как я пытался указать путь, git не видел файл. После добавления с усилием, он работает нормально. У кого-то умнее меня может быть предложение, как это сделать.

Эта процедура работала как очарование. Теперь у меня есть рабочий репозиторий для отслеживания изменений файла dot и безопасного хранения их удаленно.

+0

Спасибо Scro, это работает как шарм, я нахожу его действительно полезным. У меня нет ответа на '.gitignore', прошел через то же самое. – vabada

3

Отъезд Homesick, основа для отслеживания ваших точечных файлов в репозитории Git.

Он работает

  • создавая репозиторий Git, который отслеживает файлы, которые вы хотите, чтобы это управлять
  • SYM-связывающими файлами из вашей домашней папки (~) в репозиторий Git
  • обеспечивая команды для отслеживания новых файлов, передача/тяни/толкай изменения

Вы можете установить его, запустив

gem install homesick 

Затем следуйте документации, чтобы начать отслеживать ваши файлы.

Я рекомендую использовать что-то вроде Homesick, так как он доказал свою работоспособность и минимально инвазивен. Он не загрязняет вашу домашнюю папку Git repo и позволяет вам делиться и восстанавливать конфигурацию на любом компьютере, на котором вы можете работать.

Это link to my personal dotfiles repo, если вы хотите взглянуть на то, как я пользуюсь Homesick.

Homesick построен с использованием Ruby - если вы хотите только Bash-решение, проверьте Homeshick.

Полный список доступных решений по управлению вашими точками, посмотрите GitHub dotfiles page.

+0

Спасибо за рекомендацию. Я прочитал документацию. Я не понимаю, как это лучше, чем использование ванильного git? С помощью метода, который я изложил, нет необходимости полагаться на дополнительный драгоценный камень с другим API. Установив git-репозиторий в логическом каталоге и указав git на домашний каталог, я получаю все преимущества обычного рабочего процесса git без накладных расходов на управление другим интерфейсом. – Scro

+0

Достаточно честно! Это действительно решение «купить против сборки». Homesick (и аналогичные структуры) имеют рабочее решение, и вы вложили время в создание настраиваемого решения, которое работает для вас - ничего плохого в этом. У Homesick есть команда для добавления новых файлов («homesick track»), в то время как вы должны добавить файл в ваш файл '.gitignore' - разные подходы, служащие той же цели. Опять же, ничего плохого в этом, я просто хотел указать на существующую альтернативу. – nwinkler

+0

BTW: Я добавил ссылку на страницу GitHub dotfiles (http://dotfiles.github.io/), которая имеет множество инструментов для этой цели. Ознакомьтесь с разделом «Утилиты общего назначения». – nwinkler