Как управлять версиями файлов распространения без замены оригиналов?

#git #version-control

#git #управление версиями

Вопрос:

Я хочу сохранить пару файлов в разных каталогах под управлением версиями с помощью git. Некоторые из них находятся в моем домашнем каталоге, а некоторые — в /etc , и я, очевидно, не хочу делать корень репозиторием git.

Этого можно было бы достичь, поместив все файлы в одну папку и разместив ссылки в их предполагаемых местах, например /etc/resolv.conf -> /home/tim/my-repo/etc-resolv.conf , но не должно быть необходимости так сильно менять мою систему, чтобы приспособиться к программному обеспечению для контроля версий.

Как управлять версиями файлов без замены оригиналов ссылками?

Ответ №1:

Похоже, что вам действительно нужно хорошее решение для резервного копирования. Одна из вещей, с которыми Git не справится, — это атрибуты файла, такие как владелец, группа, разрешения, контексты безопасности SELinux. Ситуация может сильно осложниться, когда вы начнете управлять системными файлами с помощью Git.

Я бы упростил задачу и использовал обычные утилиты резервного копирования, такие как rsync , cpio , tar и cron с подходящей политикой резервного копирования.

Комментарии:

1. По моему опыту, Git довольно хорошо справляется с атрибутами файлов.

Ответ №2:

Вся идея git основана на предположении, что у вас есть один каталог, который вы хотите контролировать версиями.

Одним из возможных решений было бы иметь всю файловую систему под git, но использовать .gitignore для исключения чего-либо, за некоторыми исключениями.

Ответ №3:

Я не думаю, что существует жизнеспособная альтернатива ссылкам.

Комментарии:

1. Если это так, я не вижу причины для этого. Теоретически это вполне возможно.

Ответ №4:

сделайте каждый каталог репозиторием git, а затем передайте разные имена ветвей в общий репозиторий.

надеюсь, это поможет.

Ответ №5:

Git лучше всего подходит для управления исходным кодом в некотором общем каталоге проекта, а не отдельными файлами в разных каталогах.

Возможно, можно что-то подделать с помощью небольшого кодирования, например, перехвата фиксации, который считывает список файлов, которые он затем зафиксировал, но внесение изменений git ‘notice’ в эти удаленные файлы было бы сложным 😉

Ответ №6:

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

Я нашел две функции git, которые могут здесь помочь:

Вы можете заменить каталог .git файлом, указывающим на реальный каталог git. Таким образом, вы можете поместить свой каталог .git в выбранное место и при этом иметь глобальный git, если вы поместите файл .git в / .

Формат файла .git:

 gitdir: /path/to/your/.git
  

Второе — простое глобальное исключение. Просто добавьте глобальный подстановочный знак (*) в file /info/exclude . Это исключает все файлы по умолчанию. Чтобы отслеживать файл, вы должны явно включить его с помощью ‘git add -f’.