Наверняка специалисты по git все и так прекрасно знают, но ведь на Хабре ищут решений своих вопросов и много
Введение
Все началось с того как я начал думать… И думал я о том, как бы интересно организовать свои домашние самоделки надежно, чтоб не потерять в случае чего, и желательно модно правильно с применением git и тому подобное.
Конечно многие скажут GitHub. Да, конечно хорошее решение, но… Есть и но у такого решения.
Не все самоделки хочется выкладывать в открытый доступ. Что-то просто стыдно чтоб другие увидели, что-то не хочется показывать, по крайней мере некоторое время. А закрытые репозитории на GitHub доступны только на платном аккаунте.
Но домашние самоделки — это не тот уровень за который хочется платить ежемесячно. Они не приносят доход, а написаны для души, у кого программирование хобби всей жизни.
И тогда обратил я внимание на свой ноутбук для таких вот занятий, а там совершенно случайно оказалась лицензионная Windows 8.1, в которой вечно маячил и попадался мне под руку такой элемент как OneDrive.
Кто не знает, это облачный диск от microsoft для обладателей учетной записи.
А почему бы не организовать git репозиторий на данном облаке.
Я начал искать информацию на данную тему, в русскоязычном интернете что-то вообще как-то не попалось, на зарубежных кое какая информация была, но ни одно решение почему-то не годилось сходу для меня.
Забегая вперед скажу, что в адресации git нужны ссылки, но никак не пути windows, с указанием диска и т.д.
Многие предлагали установку дополнительно консольной утилиты curl или ей подобных, но очень не хотелось заниматься этим и обойтись стандартными средствами windows и git клиента под windows.
Поэтому я собрал крохи из разных источников в рабочее решение, по крайней мере для меня.
Мне доступно 5 Гб свободного места, не очень много, но для моих нужд — более чем. Так зачем пропадать добру?
Если кому покажется слишком мало, всегда можно докупить еще места.
Ну это я отвлекся от темы. И так приступим к собственно организации репозитория.
Допущения
Сразу оговорим некоторые детали, для простоты понимания следующих действий.
Зайдем на OneDrive и создадим каталог git, в котором и будем размещать все свои репозитории.
Допустим нашего пользователязовут User.
Тогда папка для синхронизации OneDrive будет располагаться по адресу: C:\Users\User\SkyDrive\.
В ней уже должен быть, созданный нами, каталог git.
Ну и для примера организовывать будем проект project1.
Сразу в нем создадим файл .gitignore для исключений, что не нужно коммитить.
Так как я пишу на python, мой файл содержит следующее:
*.gitignore
*.log
*.pyo
*.pyc
__pycache__/
В нынешнем, которым я пользуюсь, python 3.5 скомпилированные файлы pyo и pyc уже складываются в папку __pycache__/, поэтому при наличии данной строки их можно не писать, но когда я начинал с python 3.3 — они лежали рядом с файлами исходного кода, поэтому остались. Не мешают и хорошо.
Для проектов на django к вышеперечисленному еще добавляются следующие строки:
db.sqlite3
staticfiles/
Конечно при запуске django на каком-либо хостинге, база данных будет посерьезней, например postgres, или что предоставляет хостинг. Но во время разработки для отладки можно использовать старый добрый sqlite.
в каталоге проекта открываем правой кнопкой мыши контекстное меню и выбираем там пункт «git bash here».
Думаю при установке git клиента вы выбрали опцию интеграции в проводник.
Это важно для использования в пути к репозиторию ~ (тильды). Так как стандартная консоль windows не умеет работать с данным символом, а в bash он означает домашний каталог, а собственно интересующий нас путь: C:\Users\User\.
Данный режим необходим только в первый раз при создании репозитория, чтобы в локальных настройках git проекта присвоить ссылку на репозиторий.
Весь алгоритм действий
В консоли git bash пишем следующие инструкции.
Приведу их сразу полный перечень, а затем разжуем детально.
git init
git add --all
git commit -m "init"
git init --bare ~/SkyDrive/git/project1.git
git remote add OneDrive ~/SkyDrive/git/project1.git
git push -u OneDrive master
Разберем детально каждый шаг
1.
git init
Просто создаем пустой локальный git репозиторий проекта в самой папке проекта.
2.
git add --all
Данное действие призвано добавить для индексирования все файлы в каталоге и его подкаталогах, исключая конечно содержимое .gitignore файла.
Также можно использовать:
git add .
Но она добавляет все файлы из каталога, не включая подкаталоги.
Так что зависит от сложности вашего проекта. Кому что удобнее использовать — выбирайте сами.
3.
git commit -m "init"
Собственно наш первый коммит. Пока локально, без добавления на облачный репозиторий.
4.
git init --bare ~/SkyDrive/git/project1.git
А вот и первое обращение к удаленному репозиторию. Здесь мы создаем репозиторий для данного проекта.
Важно! Ключ --bare обязателен. Он указывает создать master ветку в данном репозитории. Хоть она пока и пуста.
.git в конце пути после имени проекта не обязательно, но, как я понимаю, это хорошо сложившаяся традиция. Как по мне вполне удобная, не вижу смысла ее изменять.
5.
git remote add OneDrive ~/SkyDrive/git/project1.git
А тут мы присваиваем имя OneDrive для нашей ссылки на удаленный репозиторий.
6.
git push -u OneDrive master
И последним шагом мы заливаем содержимое нашего проекта в master ветку удаленного репозитория.
Такая запись нужна только в первый раз, для заполнения master ветки. В дальнейшем можно пользоваться стандартным:
git push
.Да и режим git bash более не обязателен. Дальнейшая работа с git в данном проекте возможна и из обычной консоли windows.
Ну вот и все. Очень простой способ, но зато позволяет приобщиться к миру настоящих разработчиков и почувствовать себя почти профи.
Комментарии (32)
KvanTTT
02.10.2018 09:02Почему OneDrive? Можно использовать тогда уж любое облачное хранилище. Но все равно это разве что временное решение, т.к. изменяемые файлы будут постоянно синхронизироваться.
Barabashkad
02.10.2018 09:36наверное все таки не будет… работа ведется не прямиком в каталоге OneDrive… туда только пушатся изменения…
LoadRunner
02.10.2018 10:23+1Синхронизироваться будет любой изменённый файл (если настройки синхронизации по умолчанию). Причём с точки зрения OneDrive — это не изменение файла, а удаление старой версии и создание новой. Видимо, необходимо для системы бэкапов-откатов к прежним версиям. И в итоге на почту будут регулярно сыпаться письма вида: «у вас тут в корзине овердохрена файлов удалённых скопилось, мы их удалим, вы не против?».
Barabashkad
02.10.2018 10:27но будет все это произходить только во время пуша… незнаю как вы, но я делаю пуш редко… раз-два в день…
DollaR84 Автор
02.10.2018 10:51Barabashkad прав, я не размещаю в синхронизированном каталоге сами проекты, туда только пушатся изменения. А это не так часто.
berez
02.10.2018 19:31Вы будете смеяться, но при коммите в гит-репозиторию файлы в основном добавляются. Измененных файлов всего один или два (точно нее помню).
DollaR84 Автор
02.10.2018 19:36deletedПри коммите или при пуше?
berez
02.10.2018 19:43Прошу прощения, при пуше, конечно. Хотя пуш от коммита, думаю, не особо отличается в плане изменений в файлах репозитория.
Был у меня скриптик, который синхрил git-репозиторию между флэшкой и диском. Пофайлово. Не спрашивайте зачем, так было надо. :)
Так вот, если в репозиторию запушить пару-тройку коммитов, скрипт выдавал примерно такие цифры: 15 файлов добавлено, 2 изменено. Менялся в основном, конечно, .git/refs/heads/master и еще что-то там, не помню уже что.
berez
02.10.2018 19:36Совсем любое облачное хранилище использовать не получится.
Например, если вы попытаетесь для гит-репозитории использовать Google Drive (aka Google Sync), вас ждет множество удивительных сюрпризов. Эта падла иногда самовольно переименовывает файлы (добавляет и удаляет "(1)" после имени). Да и с синхронизацией у них проблемы бывают — то файлы недососет, то старую версию обновить отказывается…
foxyboy
02.10.2018 09:59Зачем такие костыли, если есть кроме GitHub и другие сервисы. Тот же gitlab позволяет создавать приватные проекты.
leschenko
02.10.2018 10:01Есть бесплатные приватные git репозитории. Azure DevOps Repos (ранее VSTS), например. Зачем городить не понятно что и бантик сбоку?
leschenko
02.10.2018 10:04А что будет, если после такого пуша «в облако» у вас помрет винт и часть файлов останется не синхронизированными? Наверно это приведет к тому, что вы не сможете сделать пул, заменив диск, т.к. целостность будет нарушена.
DollaR84 Автор
02.10.2018 10:54Я всегда синхронизирую после пуша. Ну а чтобы винт помер прямо во время, ну это уже совсем исключительная ситуация.
Doomsday_nxt
02.10.2018 11:12Вы разве не слышали про Законы Мерфи?
DollaR84 Автор
02.10.2018 11:23-1Ну значит так сложилось. На то это и домашние самоделки если уж прямо все совпало. Это же явно не для заработка. А рабочие проекты думаю можно хранить на github, gitlab или на любом другом сервисе, что приводили в комментариях выше.
farcaller
02.10.2018 13:40git очень стойкий к таким проблемам — при условии атомарной замены содержимого файлов, что почти все облака гарантируют.
leschenko
02.10.2018 16:19С одним файлом может ничего и не случится. Но там далеко не один файл меняется после пула, а порядок отправки файлов в облако не определен. Из 10 файлов зальются 5 через 1 и всё — спокойной ночи.
DollaR84 Автор
02.10.2018 10:07Спасибо всем ответившим и предложившим другие сервисы.
Вы правы, можно использовать и их. Почему я решил сделать на OneDrive:
1. Просто наивно я не знал про gitlab и bitbucket.org;
2. есть диск OneDrive, который просто простаивает пустым. Зачем пропадать добру? :)
Я не претендую на единственно правильное мнение, просто решил привести пример как это можно сделать, так как в русскоязычном интернете такой информации нет. Обязательно посмотрю другие репозитории, что вы привели, спасибо.
Для разных задач бывают нужны разные инструменты. Люблю разделять, и не сваливать все в одну кучу :)LoadRunner
02.10.2018 10:28так как в русскоязычном интернете такой информации нет
По причине очень лёгкого способа найти эту информацию. То есть, информация в русскоязычном интернете есть, просто не только лишь все могут её найти. Например, по запросу в гугл «приватный репозиторий git» выдаются очень заманчивые результаты.
Ну и плашка tutorial для такой статьи излишняя.
Потому что статья выглядит: Как создать локальный репозиторий git. А это, извините, вопрос из FAQ к git.
То, что репозиторий разместили на хранилище с поддержкой синхронизации в другое место — ну, довольно очевидный шаг для тех, кто пользуется этими самыми хранилищами (речь о домашних пользователях).DollaR84 Автор
02.10.2018 11:01>>> По причине очень лёгкого способа найти эту информацию. То есть, информация в русскоязычном интернете есть, просто не только лишь все могут её найти. Например, по запросу в гугл «приватный репозиторий git» выдаются очень заманчивые результаты.
То что информации в русскоязычном интернете нет — я писал про связку git с OneDrive, а никак не о наличии приватных репозиториев на других сервисах. Внимательней читайте.
Про создание репозитория локальной папке вы правы, но я с ходу не нашел. Поэтому в статье и написал, что инструкция будет полезна для начинающих как и я, а профессионалы и так наверняка знают.LoadRunner
02.10.2018 11:11Я немного о другом.
Возникла необходимость завести git-репозиторий.
Первая мысль: мануал, как же, собственно, он создаётся.
Вторая мысль: а если винт помрёт? А залью-ка я это в какое-нибудь облако, благо их полно на любой вкус.
А дальше просто — в какую синхронизируемую другой программой папку размещать каталог репозитория. Для git нет разницы, на каком локальном хранилище репозиторий, бэкапится ли и как именно — это уже вопросы к файловой системе и другим программным средствам (хоть DFS, хоть снапшоты виртуалки — извращенцев полно).
Ценность мануала для новичков крайне мала — только для тех, кто своими силами не разобрался в документации. Но это же Хабр, ё-моё!DollaR84 Автор
02.10.2018 11:28Хорошо, я понял ваше мнение. Значит больше не буду писать подобных простых статей, а если надо — уберу и эту из публикаций.
dedalqq
02.10.2018 11:03bitbucket.org и gitlab — это конечно же хорошо, однако…
Имхо gitlab уж слишком развесистый. Для своих поделок там слишком много лишнего, а вот к bitbucket.org у меня просто не лежит душа, хотя ничего плохого сказать о нем я не могу.
Для себя же я выбрал следующее: gogs.io (кто не знает: еще один аналог github и gitlub) установленный на личный VPS (благо они сейчас от ~300р) + таким решением я получаю не только «хранилище кода» но и место где их можно запускать, причем не важно на чем бы они было написаны.DollaR84 Автор
02.10.2018 11:05Вот и я хотел сказать, что на вкус и цвет как говорится… :) Кому-то нравится одно, кому-то другое, у третьего тоже свое мнение. Спасибо за информацию о еще одном сервисе.
inv2004
Мне кажется, можно было нагуглить и более простые, и более удобные способы, например gitlab
MrMYSTIC
Ну или bitbucket.org
PS Я буду обновлять комментарии.
Agel_Nash
Есть еще keybase