Создан: 19.05.16
Модиф: 19.05.16
Иванов Аркадий.
Использование систем контроля версий для совместной разработки программ сегодня просто жизненно важно, поскольку разработку я часто веду через Internet с разных компьютеров. Даже скрипты и тексты документов я теперь всегда помещаю под управление такой системы - уж слишком удобно не беспокоиться о синхронизации файлов, а свалить эту суету на нормальную систему управления версиями.
Я довольно долго использовал Subversion при разработке программ на Java, C, shell и при написании Tex-документов. Глюки SVN в Eclipse заставили посмотреть на альтернативные решения. Здесь я записал для себя несколько команд и файлов GIT-а, которые нужны при работе.
git init - инициализация GIT в данном каталоге. Создает подкаталог .git и теперь содержимое этого каталога можно отдать под управление GIT-y.
git add имя_файла - вводит указанный файл под управление GIT-у.
Например:
git add *
Укажет, что все файлы текущего каталога и подкаталогов должны быть зарегистрированы в GIT-е, как отслеживаемые им.
Файл .gitignore служит для указания тех файлов, которые я не хочу помещать под управление GIT.
Пример содержимого:
# игнорирую Postscript-файлы
*.ps
# игнорирую PDF-файлы
*.pdf
# файлы PDF из каталога images мне нужны в системе управления версиями.
!images/*.pdf
git status - даст описание файлов, которые подготовлены к коммиту.
git commit - совершает запись в репозиторий всех проведённых изменений для файлов, которые были добавлены с помощью add.
git commit -a - запись в репозиторий с автоматическим добавлением в коммит файлов, которые были изменены. Позволяет пропустить шаг "git add"
git commit -m "text about commit" - задаёт описание коммита и проводит коммит без запуска редактора текста.
git clone texfiles texfiles1 - клонирует GIT-репозиторий из каталога texfiles в каталог texfiles1.
git clone --bare texfiles texfiles1.git - клонирует GIT-репозиторий из каталога texfiles в каталог texfiles1.git. В каталоге texfiles1.git будет "голый" репозиторий без исходных файлов. Сами файлы будут присутствовать только в базе репозитория в каталоге texfiles1.git/.git. Этой командой я подготавливаю репозиторий, который будет использоваться для работы с удалённых компьютеров. Расширение .git использовано для названия каталога из-за соглашения на именование каталогов.
git clone ssh://arc@mygithostname/GIT/texfiles1.git - клонирует GIT-репозиторий с удалённого хоста "mygithostname" из подкаталога ~/GIT/texfiles.git пользователя arc в подкаталог texfiles1 текущего каталога локальной машины.
git remote -v - даст описание удалённых репозиториев, которые вы используете для своего проекта. Когда вы клонировали репозиторий с удалённого сервера у вас автоматически будет удалённый репозиторий origin.
git fetch - получить файлы с удалённого репозитория, которых у вас нет.
git pull - - получить файлы с удалённого репозитория и слить изменения с изменениями ваших файлов.
git push - отправить изменения в удалённый репозиторий.
Git в Android-studio
Для того, чтобы у уже созданного проекта (в этом примере проект называется SportEntertainment)
был локальный и удалённый репозиторий, делаю следующее:
В Меню [VCS] -> [Enable Version Control Integration] - выбираю из списка "Git"
В рабочем каталоге проекта Android-studio запустит "git init" и сообщит:
Created Git repository in /home/arc/AndroidStudioProjects/SportEntertainment
В консоли перехожу в этот каталог и сообщаю git-у о своём удалённом репозитории:
git remote add origin ssh://arc@mygitserver/home/arc/GIT/SportEntertainment.git
Перехожу на сервер, где я держу удалённый git-репозиторий и в каталоге SportEntertainment.git делаю:
git --bare init
Теперь в Android-studio могу делать операции git-а:
Правой кнопкой мыши щёлкаю на каталоге приложения и добавляю файлы для commit-а:
Git -> +Add
Затем делаю Git -> Commit или Commit+Push
В предыдущем шаге с Push иногда странные проблемы, поэтому Push делаю через:
Правой кнопкой мыши на каталоге -> Git -> Repository -> Push и Push tags выбираю All.
Когда Android-studio слишком сильно упирается, никто не мешает сделать из консоли:
commit -a
push --all