bitbucket — Самая простая инструкция по работе с git — Stack Overflow на русском

Статья последний раз была обновлена 04.03.2023



Я никогда не работал с системами контроля кода. Сейчас подключился к существующему репозиторию на bitbucket для работы с сайтом (при подключении выбрал clone). Про эти системы есть множество статей, но они изобилуют разными подробностями, которые мне на данный момент не нужны. Я не использую командную строку и не работаю с файлами локально (использую редактор Coda и правлю прямо на сервере по ftp). Мне нужна самая простая инструкция: я изменил файл, что дальше делать, чтобы сохранить изменения в репозитории? Я думал что нужно нажать для этого Commit, но данный пункт в меню у меня почему-то неактивен, активны только Push/Pull changes to/from origin, но Push у меня не работает так как я ожидал (а ожидал я что потом если нажать Pull, то файл восстановится до моего измененного состояния, но он восстановился до состояния до того, как я его менял). В списке branches я выбрал master.

        задан 17 апр ’14 в 19:39
baduga1699
                                                                                                                    
Кнопка commit была неактивной, потому что я менял файл через ftp, а чтобы запихать такой файл в репозиторий, нужно его сначала скачать на локальную копию.                 –                      baduga 18 апр ’14 в 12:31

Git — распределенная система, репозиторий на компьютере и сервере — это два совершенно разных репозитория, и push/pull просто синхронизирует эти репозитории по сети. При работе с репозиторием (оставим пока синхронизацию в стороне) нужны три команды — git add добавляет файлы к следующему коммиту (операция называется stage, команда для обратной операции — git rm --cached %file%), git commit записывает изменения отдельным коммитом, git reset выполняет простой откат к выбранному коммиту (здесь я сам плаваю), git revert похож на git reset, только его изменения могут быть представлены коммитом (в то время как ресет просто откатывается к некоторому коммиту). Таким образом обычный flow может выглядеть так:

geany superfile.py
geany secondfile.py
git add . # указывается директория или файл
git commit -m "Commit message" # Без сообщения в том или ином виде ничего не уйдет

После того, как локальный репозитарий изменился, его можно отправлять на remote

git push -u origin master # отправляем ветвь master на remote c название origin  и выставляем его главным. Мастер-ветку вроде бы можно и не указывать

В следующий раз уже достаточно будет сделать просто git push

git push

И все новые коммиты (но не изменения) уйдут на сервер.

git pull сольет с сервера репозиторий в том виде, который он есть, и, скорее всего, затрет имеющиеся изменения (если над ними не была произведена операция stage — в этом случае git откажется выполнять операцию до тех пор, пока stage-area не опустеет или ключ --force не заставит это сделать).

Long story short

  1. Создаются / меняются файлы
  2. Файлы добавляются к грядущему коммиту c помощью git add %path%
  3. Совершается коммит git commit, если не указывать ключ -m, то вылезет редактор, где нужно будет вписать сообщение с описанием изменений
  4. git push отправляет свежие коммиты на сервер
  5. git pull вытягивает репу в состоянии последнего коммита на сервере
  • Уже сделанный, но не отправленный коммит можно поправить с помощью команды git commit --amend. Уже отправленный коммит тоже можно, но ни в коем случае не надо этого делать, ничего страшного, если исправления улетят следующим.
  • Ненужные файлы исключаются из коммитов с помощью файла .gitignore. Можно один раз настроить его на игнорирование всяких *.log, *.pyc и прочего мусора, а потом безопасно делать git add ..
  • IDE очень часто будет смешивать команды git add и git commit до неразличимости

На самом деле книга по гиту объясняет все очень доступным языком: http://git-scm.com/book/ru/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B2-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9

Поэтому, возможно, стоит вообще пропустить этот пост и сразу лезть туда.

Ну и последнее. Git может быть (и будет) сложен, но это только к лучшему, это очень гибкая система.

        отвечен 17 апр ’14 в 23:59
Etki15.4k935
                                                                                                                    
Спасибо, но не совсем то, о чем я спрашивал 🙂 Меня не интересует командная строка и теория, именно поэтому я этот вопрос и задал, ключевое слово в нем — ПРОСТАЯ. Лично я считаю, что можно много найти интересных занятий, если не хочется заниматься непосредственно делом — и системы контроля кода далеко не лучший выбор в этом плане. Просто требованием заказчика по одному проекту является работа с git, и мне нужно только знать как эти несчастные файлы, которые я поменял, запихать в репозиторий 🙂 Хотя что может быть сложного в автоматическом бекапе с парой доп. функций, я тоже не понимаю.                 –                      baduga 18 апр ’14 в 0:51
1                                                          
@baduga я не знаком с конкретно этим редактором. Но суть от этого сильно не меняется: файлы добавляются в stage area — делается коммит — коммит отправляется на сервер (push). Перед коммитом необходимо делать pull, чтобы избежать конфликтов. И да, без изучения некоторой теории (тут ее минимум) будет сложно.                 –                      Etki 18 апр ’14 в 1:02
                                                                                                                    
Собственно вот этого ответа я и ждал — нужно нажать кнопку Commit, потом Push. Ну все-таки, что в этом сложного — нажать две кнопки, и зачем тут вообще теория?))) Если я правильно понял, то Stage Area — это локальная копия сайта или что-то вроде кеша?                 –                      baduga 18 апр ’14 в 1:08
                                                                                                                    
@baduga ближе к кэшу. Копия тех файлов, которые должны уйти на коммит. В IDE про нее обычно можно не помнить, так как она создается и тут же улетает на коммит.                 –                      Etki 18 апр ’14 в 1:15


http://ru.stackoverflow.com/questions/313731/%D0%A1%D0%B0%D0%BC%D0%B0%D1%8F-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%B0%D1%8F-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-%D1%81-git

Губарь Маргарита Александровна