Всем привет. Решил написать шпаргалку себе на будущее в большей степени, но может она пригодиться еще кому-нибудь.

Наверняка специалисты по 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)


  1. inv2004
    02.10.2018 08:13
    +1

    Мне кажется, можно было нагуглить и более простые, и более удобные способы, например gitlab


    1. MrMYSTIC
      02.10.2018 09:03

      Ну или bitbucket.org

      PS Я буду обновлять комментарии.


      1. Agel_Nash
        02.10.2018 11:04

        Есть еще keybase


  1. LoadRunner
    02.10.2018 08:25
    +1

    <\sarcasm>А можно такую же инструкцию, но для Яндекс.Диска?<\sarcasm>


  1. scifinder
    02.10.2018 08:28
    +1

    А использовать bitbucket.org религия не позволяет? Там приватные репозитории бесплатно.


    1. zzzmmtt
      02.10.2018 08:45

      Равно как и на гитлабе, о чем выше уже упомянули.


  1. KvanTTT
    02.10.2018 09:02

    Почему OneDrive? Можно использовать тогда уж любое облачное хранилище. Но все равно это разве что временное решение, т.к. изменяемые файлы будут постоянно синхронизироваться.


    1. Barabashkad
      02.10.2018 09:36

      наверное все таки не будет… работа ведется не прямиком в каталоге OneDrive… туда только пушатся изменения…


      1. LoadRunner
        02.10.2018 10:23
        +1

        Синхронизироваться будет любой изменённый файл (если настройки синхронизации по умолчанию). Причём с точки зрения OneDrive — это не изменение файла, а удаление старой версии и создание новой. Видимо, необходимо для системы бэкапов-откатов к прежним версиям. И в итоге на почту будут регулярно сыпаться письма вида: «у вас тут в корзине овердохрена файлов удалённых скопилось, мы их удалим, вы не против?».


        1. Barabashkad
          02.10.2018 10:27

          но будет все это произходить только во время пуша… незнаю как вы, но я делаю пуш редко… раз-два в день…


        1. DollaR84 Автор
          02.10.2018 10:51

          Barabashkad прав, я не размещаю в синхронизированном каталоге сами проекты, туда только пушатся изменения. А это не так часто.


        1. berez
          02.10.2018 19:31

          Вы будете смеяться, но при коммите в гит-репозиторию файлы в основном добавляются. Измененных файлов всего один или два (точно нее помню).


          1. DollaR84 Автор
            02.10.2018 19:36

            deletedПри коммите или при пуше?


            1. berez
              02.10.2018 19:43

              Прошу прощения, при пуше, конечно. Хотя пуш от коммита, думаю, не особо отличается в плане изменений в файлах репозитория.

              Был у меня скриптик, который синхрил git-репозиторию между флэшкой и диском. Пофайлово. Не спрашивайте зачем, так было надо. :)

              Так вот, если в репозиторию запушить пару-тройку коммитов, скрипт выдавал примерно такие цифры: 15 файлов добавлено, 2 изменено. Менялся в основном, конечно, .git/refs/heads/master и еще что-то там, не помню уже что.


    1. berez
      02.10.2018 19:36

      Совсем любое облачное хранилище использовать не получится.
      Например, если вы попытаетесь для гит-репозитории использовать Google Drive (aka Google Sync), вас ждет множество удивительных сюрпризов. Эта падла иногда самовольно переименовывает файлы (добавляет и удаляет "(1)" после имени). Да и с синхронизацией у них проблемы бывают — то файлы недососет, то старую версию обновить отказывается…


  1. foxyboy
    02.10.2018 09:59

    Зачем такие костыли, если есть кроме GitHub и другие сервисы. Тот же gitlab позволяет создавать приватные проекты.


  1. leschenko
    02.10.2018 10:01

    Есть бесплатные приватные git репозитории. Azure DevOps Repos (ранее VSTS), например. Зачем городить не понятно что и бантик сбоку?


  1. leschenko
    02.10.2018 10:04

    А что будет, если после такого пуша «в облако» у вас помрет винт и часть файлов останется не синхронизированными? Наверно это приведет к тому, что вы не сможете сделать пул, заменив диск, т.к. целостность будет нарушена.


    1. DollaR84 Автор
      02.10.2018 10:54

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


      1. Doomsday_nxt
        02.10.2018 11:12

        Вы разве не слышали про Законы Мерфи?


        1. DollaR84 Автор
          02.10.2018 11:23
          -1

          Ну значит так сложилось. На то это и домашние самоделки если уж прямо все совпало. Это же явно не для заработка. А рабочие проекты думаю можно хранить на github, gitlab или на любом другом сервисе, что приводили в комментариях выше.


    1. farcaller
      02.10.2018 13:40

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


      1. leschenko
        02.10.2018 16:19

        С одним файлом может ничего и не случится. Но там далеко не один файл меняется после пула, а порядок отправки файлов в облако не определен. Из 10 файлов зальются 5 через 1 и всё — спокойной ночи.


  1. DollaR84 Автор
    02.10.2018 10:07

    Спасибо всем ответившим и предложившим другие сервисы.
    Вы правы, можно использовать и их. Почему я решил сделать на OneDrive:
    1. Просто наивно я не знал про gitlab и bitbucket.org;
    2. есть диск OneDrive, который просто простаивает пустым. Зачем пропадать добру? :)

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


    1. LoadRunner
      02.10.2018 10:28

      так как в русскоязычном интернете такой информации нет
      По причине очень лёгкого способа найти эту информацию. То есть, информация в русскоязычном интернете есть, просто не только лишь все могут её найти. Например, по запросу в гугл «приватный репозиторий git» выдаются очень заманчивые результаты.
      Ну и плашка tutorial для такой статьи излишняя.
      Потому что статья выглядит: Как создать локальный репозиторий git. А это, извините, вопрос из FAQ к git.
      То, что репозиторий разместили на хранилище с поддержкой синхронизации в другое место — ну, довольно очевидный шаг для тех, кто пользуется этими самыми хранилищами (речь о домашних пользователях).


      1. DollaR84 Автор
        02.10.2018 11:01

        >>> По причине очень лёгкого способа найти эту информацию. То есть, информация в русскоязычном интернете есть, просто не только лишь все могут её найти. Например, по запросу в гугл «приватный репозиторий git» выдаются очень заманчивые результаты.

        То что информации в русскоязычном интернете нет — я писал про связку git с OneDrive, а никак не о наличии приватных репозиториев на других сервисах. Внимательней читайте.
        Про создание репозитория локальной папке вы правы, но я с ходу не нашел. Поэтому в статье и написал, что инструкция будет полезна для начинающих как и я, а профессионалы и так наверняка знают.


        1. LoadRunner
          02.10.2018 11:11

          Я немного о другом.
          Возникла необходимость завести git-репозиторий.
          Первая мысль: мануал, как же, собственно, он создаётся.
          Вторая мысль: а если винт помрёт? А залью-ка я это в какое-нибудь облако, благо их полно на любой вкус.
          А дальше просто — в какую синхронизируемую другой программой папку размещать каталог репозитория. Для git нет разницы, на каком локальном хранилище репозиторий, бэкапится ли и как именно — это уже вопросы к файловой системе и другим программным средствам (хоть DFS, хоть снапшоты виртуалки — извращенцев полно).
          Ценность мануала для новичков крайне мала — только для тех, кто своими силами не разобрался в документации. Но это же Хабр, ё-моё!


          1. DollaR84 Автор
            02.10.2018 11:28

            Хорошо, я понял ваше мнение. Значит больше не буду писать подобных простых статей, а если надо — уберу и эту из публикаций.


  1. dedalqq
    02.10.2018 11:03

    bitbucket.org и gitlab — это конечно же хорошо, однако…
    Имхо gitlab уж слишком развесистый. Для своих поделок там слишком много лишнего, а вот к bitbucket.org у меня просто не лежит душа, хотя ничего плохого сказать о нем я не могу.
    Для себя же я выбрал следующее: gogs.io (кто не знает: еще один аналог github и gitlub) установленный на личный VPS (благо они сейчас от ~300р) + таким решением я получаю не только «хранилище кода» но и место где их можно запускать, причем не важно на чем бы они было написаны.


    1. DollaR84 Автор
      02.10.2018 11:05

      Вот и я хотел сказать, что на вкус и цвет как говорится… :) Кому-то нравится одно, кому-то другое, у третьего тоже свое мнение. Спасибо за информацию о еще одном сервисе.


    1. andreymal
      02.10.2018 11:51

      Говорят, Gitea (форк Gogs) лучше и развивается быстрее


      1. dedalqq
        02.10.2018 11:54

        Хм, не слышал, спасибо, «потыкаю» на досуге