#git #резервное_копирование
Хочу организовать домашние хранение исходников. И интересует следующий вопрос: Могу ли я настроить git таким образом, что бы он работал с github и внешним жестким диском (или флешкой) одновременно. При этом жесткий должен выступать своего рода бэкап хранилищем с которого можно обычным копированием взять любую сохраненную версию. Например если я проталкиваю изменения, то на жестком в определеной папке создается папка (а еще лучше сжатый архив) с именем проекта и датой внесения и в это папку (или архив) заносится полная копия текущей версии проекта. PS: В git я новичок, поэтому вопрос может быть банальным, но меня интересует возможно ли это в принципе сделать именно средствами git. Если это возможно сделать, то буду признателен если напишете приблизительно описание как это можно реализовать. Операционка - windows.
Ответы
Ответ 1
Лучший способ делать бэкап репозитория Git — это репозиторий Git (как ни странно). Копировать в архивы и папки — плохо и неэффективно. Во-первых, вы таким образом ломаете всю идею и делаете очень неудобные в использовании бэкапы. Во-вторых, Git очень эффективно хранит свои данные и простой архив вам такой эффективности не предоставит. Предлагаю такой способ: сделать локальный bare репозиторий и обновлять в него. Делаем резервную копию Пример: репозиторий у нас лежит в ~/repo. Резервную копию мы будем создавать в ~/backup. $ mkdir ~/backup $ cd ~/backup $ git clone --mirror --no-hardlinks ~/repo После этого в папке ~/backup/repo.git будет создан bare-репозиторий. Обратите внимание, что папка не просто .git, а repo.git. Параметр --mirror делает следующее. Включает в себя параметр --bare — cделать репозиторий голым (bare). Такой репозиторий хранит только файлы Git и не хранит обычные файлы в рабочей области (в резервной копии они нам не нужны) Заставляет Git копировать все ветки (branches), метки (tags) и другое. Подробнее в документации. Параметр --no-hardlinks нужен для того, чтобы Git не пытался сэкономить место, делая хардлинки вместо прямого копирования файлов. Для резервной копии хардлинки не годятся. Обновляем резервную копию Теперь мы можем подключить эту резервную копию как remote и в нее делать push. $ cd ~/repo $ git remote add backup ~/backup/repo.git $ git push backup --all Либо заходить в папку резервной копии и там делать update $ cd ~/repo $ git --git-dir=~/backup/repo.git remote update Параметром --git-dir мы явно указываем Git, где искать его директорию. Сам не найдет, т.к. имя нестандартное. Восстанавливаемся из резервной копии Разумеется, для этого понадобится Git. Если совсем нет возможности его установить, попробуйте Git Portable от sheabunge. Вместе с репозиторием обычным копированием взять любую сохраненную версию. Чтобы достать сохраненную версию из нашего резервного репозитория: cd ~/new-repo git clone ~/backup/repo.git . git pull --all Теперь у нас есть полная копия того репозитория + версия рабочей области из последнего коммита в master. Можем получить любое другое сохраненное состояние: git checkoutТолько файлы из резервной копии git --git-dir=~/backup/repo.git --work-tree=куда/положить/файлы checkout Параметр --work-tree указывает Git путь, который он будет считать своей рабочей областью на время выполнения текущей команды. Путь должен существовать (т.е. Git не будет создавать его сам). Только файлы из рабочего репозитория cd ~/repo git --work-tree=куда/положить/файлы checkout Git просто скопирует текущее состояние рабочей области туда, куда нужно. Ответ 2
Вам потребуется использовать хуки (hooks) и ознакомиться с особенностями использования хуков в windows, вопросы по теме., возможно поможет эта статья.
Комментариев нет:
Отправить комментарий