Я хочу поставить свой домашний каталог (~) под контроль исходного кода (в данном случае git), так как у меня есть много файлов настроек (.gitconfig, .gitignore, .emacs и т. Д.), Которые я хотел бы переносить на разные машины, и иметь их в Git было бы неплохо для их извлечения.
Моим основным компьютером является мой MacBook, и при настройке OS X есть много папок, которые я хочу игнорировать (Documents, Downloads, .ssh). Есть также папки, которые уже используют Git (.emacs.d).
Я думал просто добавить все эти каталоги в мой файл .gitignore, но это кажется утомительным и может привести к непредвиденным последствиям. Моей следующей мыслью было периодически копировать файлы, которые я хочу сохранить, в какую-то домашнюю папку, а затем фиксировать эту папку. Проблема с этим будет в том, что я должен помнить, чтобы переместить их перед фиксацией.
Есть ли чистый способ сделать это?
источник
Ответы:
У меня
$HOME
под мерзавцем. Первая строка моего файла .gitignoreОстальные - это шаблоны, которые нельзя игнорировать, используя
!
модификатор. Эта первая строка означает, что по умолчанию игнорируются все файлы в моем домашнем каталоге. Те файлы, которые я хочу для контроля версий, идут.gitignore
так:У меня есть более сложная модель:
То есть я хочу только версию
.ssh/config
- я не хочу, чтобы мои ключи и другие файлы в .ssh переходили в git. Выше, как я этого добиваюсь.Редактировать: добавлены косые черты в начало всех путей. Это позволяет сопоставлять шаблоны игнорирования в верхней части репозитория ($ HOME), а не в любом месте. Например, если
!lib/
был шаблон (не игнорируйте все в каталоге lib) и вы добавляете файл.gitignore
, ранее шаблон (!.gitignore
) соответствовал этому. С ведущей косой чертой (!/.gitignore
) он будет совпадать только.gitignore
в моем домашнем каталоге, а не в каких-либо подкаталогах.Я не видел случая, чтобы это имело практическое значение с моим списком игнорирования, но мне кажется, что оно более технически точно.
источник
Что мне делать ? (С теми же целями), чтобы поместить мои файлы конфигурации в подкаталоге
~/lib
и имеют символические ссылки в моей домашней директории, например,.emacs -> lib/emacs/dot.emacs
. Я храню только файлы конфигурации, которые я написал явно, под контролем версий; Мой домашний каталог содержит множество автоматически созданных точечных файлов, которые не находятся под контролем версий. Таким образом,~/lib
находится под контролем версий, а мой домашний каталог - нет.У меня есть скрипт, который создает символические ссылки из файлов в
~/lib
. Когда я создаю учетную запись на новом компьютере, я заполняю ее, проверяя~/lib
и выполняя этот скрипт.Мой опыт работы с CVS, а не с git, так что это не на 100%. Одна из причин, по которой я не поместил свой домашний каталог непосредственно в CVS, заключается в том, что
~/.cvsignore
это относится ко всем моим проверкам CVS, а не только к моему домашнему каталогу; У мерзости нет этой проблемы. Недостатком этого подхода по сравнению с наличием домашнего каталога под управлением версиями является то, что вы не можете использоватьgit status
для разграничения файла, который вы явно решили игнорировать (который будет указан в файле игнорирования, поэтому не отображается), и файл, о котором у вас нет мнения (который будет отображаться с?
).Некоторые файлы должны быть разными на разных машинах. Я помещаю их в каталог с именем
~/Local/SITENAME/lib
и создаю для них также символические ссылки, или (для форматов файлов, которые его поддерживают) в файле есть директива include~/lib
. У меня также есть символическая ссылка~/Here -> ~/Local/SITENAME
. Поскольку git, в отличие от CVS, предназначен для поддержки, в основном, аналогичных, но не идентичных репозиториев, может существовать лучший способ управления файлами, специфичными для компьютера. Некоторые из моих точечных файлов на самом деле не являются символическими ссылками, но автоматически генерируются из содержимого в~/lib
и~/Here
.источник
~/.gitignore
. Без такой конфигурации файл не применяется ни к одному хранилищу, кроме одного, хранящегося в нем~/.git
(даже в этом случае он не будет применяться к вложенным хранилищам). Я использую core.excludefile =,~/.git-user-excludes
чтобы избежать конфликта между исключениями, которые я хочу применить ко всем моим репозиториям Git (независимо от местоположения), и исключением, которое я хочу применить к репозиторию, который содержит (части) моего домашнего каталога.gitignore
странице руководства : «Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь, или в любом родительском каталоге (…)». Останавливается ли это на самом деле в корне извлечения (т. Е. Где.git
каталог)?.gitignore
файлов вверх ограничен корнем рабочего дерева. Приведенное вами предложение продолжает: «(до верхнего уровня рабочего дерева)».Мы можем использовать способность Git продолжать отслеживать файлы, даже если они перечислены в
.gitignore
. Итак, этого достаточно для.gitignore
:Для каждого файла, который вы хотите отслеживать, запустите
add -f
(-f
параметр переопределяет игнорируя и в.gitignore
и.git/info/exclude
):После индексации файла Git будет отслеживать все изменения, несмотря на тот факт, что файл игнорируется. То же самое работает для каталога, но только для файлов, которые на самом деле присутствуют:
Если вы хотите отслеживать весь каталог со всеми новыми файлами, которые в нем появляются, его можно исключить
.gitignore
способом, описанным в ответе camh :Если вы когда-нибудь захотите остановить отслеживание файла, эта команда удалит файл из индекса Git, но оставит его нетронутым на жестком диске:
источник
Я использую старое
rcs
для этого.Посмотрите на страницах руководства для
ci
,co
иrcs
. Эти сайты также должны быть полезны:Я использую это для контроля версий моих файлов точек, например:
И если я хочу редактировать их:
Я рекомендую создать каталог с именем
RCS
в вашем~
, вы можете легко создать резервную копию этого каталога где-нибудь.источник
Я
$HOME/.conf/
извлекаю свои файлы конфигурации из репозитория BitBucket Mercurial. Репозиторий GitHub будет работать так же хорошо.Оформление
~/.conf
заказа содержит файлы конфигурации и сценарий оболочки для заполнения символических ссылок$HOME
на каждый файл в~/.conf
. Для форматов конфигурации , которые поддерживают включение (.bashrc
,.inputrc
,.vimrc
и т.д.) я включаю~/.conf
файл , а не ссылку на него, так что я могу сделать местное переопределение.Для некоторых конфигурационных файлов я символическую ссылку на файл в моей папке Dropbox и делиться через Dropbox.
В течение нескольких месяцев я пытался держать
$HOME
себя в управлении версиями, но мне надоело управлять огромными списками игнорирования, я устал проверять изменения конфигурации, сделанные при запуске приложений, и в результате я даже не захотел проверить это на другом компьютере. Можете ли вы представить, как разрешать конфликты~/.gconf
или~/.config/monitors.xml
или предлагать разные версии настольных приложений?Мне проще найти символическую ссылку или включить ограниченный список конфигурационных файлов, которые я лично настроил и хочу использовать на разных компьютерах в качестве глобальных настроек по умолчанию.
источник
Я только начал использовать следующий скрипт Python Dotfiles, который является удобным инструментом, который автоматически связывает файлы для вас: https://pypi.python.org/pypi/dotfiles
источник
Я думаю, что ваша вторая догадка о том, что несвязанная папка находится под контролем исходного кода, хороша.
Просто добавьте туда 2 сценария оболочки. Один для копирования файлов, находящихся под вашим контролем,
~
а другой для сбора файлов~
и их копирования обратно в папку, контролируемую исходным кодом, и фиксации.источник
Вот небольшой скрипт ruby, который я использую для настройки новой машины
источник